Databricks AI/BIダッシュボードのパラメーターとフィルター

最近色々と熱いAI/BIダッシュボードですが、こちらの記事に沿って操作していたところ、若干詰まるところがありました。

https://qiita.com/taka_yayoi/items/6c2d6efd3496de3dc4b5

ダッシュボードに表示されるデータを絞り込む機能には以下の2つがあります。

- [**パラメーター**](https://docs.databricks.com/ja/dashboards/parameters.html)
- [**フィルター**](https://docs.databricks.com/ja/dashboards/filter-types.html)

なぜ2つ？違いが何で、どのように使い分けるのかを理解するところから着手しました。

詳細は以下で説明しますが、概要をこちらにまとめます。

**パラメーター**

クエリーで `:パラメーター名` と記述することでパラメーター化することができます。

![Screenshot 2024-09-16 at 9.54.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6517345e-524e-e124-a1c4-d421fb9fbf30.png)

**データセットのフィルター**

データセットのフィールド(カラム)を指定することで、当該データセットを使用しているビジュアライゼーション全てに動作するフィルターを定義できます。

![Screenshot 2024-09-16 at 9.54.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/caf7a03f-c23d-90a9-f544-71af4e4e68ac.png)

**クエリーベースのパラメーター**

クエリーから動的にフィルターの値を生成し、選択した値をパラメータに反映できます。

![Screenshot 2024-09-16 at 9.55.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1312ebaf-4f74-d80b-d595-59365fb49c3a.png)

# パラメーターとは

AI/BIダッシュボードに表示するデータを取得する際には、背後でSQLが実行されます。静的なSQLの場合、データソースが変化しない限り常に同じデータを取得することになります。特定のデータのみを取得したいというニーズは当然ありますので、これに応えるために動的にSQLにパラメーターを埋め込んで、取得するデータを絞り込む機能がパラメーターです。

## パラメーターの作成方法

データを取得するSQLで`:<パラメーター名>`を記載すると、SQLの下にパラメーターボックスが作成されます。

![Screenshot 2024-09-11 at 17.10.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1d52446e-5d2f-29c0-bc67-c4c128cbad6b.png)

なお、この時点でパラメーターのボックスに値を指定すると、これが[静的なウィジェットパラメーター](https://docs.databricks.com/ja/dashboards/parameters.html#static-widget-parameters)に設定されます。

![Screenshot 2024-09-11 at 17.17.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/de25ccfb-245f-b22c-260b-6ca8d9e195cc.png)
![Screenshot 2024-09-11 at 17.17.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8830ed11-4d2b-6705-a9a8-ed82199b86fd.png)

この状態でビジュアライゼーションをクローンして、パラメーターを変更することもできます。
![Screenshot 2024-09-11 at 17.19.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a67f9272-af42-315f-cf8c-297f0189aaaa.png)

[こちら](https://qiita.com/taka_yayoi/items/6c2d6efd3496de3dc4b5#%E3%82%AF%E3%82%A8%E3%83%AA%E3%83%BC%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC)にも書いてある通り、SQLにプレースホルダーを設けることができるパラメーターは強力な機能ではありますが、このままですとパラメーターの値は毎回手動で入力しなくてはなりません。

> パラメーターは、データセットのSQLのどこでも導入することができるパワフルなツールであり、フィルターを定義する際に最大の柔軟性を提供します。パラメーターはSQLにおけるリテラルに対するプレースホルダーですが、それらは他のすべてのフィールドのように動作すべきであり、作成者が値を設定するためにドロップダウンや他に使用するフィルターに組み込めるようにすべきです。

後述のフィルターとパラメーターを組み合わせることで、容易にパラメーターを指定できる方法は[後ほど説明](#クエリベースのパラメーター)します。

# フィルターとは

一方でフィルターは、ダッシュボード上のウィジェットとして動作します。ですので、ダッシュボードの一部品としてインタラクティブに操作することができます。

ここで注意する必要があるのは、フィルターの設定の**フィールド**に何を設定するのかによって挙動が変わるということです。

- **データセットのカラムを指定:** 当該データセットを使用している全てのビジュアライゼーションにフィルターが適用されます。
- **クエリーのカラムを指定し、パラメーターにデータセットに指定されているパラメーターを指定:** 当該パラメーターを更新する[クエリーベースのパラメーター](https://docs.databricks.com/ja/dashboards/tutorials/query-based-params.html)として動作します。

## データセットに対するフィルター

**フィールド**にデータセットのフィールド(カラム)を指定します。これによって、当該データセットを用いているビジュアライゼーションにすべて適用されるフィルターとして動作します。

![Screenshot 2024-09-16 at 9.08.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/96465c36-948f-fcd2-d407-ee4e229a3539.png)

フィルターの値は指定されたカラムから自動で生成されます。
![Screenshot 2024-09-16 at 9.09.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c6f97485-0acd-4bb4-7b29-52c688c33bdb.png)
![Screenshot 2024-09-16 at 9.10.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ade90af9-12a9-06e6-9686-a9afbfa2ab88.png)

## クエリベースのパラメーター

[クエリーベースのパラメーター](https://qiita.com/taka_yayoi/items/6c2d6efd3496de3dc4b5#%E3%82%AF%E3%82%A8%E3%83%AA%E3%83%BC%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC)は、フィルターの値をクエリーで構築して、選択した値をパラメーターとして適用する機能です。

> パラメーターとフィールドの組み合わせを可能にすることで、他のデータセットの値を用いたパラメーターフィルターを作成する能力を追加しました。このクエリーベースのパラメーター値へのアプローチは、動的に変動する日付の粒度のような高度な分析能力を解放します。

はじめに、フィルターの値を構成するクエリーを作成します。ここでは、関東地方の都道府県からフィルターを構成するようにします。**データ**タブで**SQLから作成**をクリックし、以下のクエリーを記述します。

```sql:Prefecture List of Kanto Region Covid Cases
SELECT
  Prefecture
FROM
  users.takaaki_yayoi.covid_cases
WHERE
  Area = "関東地方"
```

そして、フィルターの値をパラメーターとして受け取るクエリーを記述します。

```sql:covid_cases_param
SELECT
  *
FROM
  users.takaaki_yayoi.covid_cases
WHERE
  Prefecture = :Prefecture
```

**キャンバス**に戻り、フィルターを追加します。ここで、以下の設定を行います。

- **フィールド:** はじめに定義したクエリー。ここでは、`Prefecture List of Kanto Region Covid Cases`。
- **パラメータ:** 二つ目に定義したクエリーのパラメーター`Prefecture`。

![Screenshot 2024-09-16 at 9.38.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/be8b1680-d4b1-dca5-b91a-10fafb871e6c.png)

これで、フィルターの選択肢は動的に生成され、選択した値がパラメーターとして動作するようになります。
![Screenshot 2024-09-16 at 9.39.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6175f2ea-55d5-4b8a-9305-929d922cb706.png)




### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)

# フィルターとパラメーターの組み合わせ: クエリーベースのパラメーター

# まとめ