Amazon QuickSight で複数選択パラメータを計算フィールドで使った時に「すべて選択」で考慮すべき挙動を紹介
いわさです。
Amazon QuickSight では分析やダッシュボード上でインタラクティブな動作を行わせるためにパラメータを駆使することがよくあります。
このパラメータは単一の値の他に複数の値をリストやドロップダウンコントロールを使って閲覧者から設定させることができます。
今回、次のようなサンプルデータに対して、複数の日付群 A と B を指定し、その差を比較したいという要件がありました。
日付,製品カテゴリ,生産数量(個),不良品数(個)
2023-05-03,電子部品A,1250,15
2023-05-03,電子部品B,980,12
2023-05-03,機械部品C,540,8
2023-05-10,電子部品A,1320,18
2023-05-10,電子部品B,1050,14
2023-05-10,機械部品C,580,7
2023-05-17,電子部品A,1280,13
2023-05-17,電子部品B,1100,11
2023-05-24,電子部品A,1350,16
2023-05-24,機械部品C,620,9
この実装を進めていくなかで複数値選択コントロールで「すべて選択」を指定した場合を想定した対応が必要だったので共有したいと思います。
指定した期間の数値を集計する
まず、上記に対して対象期間の数値フィールドの集計を行いたいと思います。
簡単に行いたい場合はフィルター機能を使えば集計できるのですが、今回は複数のパラメータを扱う関係で計算フィールドで頑張る必要がありました。
合計を行いたい場合はsumIf
関数を使いつつ、in
関数を条件に複数値パラメータを指定することで指定した日付のみを数値データを抽出することができます。
sumIf({不良品数(個)}, in(日付, ${beforeDate}))
上記計算フィールドを表示してみると次のようになります。選択した日付だけ表示されていますね。
すべて選択するとうまく動かない
うまいこといったなと思ったのですが、「すべて選択」あるいは手動ですべての日付のチェックを ON にした場合に意図しない挙動が発生しました。
数値集計が行われなくなったのです。どうやら期待どおり計算フィールドが動いていないようでした。
コントロールのパラメータにデフォルト値が設定されている場合は、コントロールから「すべてを選択」を非表示にすることも可能です。
ただ、こちらを非表示にしても事象は解決しませんでした。
「すべて選択」時はパラメータ値が NULL 扱いとなる
結論としては「すべて選択」を選択した時、複数値パラメータの値は NULL となるようです。
切り分けに以下のような計算フィールドを評価してみました。
ifelse(in(日付, ${beforeDate}), TRUE, FALSE)
日付をすべて選択していない場合は次のように FALSE となってしまいます。
次のように NULL の場合に強制的に TRUE 判定させた場合はうまく動くことを発見しました。
ifelse(in(NULL, ${beforeDate}), TRUE, in(日付, ${beforeDate}))
実は複数値パラメータを扱える関数は少ないのですが、in
関数は複数値パラメータの利用が想定されており使うことができます。これを利用してこの関数内で NULL リテラルを評価させることにしました。
NULL パラメータを考慮して計算する
ということでsumIf
の条件式内で同じように NULL 判定を追加してみます。次のような計算フィールドを作成しました。
sumIf({不良品数(個)}, ifelse(in(NULL, ${beforeDate}), TRUE, in(日付, ${beforeDate})))
日付を一部選択したときは従来どおり動作しています。
すべての日付を選択したときも...期待どおり動作していますね!
おまけ:期間の前後比較
今回は複数のシートでそれぞれ選択した日付(複数)を最後のシートで比較するという仕組みを作りたかったのです。
1 シート目でひとつめのパラメータbeforeDate
に関するコントロールを作成することが出来ました。
2 シート目にふたつめのパラメータafterDate
に関するコントロールを作成します。
で、比較を行いたいシートではここまでの内容を考慮した計算フィールドを作成してやります。
sumIf({不良品数(個)}, ifelse(in(NULL, ${afterDate}), TRUE, in(日付, ${afterDate}))) - sumIf({不良品数(個)}, ifelse(in(NULL, ${beforeDate}), TRUE, in(日付, ${beforeDate})))
計算フィールドで行っているだけではあるのですが、ビジュアル上は 1 シート目と 2 シート目の差分を 3 シート目で計算しているように見えますね。良さそうです。
さいごに
本日は Amazon QuickSight で複数選択パラメータを計算フィールドで使った時に「すべて選択」で考慮すべき挙動を紹介しました。
「すべてを選択」で期待どおり動かなかった方はこちらの観点で試してみてください。
なお、パラメータには予約値の概念があるですが、これはあくまでもコントロール表示時に「すべて選択」に該当する値を指すものなので、計算フィールドで推奨値であるALL_VALUES
を指定してもうまく挙動しませんでした。