【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