QuickSight のデータセットパラメータの活用方法検証

## はじめに
本記事では2023年5月に公開されたAmazon QuickSightに関する以下リリースに関して検証をしてみました。

[Amazon QuickSight がスライスとダイスの体験を最適化するデータセットパラメータをローンチ](https://aws.amazon.com/jp/about-aws/whats-new/2023/05/amazon-quicksight-dataset-parameters-slicing-dicing-experiences/)
[Amazon QuickSight でのデータセットパラメータの使用](https://docs.aws.amazon.com/quicksight/latest/user/dataset-parameters.html)

リリース内容については簡単に後述しますが、
データセットパラメータの機能自体を検証している記事がすでにいくつかあるようなので、
本記事では、データセットパラメータがどういうものかという機能自体の検証ではなく、
下記2点の観点で検証をしてみました。
①カスタムSQLにおける演算子組み合わせの検証
②パフォーマンス検証

※データは検証用に用意したテストデータを使用します

## データセットパラメータについて
データセット自体にパラメータを設定することができるようになりました。
まずQuickSightのデータ接続には以下2種類があります。
・SPICEモード：SPICE（QuickSight のインメモリデータベース）に定期的にデータをロードしておき分析からは都度 SPICEへアクセスする方法
・ダイレクトクエリモード：分析がデータを取得するタイミングで都度データソースを読みにいく方法

基本的に今回搭載されたデータセットパラメータが使えるのはダイレクトクエリモードになります。＊SPICEモードでも一部機能は使用可
ダイレクトクエリでデータセットに対して発行されるクエリにカスタムSQLを設定し、
カスタムSQL内でデータセットパラメータを埋め込むことができます。

データセットパラメータを使用する利点として、クエリのチューニングやコントロールがしやすいことが挙げられます。
通常、ダイレクトクエリ時にはクエリが自動生成されますが、
自動生成される部分のクエリはチューニングが難しくパフォーマンス低下につながる場合もあります。
それがデータセットパラメータを使用することでコントロールしやすくなる可能性があります。

## 検証内容①カスタムSQLにおける演算子組み合わせ検証
先述のとおりデータセットパラメータはカスタムSQLに組み込むことができます。
さらに、そのデータセットパラメータを分析上でフィルターコントロールと紐づけることで効率的なフィルターが作れるのではということに着目し、
通常のフィルターでは作れない複雑な条件の組み合わせが、
データセットパラメータを使用して実現できるかを検証しました。

Quicksight上では複数のフィルタを設定することができますが、
以下例のような、複数のAND条件をOR条件で繋ぐフィルターを作成することができません。

(条件A = aa and 条件B = bb) or (条件A = cc and 条件B = dd)

※正確には計算フィールドを活用することで
　同様の動き(フィルター)を再現自体は可能ですが、フィルター本来の機能としては実装不可
※なお、上記の逆（OR条件をANDで繋ぐ）は通常フィルターで実装可能です。
　(条件A = aa or 条件B = bb) and (条件A = cc or 条件B = dd)

今回は検証として以下条件のフィルターをデータセットパラメータを使用することで作成できるか検証します。
(エリア=東京 and カテゴリー=コンピューター)
or
(エリア=大阪 and カテゴリー=モバイル)

### 参考：計算フィールドを活用して実装する方法
参考までに、従来の機能で
「(条件A = aa and 条件B = bb) or (条件A = cc and 条件B = dd)」を実装しようとすると次のような方法があります。

①計算フィールドの作成
AND条件に合致する場合にフラグを立てた計算フィールドを作成（今回は2つ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/851812f8-9b13-b527-1f7e-566647197def.png)


②計算フィールドをフィルターへ設定
フィルターに①で作成した2つの計算フィールドをORで追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/52082178-bea6-d568-e461-641f015c4317.png)

以上です。
この方法を使用することで実装自体は可能で、
クエリを見ても計算フィールドでフラグ立てした条件が反映されていることも確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/aa379a5b-4d0a-a77b-3080-9c9379b95876.png)

今回は例としてシンプルな条件にしていますが、
実際には条件数が多かったり複雑だったりという場合にはフラグ（計算フィールド）を作成するのに手間がかかったり、
クエリが複雑になってしまうことも考えられます。

## データセットパラメータの実装手順
大まかな流れは以下の通りです。

①データセットパラメータの作成
②データセットパラメータをカスタムSQLに組み込む
③データセットパラメータを分析で使用する

#### ①データセットパラメータの作成
データセットパラメータはデータセットの編集画面で設定することが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/fffe999e-fe30-08be-1d1a-b893198b85f2.png)

サイドメニューにある「パラメータ」から必要なパラメータを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/a747ab45-d3fb-1bf5-80ef-2fbfe98404ea.png)

今回は以下条件のクエリを作成したいのでパラメータは4つ作成しました。
(エリア=東京 and カテゴリー=コンピューター)　or
(エリア=大阪 and カテゴリー=モバイル)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/421f3723-3dde-da86-4dfe-a33211c684c8.png)

パラメータ作成にあたっての必要な入力情報は通常の分析のパラメータ作成時と同様ですが、
データセットパラメータではデフォルト値の設定が必須になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/2ee720f7-2cfd-17c7-5478-4d53b6fd8adf.png)

#### ②データセットパラメータをカスタムSQLに組み込む
①で作成したパラメータをカスタムSQLに組み込むには、
カスタムSQL編集画面で<<$パラメータ名>> の形式で記載します（下図黄色部分）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/854ee5a6-ca96-5178-f916-325522119555.png)

※パラメータ名の一部を入力すると候補を表示してくれます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/4046cd28-9ba0-d8e7-a8e2-70a6f4f809c2.png)

ここまででデータセットパラメータが機能するようにはなってますが、
データセットパラメータのパラメータ値を指定するために、
分析上でデータセットパラメータを使用する方法が次になります。

#### ③データセットパラメータを分析で使用する
データセットパラメータを設定したデータセットを使用して分析を作成します。
パラメータ設定メニューを見ると①で作成したデータセットパラメータがあることが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/91b51ace-5428-79c0-4a57-3bea3418daf8.png)

分析上でデータセットパラメータを使用するためには、
分析のパラメータを作成し、データセットパラメータと紐づける必要があります。

パラメータ作成画面でMapped Dataset Parametersを開き、ADD DATASET PARAMETERを選択すると作成済みのデータセットパラメータが表示されるので適切なものを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/195408c3-775e-9c79-16a6-c2835eaa4a9f.png)

作成したパラメータをコントロールに設定することで、パラメータ値を指定できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/541ab428-799c-1976-749e-bcb5c0b8ef42.png)


### 注意点

データセットパラメータを使用したコントロール上では、
選択できる値がデータセットパラメータ作成時にデフォルト値で設定した値のみになってしまいます。
（デフォルト値でデータセット自体が絞り込まれてしまうため）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/464be5f9-cc0c-c223-62da-7924ab062214.png)

※元々のデータセット上ではカテゴリーは5つある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/562e3c11-ebf5-a87c-e18b-1a97181fa021.png)

もしデフォルト値以外も指定したい場合は、
データセットパラメータを組み込んでいない通常のデータセットを追加して連携させる必要があります。
コントロールに入れたパラメータの設定で接続先のデータセットを通常のデータセットに指定することで、
デフォルト値以外の値も指定可能になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/edf4c872-a778-54b7-779e-75fc3c25a0b0.png)


## 検証内容①：検証結果
データセットパラメータを使用することで以下条件のフィルターが適用できました。
(エリア=東京 and カテゴリー=コンピューター)
or
(エリア=大阪 and カテゴリー=モバイル)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/4297516c-f965-5da3-5bce-d65253d9a12b.png)

発行されたクエリを見ると、パラメータ値が埋め込まれたカスタムSQLが発行されていることも確認できます。
また、最初に参考として紹介した計算フィールドでフラグ立てをする方法と比べてもシンプルなクエリになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/19f223ce-554f-3a73-6bf8-ca72e79d1e7c.png)

## 検証内容②：速度検証
検証内容①で作成した2つの分析において、
データセット(Redshift)に対してのクエリの平均処理時間を確認したところ、以下のようになりました。
※実行時間はSYS_QUERY_HISTORYから取得
`SELECT * FROM SYS_QUERY_HISTORY order by start_time desc`


（A）計算フィールドでのフラグ立て：1518.9(マイクロ秒)
（B）データセットパラメータを使用：1490.1(マイクロ秒)
※それぞれ10回計測した結果の平均時間です

僅かな差ではありますが、データセットパラメータを使用した場合のほうが短くなりました。

また、発行されるクエリは検証内容①でも記載しましたが比較のため再掲します。
（B）のほうがシンプルになっており、速度改善にも繋がっているのではと考えられます。

（A）自動発行されるクエリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/aa379a5b-4d0a-a77b-3080-9c9379b95876.png)

（B）カスタムクエリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737357/19f223ce-554f-3a73-6bf8-ca72e79d1e7c.png)


## さいごに
今回は主にデータセットパラメータの活用方法に着目した検証を行いました。
クエリに手を加えられるようになったことで、
今まではできなかったクエリチューニングや本検証のような特殊実装など、活用の幅は様々あるのではと思います。
また、この機能の使用想定として、
複雑なカスタムSQLが使われている別のBI ツールからクエリを移行するケースもあるようなので、
ぜひ実務で使えそうなケースがありましたら活用を検討してみてください。




#
株式会社ジールでは、初期費用が不要で運用・保守の手間もかからず、ノーコード・ローコードですぐに手元データを分析可能なオールインワン型データ活用プラットフォーム「ZEUSCloud」を提供しております。
ご興味がある方は是非下記のリンクをご覧ください：
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/