【QuickSight】疑似的に任意のデータの集計比較みたいなものを作る
任意のデータを集計→グルーピング化→比較 をやりたい場合、パラメータやアクションを利用して疑似的に再現する方法
最終的にはこんな感じ
テストデータの中身
毎分までの粒度の日付データと名前、値を持っており、各名前(4種類)に対して、7/1の12:00~10分間を4日分持っているテストデータを利用します。
datetime | name | value |
---|---|---|
2023-07-01 12:00:00 | 田中 | 43 |
2023-07-01 12:01:00 | 田中 | 21 |
… | … | |
2023-07-04 12:09:00 | 菊池 | 100 |
2023-07-04 12:10:00 | 菊池 | 87 |
グルーピングしたい数だけパラメータを作成する
今回の記事では、AグループとBグループを決め、毎分データをもとに折れ線グラフを元にグルーピングした内容を比較する。今回のテストデータでは、日ごとにユニークなデータと判別するには、日単位のデータとnameが等しい場合はユニークなデータとして見ることができる。
なので、グルーピングしたい数だけパラメータを作成する。例えば、GroupAの1個目の日付を格納するパラメータは
で、名前は、
こんな感じで、比較数(A,B)×グルーピングしたい数(A1,A2)×ユニークの判断が可能な数(日付,名前) パラメータを作成する。
設定したパラメータを元に計算フィールドを作成する
パラメータの値を元に、グルーピングするための計算フィールドを作成する。
今回の例ではこんな感じ。
ifelse(
dateDiff(${GroupA1Date},datetime,"DD")=0 AND ${GroupA1Name}=name,"GroupA",
dateDiff(${GroupA2Date},datetime,"DD")=0 AND ${GroupA2Name}=name,"GroupA",
dateDiff(${GroupB1Date},datetime,"DD")=0 AND ${GroupB1Name}=name,"GroupB",
dateDiff(${GroupB2Date},datetime,"DD")=0 AND ${GroupB2Name}=name,"GroupB",
""
)
今回、ユニークの判断のために日付を用いたため、パラメータに格納する日付のデータと毎分のデータを比較するためにdateDiff
を使用している。
dateDiff(${GroupA1Date},datetime,"DD")=0
日付の日単位の差分を算出して、それが0であれば、同じ日としてtrueを返す形でやっています。
アクションを設定する
ユーザーが任意のデータを選択するためのテーブルを作成します。今回は、datetime(DAY)
、name
、GroupID
、value
の値をフィールドウェルに加えたテーブルを作成した。
このテーブルに対して、各日付、名前ごとにアクションを登録する。
すべて登録するとこんな感じになる。
この中の削除に関しては、各設定したパラメータ値を初期化する場合に選択するボタンで、設定の中身に関しては、名前のパラメータ値に対してカスタムの値を代入している。
ビジュアライズを作成
今回は毎分データで比較したいため、折れ線グラフのビジュアライズを用意し、X軸にtimecode
という計算フィールドを用意し、フィールドウェルに設定している。今回のテストデータではX軸にdatetime
を直接入れてしまうと、7月1日~7月4日分まで出てしまうため、時と分だけ取り出し、日にちに限らず統一された時間のフォーマットデータを作成している。
substring(toString(datetime),12,5)
後は、値にvalue
、色にGroupID
を選択している。
実際の動作
テストの初期画面全体はこんな感じ。
ここから左のテーブルを選択して、
すべてのパラメータに値を入れたとき、こんな感じになる。
(汎用の色は各々設定してください。)
後は若干わかりやすくするために、テーブルに色を付けたりすると、
こんな感じにわかりやすくしたりできる。
今回のテスト画面では、選んでいないデータは灰色の点線で表現していますが、いらない場合はフィルタリング等で消してください。
以上。
Discussion