QuickSightのコントロールで「すべて」が選ばれた場合の表示制御

# はじめに
QuickSightでは、コントロールとフィルタを組み合わせることで、ビジュアルに表示するデータの絞り込みを行うことができます。  
その際、「すべて」が選ばれている場合は、当然絞り込みは行われず全てのデータが表示されるのが通常の挙動です。
今回は、
- 特定の要素が選ばれた場合は、その要素についての詳細データを表示する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658635/59a0e82f-f07e-345b-2e76-b845744e8294.png)
- 「すべて」が選ばれている場合は全体のサマリーデータを表示する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658635/d0093bee-aa23-9768-58b7-011184a4e913.png)


といった少し特殊なビジュアルを作成したので、方法を共有したいと思います。

# 結論
先に結論というか、要点だけ記述しておきます。
- コントロールで「すべて」が選ばれた場合に表示したいデータを区別する、フラグ用のカラムを用意します
- 計算フィールドを使います
- コントロールで「すべて」が選ばれている場合は、対応するパラメータがNull扱いされます

# 前提
CSVをイメージした以下のサンプルデータを元に、やりかたを再現していきます。
コントロールでとある県が選ばれた時は属する市のデータを、「すべて」が選ばれた場合は県全体のデータだけを表示するようにしていきましょう。

まとめの列が、今回のやり方における１つ目のポイントとなります。
まとめが「１」のデータが、「すべて」が選ばれているときに表示したいデータとなります。

| 都道府県  |  市  | 人口(人） | まとめ |
| ---- | ---- | ---- | ---- |
|  X県  |  A市  | 10000 | 0 |
|  X県  |  B市  | 20000 | 0 |
|  X県  |  C市  | 30000 | 0 |
|  X県  |  全体  | 60000 | 1 |
|  Y県  |  D市  | 20000 | 0 |
|  Y県  |  E市  | 50000 | 0 |
|  Y県  |  全体  | 70000 | 1 |

# 手順
## データの読み込み
CSVファイルをQuickSightで扱えるように、Spiceとして取り込むなりATHENAでクエリをかけるなりします。
この部分のやり方は、公式や他の方の記事にお任せします。

## ビジュアルの作成
今回はテーブルを使っていこうと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658635/e452dc68-33fb-3a3f-ce78-6fddfbe9c509.png)


## パラメータの作成
次にパラメータを作成していきます。
左側のメニューの「パラメータ」 ->　「作成」の順にクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658635/4f94455e-6d6a-de5d-5f20-0a3b86f0b2b9.png)

デフォルト値がないと後の計算フィールドで使えないため、「静的デフォルト値=X県」としておきます。
（デフォルトを「すべて」としたい場合は、計算フィールドを作った後に静的デフォルト値を空にすると良いです）

また、高度な設定で予約値をNullにしておきます。
（本来はここで設定した値が「すべて」を選択したときのパラメータの値になる気がするのですが、今の所そうはならないようです。なので推奨値にしておいても動くのですが、念の為）

## コントロールの作成
コントロールは、今回はドロップダウンにします。
パラメータの「vマーク」 -> 「コントロールの追加」の順にクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658635/b86de6aa-3b7c-6b46-4824-e6aa15f809b5.png)

## 都道府県フィルタの作成
フィルタを作成して、コントロールで選んだ値に応じて表示の絞り込みが出来るようにします。
左側のメニューの「フィルター」 -> 「フィールドの追加」 ->　「都道府県」の順にクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658635/4b8d8cb3-8a46-2c36-b742-2bcfdf87f764.png)

この時点では、X県を選ぶと全体のデータも表示されてしまいます。

## 計算フィールドの作成
ここで２つ目・３つ目のポイントが登場します。
まずは、左上の追加から、計算フィールドを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658635/cb285874-5f78-e2c8-b8c1-0c36e1965442.png)

名称はなんでも構いませんが、役割は表示制御なのでここではそのまま「表示制御」としておきます。
計算式は画像のようにifelseとisNullを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658635/cebe292e-bc04-94be-8f1b-0019e99ac6b1.png)


### 式の説明
まず前提としてコントロールで「すべて」が選ばれた場合、対応するパラメータがNullとして扱われます。
なので
コントロールが「すべて」の場合、Prefectures = Null
コントロールが「X県」の場合、Prefectures　= X県
と扱われるわけです。
つまり式の意味は、
コントロールが「すべて」の場合、まとめが「１」となっているデータを「１」、まとめが「0」となっているデータを「0」になる。
コントロールが「すべて」以外の場合、まとめが「1」となっているデータを「0」、まとめが「0」となっているデータを「1」になる。
ということになります。

## フィルタ
最後に、作成した「表示制御」を用いてビジュアルにフィルタを設定します。
「表示制御」＝１　のデータだけを表示されるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658635/bb9ef36d-4601-ed15-c26f-5dbaee05d79c.png)

先程まではX県全体のデータがありましたが、表示されなくなりましたね。
これで全ての作業が完了です。

# 結果
用意したコントロールで、「すべて」を選んでみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658635/ca74bf52-635b-b270-8d83-91608abc69fc.png)
狙い通り都道府県の全体のデータのみが表示されるようになりました。

# おわりに
今回はQuickSightのコントロールで「すべて」が選ばれた場合の表示制御のやり方を共有しました。
もし同じようなことをしたくなった時の参考になれば幸いです。