🎃

【QuickSight】疑似的に任意のデータの集計比較みたいなものを作る

2023/07/25に公開

任意のデータを集計→グルーピング化→比較 をやりたい場合、パラメータやアクションを利用して疑似的に再現する方法

最終的にはこんな感じ

テストデータの中身

毎分までの粒度の日付データと名前、値を持っており、各名前(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)×ユニークの判断が可能な数(日付,名前) パラメータを作成する。

設定したパラメータを元に計算フィールドを作成する

パラメータの値を元に、グルーピングするための計算フィールドを作成する。
今回の例ではこんな感じ。

GroupID
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)nameGroupIDvalueの値をフィールドウェルに加えたテーブルを作成した。

このテーブルに対して、各日付、名前ごとにアクションを登録する。

すべて登録するとこんな感じになる。

この中の削除に関しては、各設定したパラメータ値を初期化する場合に選択するボタンで、設定の中身に関しては、名前のパラメータ値に対してカスタムの値を代入している。

ビジュアライズを作成

今回は毎分データで比較したいため、折れ線グラフのビジュアライズを用意し、X軸にtimecodeという計算フィールドを用意し、フィールドウェルに設定している。今回のテストデータではX軸にdatetimeを直接入れてしまうと、7月1日~7月4日分まで出てしまうため、時と分だけ取り出し、日にちに限らず統一された時間のフォーマットデータを作成している。

timecode
substring(toString(datetime),12,5)

後は、値にvalue、色にGroupIDを選択している。

実際の動作

テストの初期画面全体はこんな感じ。

ここから左のテーブルを選択して、

すべてのパラメータに値を入れたとき、こんな感じになる。
(汎用の色は各々設定してください。)

後は若干わかりやすくするために、テーブルに色を付けたりすると、

こんな感じにわかりやすくしたりできる。

今回のテスト画面では、選んでいないデータは灰色の点線で表現していますが、いらない場合はフィルタリング等で消してください。

以上。

Discussion