質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Kibana

Kibanaとは、ElasticSearchをバックエンドとする、データを可視化するGUIツールです。

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Q&A

解決済

1回答

929閲覧

KibanaのVisualizeでフィルタが評価される順序を考慮し出力したい

shinjukuzame

総合スコア12

Kibana

Kibanaとは、ElasticSearchをバックエンドとする、データを可視化するGUIツールです。

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

0グッド

0クリップ

投稿2020/06/24 08:11

編集2020/06/24 08:19

KibanaのVisualizeで想定通りの出力ができずに困っています。

以下のようなデータがElasticsearchに入っているとします。

ユーザ名 入退室 時刻
ユーザ1 入室 2020-06-23 10:45:08
ユーザ2 入室 2020-06-23 11:44:08
ユーザ3 入室 2020-06-23 11:50:00
ユーザ2 退室 2020-06-23 18:45:08

Kibanaを用いて、上記のデータから「現在入室中であるユーザ」を可視化したいと思っています。
ロジックとしては、

1)ユーザ名でグループ化し、その中で時刻が最大であるものを抽出
2)上記1)に対し、入退室:入室であるレコードを抽出

残ったものが「現在入室中であるユーザ」

このロジックでkibanaを使い可視化したいと思っているのですが、うまくいきません。
端的には、  
1)の評価結果に対して2)のフィルタがかからず、2)のフィルタが想定より早いタイミングで実行される  
状況です。

kibanaのVisualize⇒Data Tableを使用する前提で、

■Metrics
Aggregation:Max フィールド:時刻

■Buckets
Split rows ⇒
Aggregation:Terms フィールド:ユーザ名

とすると、

ユーザ名 入退室 時刻
ユーザ1 入室 2020-06-23 10:45:08
ユーザ3 入室 2020-06-23 11:50:00
ユーザ2 退室 2020-06-23 18:45:08

の結果**(A)**が得られます。ここまでは想定どおりで、1)の結果が得られています。

この(A)に対し2)のフィルタをかける方法をご教示いただきたく。

<やりたいこと>

上記から"入退室":"入室" でフィルタして

ユーザ名 入退室 時刻
ユーザ1 入室 2020-06-23 10:45:08
ユーザ3 入室 2020-06-23 11:50:00

⇒ユーザ1およびユーザ3が入室中であるとわかる

<試したこと>
画面上部の「+Add Filter」にて「"入退室":"入室"」のフィルタ条件をかける

ユーザ名 入退室 時刻
ユーザ1 入室 2020-06-23 10:45:08
ユーザ2 入室 2020-06-23 11:44:08
ユーザ3 入室 2020-06-23 11:50:00

となってしまいます。

「入退室:入室」のフィルタが(A)に対してかかるのではなく
まず「入退室:入室」のフィルタが元データに対してかかり、その結果を

■Metrics
Aggregation:Max フィールド:時刻
■Buckets
Split rows ⇒
Aggregation:Terms フィールド:ユーザ名

の条件で集計しているように見えます。

<有識者の方に教えていただきたいこと>

  • (A)の結果に対して「入退室:入室」のフィルタ条件をかける方法、

もしくは

  • 上記の要件を満たす別のロジックや方法の提案

について ご教示いただけますと幸甚です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(A)の結果に対して「入退室:入室」のフィルタ条件をかける方法

こちらは残念ながら通常のVisualizationsでは実現できません。
Termsアグリゲーション結果のバケットをフィルタリングするためのBucket Selector アグリゲーションがData TableのVisualizationでは使えないためです。

上記の要件を満たす別のロジックや方法の提案

Bucket Selector の様にVisualizationから利用できないアグリゲーションはいくつかありますが、これらを利用して可視化を行いたい場合、Vega Visualizationを使うという手があります。Vegaでは任意のElasticsearchのクエリDSLを記述でき、取得したデータを自由に可視化できます。こちらのサンプルが参考になります。多少手がかかりますが、ご質問されているようなケースでは有用です。

投稿2020/07/08 08:33

ijokarumawak

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shinjukuzame

2020/07/09 13:53

ご回答ありがとうございました。大変参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問