【AWS QuickSight】新機能「ネストされたフィルター」の検証

## はじめに
はじめまして。ジールの@ken_miyashitaです。
2024年8月AWS QuickSightに新機能「**ネストされたフィルター**」が追加されました。

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/add-a-nested-filter-data-prep.html

本記事では、ネストされたフィルターの基本的な説明から設定方法、実際のビジネスシーンでの活用例などを紹介していきます。

## Amazon QuickSightとは
QuickSightについて簡単に説明したいと思います。下記がQuickSightの主な特徴です。

■特徴
①AWSの各種サービスや外部のSQLデータベース、Excelファイルなど、さまざまなデータソースに接続可能
②豊富なビジュアルの中から直感的な操作で可視化が可能
③SPICEと呼ばれる独自のインメモリエンジンで高速なデータ処理ができ、複雑なクエリも迅速に実行可能

## ネストされたフィルターとは
検証前に「ネストされたフィルター」について公式リファレンスから抜粋して確認してみます。

>ネストされたフィルターは、同じデータセット内の別のフィールドで定義されたデータのサブセットを使用してフィールドをフィルタリングします。

>ネストされたフィルターは相関サブクエリSQLやマーケットバスケット分析と同様に機能します。

ふむふむ。**別の項目（フィールド）を使ってデータを絞り込む機能**ということですね。
SQLでは相関サブクエリの挙動と同様とのことですので、簡単に確認してみます。

```sql:相関サブクエリ
SELECT 
    prefecture_name,  -- 都道府県名
    region,  -- 地域（地方）
    population  -- 人口
FROM 
    prefectures p1
WHERE 
    population = (
        SELECT 
            MAX(population)  -- 同じ地域内での最大人口を取得
        FROM 
            prefectures p2
        WHERE 
            p1.region = p2.region   -- 外側のクエリと同じ地域のデータでフィルタ
    );
```

上記SQLでは各地域ごとに最大人口の都道府県をフィルタしています。
ネストされたフィルターの追加により、QuickSightでもサブセット条件によって柔軟にデータを絞り込むことが可能になりました。


## 設定手順
「ネストされたフィルター」の設定手順を確認していきます。
テストデータを用いて「地方」に対して「都道府県」でネストフィルター設定をしていきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/b7c2c099-742c-b88f-b994-3281d64b8e4a.png)




QuickSightのフィルター画面より「フィルタータイプ」を開き、
ドロップダウンから「**ネストされたフィルター**」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/31a5755a-2505-5116-9b0a-2cae054f279f.png)


必要な条件を「**含む**」か「**除く**」かを選択します。
※デフォルトでは「含む」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/31c7879c-bb67-468c-82d4-a48af786ff24.png)


「ネストされたフィールド」を選択します。
※ネストされたフィールドは**テキストフィールド**のみ指定可能であるため、ここでは都道府県を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/f02d4db1-7991-04ee-69ba-ac90cdde97f3.png)


「ネストされたフィルタータイプ」を以下の項目から選択します。

* フィルターリスト
* カスタムフィルターリスト
* カスタムフィルター

※ここでは最も柔軟性が高い「カスタムフィルター」を選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/1d1045bf-5dd0-6300-f4ea-e1572919398b.png)


これで設定は完了です。
この設定により、「都道府県」に含まれる値を持つ「地方」が表示されるようになりました。
パラメータを使用する場合は、コントロールに追加することでさらに柔軟な使い方ができますね。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/de2c503a-084c-e50d-e374-6df6a9a77aa1.png)


せっかくなので「ネストされたフィルタータイプ」それぞれの挙動も確認していきましょう。

## ネストされたフィルタータイプ

### ①フィルターリスト
テキストフィールドの全ての値から選択して、含めるか除外する値を指定します。
以下のようにリストから値を選択し設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878530/4b775e28-3cc0-2898-67bd-fc89de9747cd.png)

フィルターリストは、特定の値の追加・削除が簡単に行えるのが良いですね。

### ②カスタムフィルターリスト
手動で入力したテキストフィールド値に対して、フィルタリング条件（含める・除外する）を指定します。
以下のように値を一覧に入力することで設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/6012efae-53ff-d404-2c41-c4c08d0b7c03.png)

カスタムフィルターリストはリストに手動で入力する必要がありますが、
対象値が多い場合やフィルタリングに使用する値が事前に決まっている場合に便利ですね。

### ③カスタムフィルター
特定の条件（等しい・含むなど）に基づいてフィルタリングします。
また値にパラメータを使用することもできます。
以下のようにフィルター条件やパラメータを設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878530/d093cbd0-f087-bf27-effc-364ef6cf7d6b.png)

カスタムフィルターは細かい条件でフィルタリングが可能なため、柔軟な設定ができます。

## 条件「含む」「除く」の検証
次に必要条件の「含む」と「除く」について、同様に地方と都道府県のサンプルデータを使い検証を行っていきます。

### 【検証方法】
今回は以下のような地方と都道府県のテーブルの挙動を検証しました。
※使用しているデータはテスト用のサンプルデータです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878530/2d93cc39-d89d-3993-ba6d-aded93876911.png)








地方のフィルター設定では「必要な条件」として「含む」「除く」の条件を設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878530/5074e201-e9f9-f7da-7590-1c4ec6193695.png)

その他の設定は下記で検証を行います。
　・フィルタータイプ：「カスタムフィルター」
　・パラメータ：「千葉県」
　・ネストされたフィルター条件：「次と等しい」or「次と等しくない」


### 【検証】
**①「必要な条件」を「含む」に設定した場合**

　・ネストされたフィルター条件：「次と等しい」

→テーブルに関東地方の都道府県全てが表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878530/8197c89c-07ae-56ab-a2cd-ebe68ffdecdc.png)


次に、以下の条件に変更し表示を見ます。
　・ネストされたフィルター条件：「次と等しくない」
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878530/43cd2725-a764-999b-c69c-cb312b4daa8a.png)


→テーブルに全ての地方、都道府県が表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878530/18150f90-1ff0-637f-5613-cb68f40d27fc.png)

**②「必要な条件」を「除く」に設定した場合**

次に、以下の条件で表示を見ます。
　・ネストされたフィルター条件：「次と等しい」
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878530/26122066-4055-7cf2-67d9-f15a65bd3024.png)

→テーブルに関東地方の都道府県を除いた地方と都道府県が表示されました。

次に、以下の条件に変更し表示を見ます。
　・ネストされたフィルター条件：「次と等しくない」
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878530/0ebb978a-4372-8f07-aef9-0bca92ae9191.png)

→データなしと表示されました。

以上の検証結果を下記の表にまとめます。

|  | 次と等しい | 次と等しくない |
|:-----:|:------------:|:------------:|
| 含む     |関東地方のみ表示（フィルタ値に該当する地方に含まれる都道府県）|全ての地方と都道府県が表示|
| 除く       |関東地方を除いた地方と都道府県が表示（フィルタ値に該当する地方に含まれない都道府県）|データなし|


## カスケードフィルタとの違い
Amazon QuickSightには`「カスケードフィルタ」`という機能があります。
カスケードフィルタとは、**上位フィルタの選択に応じて下位フィルタの選択肢が限定される機能**のことです。
ビジュアル間で連携させることで、より便利な視覚化が可能です。

ネストされたフィルターと比べて何が違うのかを確認していきます。

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/use-a-cascading-filter.html

###  ①カスケードフィルタの使用例
まずは簡単にテストデータを用意します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/bffe0fcb-e67f-58f5-74c3-6b6c8ae09de4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/6b39df3e-dcb2-d1b4-59c4-7d7257442f8c.png)


ビジュアル間でカスケードフィルタを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/7837beb3-ad28-d3a3-6977-1cdeeeb4ed6f.png)

これで準備完了です。挙動を確認してみましょう。
関東地方で、店舗数が多い都道府県の面積を知りたいというケースを想定します。

地方から「**関東**」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/07f3c3b0-a114-7eb9-0dce-e17dcb23221a.png)


するとカスケードフィルタの対象に設定していたビジュアルが「関東」でフィルタリングされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/165d22d9-d7b4-5bd0-41b2-a2f81be6d08c.png)



このようにカスケードフィルタは上位フィルタから段階的に絞り込むので、
階層構造になっているデータから探すときに便利ですね。

###  ②カスケードフィルタとネストフィルタの違い
カスケードフィルタの挙動を確認したところで、ネストフィルタとの違いを表にまとめます。
| 比較項目 | カスケードフィルタ | ネストフィルタ |
|:-----------:|:------------:|:------------:|
| 挙動       | 上位フィルタを選ぶと下位フィルタが制限される        | 特定の条件に基づいて、独立した複数のフィールドを同時に絞り込む         |
| 使用感     | シンプルで直感的      | やや高度な操作が必要       |
| 強み       | 階層構造があるデータの絞り込みに最適        | 複数条件を使った柔軟なデータ分析が可能   |
| ユースケース         | 東京23区それぞれの店舗数を階層ごとに知りたい          | 東京23区かつ面積が●●以上の店舗数を知りたい           |

大きな違いとしては、フィルターの依存関係が異なる点でした。
カスケードフィルターは階層構造のフィルターであり、
ネストされたフィルターは同時に複数条件でフィルターするというイメージです。



## ビジネス利用シーン応用方法検討​
ネストされたフィルターの実際のビジネスシーンでの活用例を挙げてみます。

### マーケットバスケット分析
ネストされたフィルターを使用することで、「特定の商品と同時に購入されやすい商品のデータ分析」（＝マーケットバスケット分析）がQuickSight上で容易に行えるようになりました。
今回は例として<font color="Red">「トマト」と同時に購入されやすい商品</font>を確認していきます。


まずはテストデータを用意します。
![スクリーンショット_4-10-2024_11589_ap-northeast-1.quicksight.aws.amazon.com.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3871183/23119335-6468-d02d-dcea-9db29b4f0e01.jpeg)

次にフィルターの設定です。
商品のチェックボックスから「**トマト**」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/5da8be7b-b7ad-f72d-1b05-f1b141f98c57.png)


こちらで実行すると以下の結果が得られました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878499/3036c015-a4ff-3848-cf72-94699b5e3f87.png)


![スクリーンショット 2024-10-04 131907.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3871183/966e5a08-f8ba-20e6-6b04-f9293f70fd85.png)

無事「トマト」と同時に購入されやすい商品を表示できました。
商品購入量のビジュアルを作成しておくと、同時購入商品が一目で確認できますね。

このようにネストされたフィルターを使用すると、特定の商品に関連する購入パターンを深く掘り下げることができます。ユーザーの条件に基づいた条件でトレンドを確認できるため、ビジネス戦略の精度向上に役立つと考えられます。


# おわりに
今回はAmazon QuickSightに追加された新機能「ネストされたフィルター」の検証を行いました。
少しややこしい仕組みですが、使用するフィールドを選ばないためフィルタリングの幅が広がったのは間違いないかと思います。
Amazon QuickSightを使用されている方は是非試してみて下さい。

# 参考文献
https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/add-a-nested-filter-data-prep.html

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/add-a-text-filter-data-prep.html#add-text-filter-custom-list-data-prep

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/use-a-cascading-filter.html


- - -
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください：

https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area