指定した値のグループを抽出したい

いつもお世話になっております。
以前質問した内容の継続質問になります。

ご教示いただいた、「検索時選択したいコード群をパラメータにセットし、フィルターで呼び出す方法」を実施しました。
そこで新たな不明点が出ましたので質問いたします。

<質問内容>
選択肢の”コード群全て”と個別コード両方を設定することはできますか

<実現したい内容>
・コード単品、もしくは複数の単品コードを選択して検索したい。
・”テストフィルタ全て”(設定したコード群全て)といった選択肢も必要で、データに存在するコード全てではなく、このフィルタ内にに設定しているコードの全てを選択したい。
この例であれば、1234、2345、3456の3つのみが選択される。
・選択肢としてNULLは表示しない(静的デフォルト値で対応済)

<実施したフィールド内容、結果>
1 ORで作成


→”テストフィルタ全て”のみ動作し、他単品コードが動作しない

2 リストで作成


→”テストフィルタ全て”が動作せず、単品コードのみ動作する。

<他懸念点>
・”テストフィルタ全て”を作成せず、単品コードのみ設定したとき、
単品コードのすべてにチェックを入れると
データに存在するコード全てが抽出されてしまう。

@chiemi.shimoda
ご質問いただきありがとうございます。

入力データは、以下のものです。

製造番号
1234567890A
1234567890B
1234567890C
1234567890D
1234567890E

以下の設定でいかがでしょうか?

Step1 - パラメータの設定
パラメータ名:TestParameter

Step2 - 計算フィールドの設定
計算フィールド名:testfield

ifelse(
    ${TestParameter} = "すべて", "Y",
    ${TestParameter} = "1234567890Aのみ" AND 製造番号 = "1234567890A", "Y",
    ${TestParameter} = "1234567890Cのみ" AND 製造番号 = "1234567890C", "Y",
    ${TestParameter} = "1234567890Aと1234567890Cのみ" AND (製造番号 = "1234567890A" OR 製造番号 = "1234567890C"), "Y",
    ${TestParameter} = "1234567890Aと1234567890C以外" AND (製造番号 <> "1234567890A" AND 製造番号 <> "1234567890C"), "Y",
    "N"
)

Step3 - フィルターの設定
計算フィールドのtestfieldに対するフィルターの設定

Step4 - コントロールの設定
パラメータTestParameterに対するコントロール

上記設定を行って、コントロールを操作した結果です。

Result1 - デフォルトの状態("1234567890Aと1234567890Cのみ"が選択されている状態)

Result2 - "1234567890Aと1234567890C以外"が選択されている状態

Result3 - "1234567890Aのみ"が選択されている場合

Result4 - "1234567890Cのみ"が選択されている場合

Result5 - ”すべて”が選択されている場合

1 Like

ご回答ありがとうございます。
こちらの環境で動作確認したところ意図した動作になりませんでした。
実装した機能の中での希望の動作は以下ですが実現できるでしょうか。
・デフォルトではフィルタ内のコード関係なくすべてのコードを表示したい、
”すべて選択”が選択されている状態にしたい。
・”testfield全て”選択時には指定したコード群のみ抽出したい。
(1234、2345,3456,4567 のうちのすべて)

実施した内容は以下です。

Step1 - パラメータの設定
(デフォルトではフィルタ関係なくデータセットに存在するすべての値を表示したいためこのようなデフォルト値に設定)


Step2 - 計算フィールドの設定

Step3 - フィルターの設定

Step4 - コントロールの設定

結果
・”testfield全て”選択時にはデータ内のすべてのコードが抽出される、
フィルタの計算フィールドで設定したコード関係なく抽出される。(意図しない動作)
・”すべて選択”を選択するとデータなしになる。(意図しない動作)
・単コードを選択したときは選択したコードのみ抽出される、(意図した動作)

@chiemi.shimoda
追加質問いただきありがとうございます。

入力データは同じです。

以下の設定でいかがでしょうか?

デバッグしやすいように、画面上に計算フィールドの値も表示しております。
デバッグする場合には、フィルターの設定を削除すると良いと思いますので、お試しください。

Step1 - パラメータの設定
パタメータ名:TestParameter

Step2 - 計算フィールドの設定
(1) 計算フィールド名:testfield
適当に設定していますので、適宜変更をお願いします。

ifelse(
    isNull(${TestParameter}), "Y",
    ${TestParameter} = "特定製造番号のみ(1234567890A,1234567890C,1234567890E)" AND (製造番号 = "1234567890A" OR 製造番号 = "1234567890C" OR 製造番号 = "1234567890E"), "Y",
    ${TestParameter} = "1234567890Aのみ" AND 製造番号 = "1234567890A", "Y",
    ${TestParameter} = "1234567890Cのみ" AND 製造番号 = "1234567890C", "Y",
    ${TestParameter} = "1234567890Aと1234567890Cのみ" AND (製造番号 = "1234567890A" OR 製造番号 = "1234567890C"), "Y",
    ${TestParameter} = "1234567890Aと1234567890C以外" AND (製造番号 <> "1234567890A" AND 製造番号 <> "1234567890C"), "Y",
    "N"
)

(2) 計算フィールド名:testparameter
QuickSight側から送られてくるパラメータの値表示用

ifelse (
    isNull(${TestParameter}), "NULL",
    ${TestParameter}
)

Step3 - フィルターの設定
計算フィールドのtestfieldに対するフィルターの設定

Step4 - コントロールの設定
パラメータTestPrameterに対するコントロール


上記設定を行って、コントロールを操作した結果です。

Result1 - デフォルトの状態(”すべて(すべて選択)”が選択されている場合)

Result2 - ”特定製造番号のみ(1234567890A,1234567890C,1234567890E)”が選択されている場合

Result3 - ”1234567890Aと1234567890Cのみ”が選択されている場合

Result4 - ”1234567890Aと1234567890C以外”が選択されている場合

Result5 - ”1234567890Aのみ”が選択されている場合

Result6 - ”1234567890Cのみ”が選択されている場合

以下、フィルターを削除したときの表示です。

Result1 - デフォルトの状態(”すべて(すべて選択)”が選択されている場合)

Result2 - ”特定製造番号のみ(1234567890A,1234567890C,1234567890E)”が選択されている場合

ありがとうございます。
ご教示いただいた手順で設定したところ実現できました。
また、パラメータの設定箇所で”単一の値”として手順の記載がありますが別途、”複数の値”で設定し、

Step2 - 計算フィールドの設定の手順で複数の値設定のパラメータを使用しようとしたところ、計算フィールドを保存できませんでした。
(下のエラーがでました)
スクリーンショット 2025-04-17 133453

パラメータが単一の値でのみ機能するのしょうか。

@chiemi.shimoda
追加質問ありがとうございます。

複数選択の場合ですね。

入力データは同じです。

以下の設定でいかがでしょうか?

Step1 - パラメータの設定
パラメータ名:TestParameterMulti
注意:複数の静的デフォルト値を空欄にすると、「すべて選択」が選択された状態になります。

Step2 - 計算フィールドの設定
計算フィールド名:testfieldmulti

ifelse(
    in(NULL, ${TestParameterMulti}), TRUE,
    in(製造番号, ${TestParameterMulti})
)

Step3 - フィルターの設定
計算フィールドのtestfieldmultiに対するフィルターの設定

Step4 - コントロールの設定
パラメータTestPrameterMultiに対するコントロール
注意:「特定の値」を入力しても良いのですが、メンテナンスが面倒になりそうなので、データセットの「製造番号」のフィールドにマッピングしてあります。


上記設定を行って、コントロールを操作した結果です。

Result1 - デフォルトの状態(1234567890Aと1234567890Bと1234567890Cが選択されている場合)


Result2 - ”すべて(すべて選択)”が選択されている場合


Result3 - ”1234567890A”のみが選択されている場合


あとは、同じように複数選択(単一選択も可)していただければ同じような結果が表示されます。

(注意)
現状、QuickSightには文字列を分割して配列として返却するといった関数が実装されていないため、コントロールの「特定の値」に、“1234567890A,1234567890C,1234567890E"といった文字列を設定し、計算フィールド側で上記の文字列を”,"で分割し、行列にして処理を実施するといったことができません。したがって、今回のような設定になります。

説明が不足しており申し訳ございません。
こちらで起こっていた状況が以下です。

Step1 - パラメータの設定
"複数の値"の設定で作成。

Step2 - 計算フィールドの設定
(1) 計算フィールド名:testfield

ここで保存時以下のエラーが出ていた状況です。
そのため次のステップに進んでおりません。
スクリーンショット 2025-04-17 133453

また、”単一の値”でパラメータ作成時には希望の動作が実現できましたが、
(2) 計算フィールド名:testparameter
を作成せず機能しました。
(どこのどのステップでこのフィールドを使用するかわからず、、)

たびたび恐れ入りますがよろしくお願いいたします。

パラメータ設定時に、「複数の値」を選択して、計算フィールド作成時に、エラーが発生したのは、ifelse関数の引数に配列が渡されたからです。ifelse関数は、式を評価することができるのみで、配列を直接評価する仕様にはなっていないからです。

したがって、「Step2 - 計算フィールドの設定」のように in関数を使って、配列を受け取れるようにしないといけません。

(2) 計算フィールド名:testparameter
を作成せず機能しました。
(どこのどのステップでこのフィールドを使用するかわからず、、)

この計算フィールドは、パラメータ経由で渡されてくるコントロールで選択した値を表示するためのものです。
あくまでも、コントロールで選択された値が何であるのかチェックするためのものですので、実務では不要です。
従いまして、作成しなくても問題ありません。

計算フィールドの振る舞いとしては、以下の通りとなります。

パラメータと画面上に設定したコントロールが連動しており、コントロールにて単一もしくは複数の値を選択した場合に、パラメータ経由で渡されてくる選択した値を評価する計算フィールドと、計算フィールドと連動しているフィルターを使って、画面上の表示をフィルタリングしている動作になります。