Amazon QuickSight で複数選択パラメータを計算フィールドで使った時に「すべて選択」で考慮すべき挙動を紹介

Amazon QuickSight で複数選択パラメータを計算フィールドで使った時に「すべて選択」で考慮すべき挙動を紹介

Clock Icon2025.03.11

いわさです。

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

0FDC3F84-D924-4A54-96EC-93A67827EDE7.png

この実装を進めていくなかで複数値選択コントロールで「すべて選択」を指定した場合を想定した対応が必要だったので共有したいと思います。

指定した期間の数値を集計する

まず、上記に対して対象期間の数値フィールドの集計を行いたいと思います。
簡単に行いたい場合はフィルター機能を使えば集計できるのですが、今回は複数のパラメータを扱う関係で計算フィールドで頑張る必要がありました。

合計を行いたい場合はsumIf関数を使いつつ、in関数を条件に複数値パラメータを指定することで指定した日付のみを数値データを抽出することができます。

sumIf({不良品数(個)}, in(日付, ${beforeDate}))

上記計算フィールドを表示してみると次のようになります。選択した日付だけ表示されていますね。

BF24A81B-E0A2-4F18-934D-BBFBEAB67785.png

すべて選択するとうまく動かない

うまいこといったなと思ったのですが、「すべて選択」あるいは手動ですべての日付のチェックを ON にした場合に意図しない挙動が発生しました。
数値集計が行われなくなったのです。どうやら期待どおり計算フィールドが動いていないようでした。

6BE387B2-AF55-4C18-BC64-7C56175EABB2.png

コントロールのパラメータにデフォルト値が設定されている場合は、コントロールから「すべてを選択」を非表示にすることも可能です。
ただ、こちらを非表示にしても事象は解決しませんでした。

518670EA-D1C8-47C6-A73B-B3A5FE993479.png

「すべて選択」時はパラメータ値が NULL 扱いとなる

結論としては「すべて選択」を選択した時、複数値パラメータの値は NULL となるようです。
切り分けに以下のような計算フィールドを評価してみました。

ifelse(in(日付, ${beforeDate}), TRUE, FALSE)

日付をすべて選択していない場合は次のように FALSE となってしまいます。

A407DE81-3F11-404B-B035-FAFFBFEC8D95.png

80027D74-7350-4640-AE82-8C2BB851332B.png

次のように NULL の場合に強制的に TRUE 判定させた場合はうまく動くことを発見しました。

ifelse(in(NULL, ${beforeDate}), TRUE, in(日付, ${beforeDate}))

D9BEB515-4788-44E2-856A-242F7A433620.png

実は複数値パラメータを扱える関数は少ないのですが、in関数は複数値パラメータの利用が想定されており使うことができます。これを利用してこの関数内で NULL リテラルを評価させることにしました。

NULL パラメータを考慮して計算する

ということでsumIfの条件式内で同じように NULL 判定を追加してみます。次のような計算フィールドを作成しました。

sumIf({不良品数(個)}, ifelse(in(NULL, ${beforeDate}), TRUE, in(日付, ${beforeDate})))

日付を一部選択したときは従来どおり動作しています。

13E03E93-74B0-490F-9E28-7A933E337AF0.png

すべての日付を選択したときも...期待どおり動作していますね!

A24C0E1A-913F-42E0-92BE-FDB5EA32BD79.png

おまけ:期間の前後比較

今回は複数のシートでそれぞれ選択した日付(複数)を最後のシートで比較するという仕組みを作りたかったのです。
1 シート目でひとつめのパラメータbeforeDateに関するコントロールを作成することが出来ました。

2 シート目にふたつめのパラメータafterDateに関するコントロールを作成します。

DF3CC652-0160-4768-A8D5-17A9542B1B26.png

4275B168-9B55-49EE-BC1A-8006A73F8B18.png

で、比較を行いたいシートではここまでの内容を考慮した計算フィールドを作成してやります。

sumIf({不良品数(個)}, ifelse(in(NULL, ${afterDate}), TRUE, in(日付, ${afterDate}))) - sumIf({不良品数(個)}, ifelse(in(NULL, ${beforeDate}), TRUE, in(日付, ${beforeDate})))

DC15366E-239B-4A67-A958-C0B5BF49ED55.png

計算フィールドで行っているだけではあるのですが、ビジュアル上は 1 シート目と 2 シート目の差分を 3 シート目で計算しているように見えますね。良さそうです。

さいごに

本日は Amazon QuickSight で複数選択パラメータを計算フィールドで使った時に「すべて選択」で考慮すべき挙動を紹介しました。

「すべてを選択」で期待どおり動かなかった方はこちらの観点で試してみてください。

なお、パラメータには予約値の概念があるですが、これはあくまでもコントロール表示時に「すべて選択」に該当する値を指すものなので、計算フィールドで推奨値であるALL_VALUESを指定してもうまく挙動しませんでした。

image.png

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.