1. はじめに
Databricks でダッシュボードを作成する中で、異なるデータセットに対して、1つのフィルターで絞り込みを行う方法として「パラメータ」を使う場面がありました。
調べながら実装した内容が備忘録として役立ちそうだったため、この記事にまとめています。
2. パラメータとは
Databricks のパラメータは、以下のような特徴を持つ便利な仕組みです。
- ダッシュボード利用者が値を入力できる変数
- SQLクエリ内で利用可能
- 同じクエリを複数ビジュアルで共有できるため、複数データセットの連動フィルタリングに使える
3.今回のゴール
今回は「糖質制限時の毎食メニュー」をテーマに、パラメータを利用した動的フィルターを実装します。
ゴールは次の2点です。
1. カテゴリ(大)の選択内容に応じて、カテゴリ(小)の候補を動的に絞り込むフィルターを作る
2. カテゴリ大 =【食事カテゴリ】(例:主食、野菜、魚料理など)
3. カテゴリ小 =【メニュー】(例:ライス、パン、キャベツなど)
→例えば、ユーザが「主食」を選択したら「パン」「ライス」など該当メニューのみを候補に表示する
4. フィルターで選択した値に応じて、異なるデータセットを参照する複数ビジュアルを同時に絞り込む
5. 今回の対象ビジュアル
①日毎の合計糖質量、②食事ごとの糖質量、③カテゴリごとの糖質量
4. 前提条件
可視化に使用するデータテーブルはすでに作成ずみとして説明からは省略させていただきます。
今回は次のようなテーブルを利用しています。
5. 作成手順
今回は下記の手順で作成します。
6. 食品カテゴリ(カテゴリ大)のフィルター
7. メニュー(カテゴリ小)のフィルター
8. 異なるデータセットを使うビジュアル側の設定
9. パラメータとフィルターの紐付け
5-1. 食品カテゴリフィルターの作成
- まずfood_menuテーブルからカテゴリ一覧を取得するクエリを作成します。
- フィルターの配置
ダッシュボード画面の「フィルタ(フィールド・パラメータ)の追加」からフィルタービジュアルを追加し、フィールドには先ほど作成した「食品カテゴリ」のデータセットのcategoryを指定します。
5-2. メニューフィルターの作成
- パラメータを利用したデータセットの作成
メニューは、ユーザが選択した食品カテゴリに応じて動的に変わる必要があるため、SQL内でパラメータを利用します。
「パラメータを追加」を押し、歯車アイコンで下記を設定します。
- 任意のパラメータの名称
- 型(String、Date、Date and Time、Numeric がサポートされています。)
今回はすべてstring型を指定します
歯車アイコンを閉じ、パラメータ名の下にあるテキストフィールドに下記の規定値を入力します。
- デフォルト値:すべて(食品カテゴリが未選択の場合はフィルターをかけないため)
- フィルターの配置
先ほどと同様にフィルタービジュアルを追加し、フィールドに「メニュー」データセットのitemを指定します。
メニューフィルターでは、複数選択ができるようにするため、フィルタの設定は「複数の値」にセットします。
カテゴリフィルターで選択された値を、このメニューフィルターへ反映するために、パラメータを紐づけます。
→先ほど作成した「食事カテゴリ」のフィルターにパラメータを設定します。
結果例:食事カテゴリを「主食」にした場合、メニューは「ライス」と「低糖質パン」のみに絞り込まれるようになりました。
現状は、食事カテゴリーで選択した値がメニューフィルターに適用されるのみで、他のビジュアルのデータは絞り込まれていない状態です。
各ビジュアルに使用するデータセットでのパラメータの設定とフィルターの紐付けを同様に行なっていきます。
5-3. 異なるデータセットのデータビジュアルを作成
(a)日付ごとの糖質合計量のデータセット(①テーブル)
食品カテゴリ・メニューの両方で絞り込みたいため、今回はcategoryとitemの2種類のパラメータを設定します。
- categoryのパラメータはメニューフィルターで作成したものと同様に記述します。
- メニューは複数選択ができるようにするため、itemのパラメータ設定時に歯車アイコンにある「複数選択可能です」にチェックを入れます。
クエリ内では、ARRAY_CONTAINS関数を含める必要があります。
array_contains(:item, 'すべて')とすることで、メニューフィルターでメニューの選択をしていないときは「すべて」という選択を行なっている状態にしてデータをフィルターしない設定になります。
(a) と同様、category と item のパラメータを設定したデータセットを用意します。
作成したデータセットを利用して、必要なビジュアルを配置します。
5-4. フィルターとパラメータの紐付け
- 食事カテゴリフィルター → 各ビジュアルのcategoryパラメータへ紐づけ
結果例:食事カテゴリで「野菜」を選択すると「野菜」関連のデータにビジュアルが絞り込まれる
- メニューフィルター → 各ビジュアルのitemパラメータへ紐づけ
結果例:メニューで「キャベツ・トマト・ハッシュドポテト」を選択するとさらにビジュアルが絞り込まれる
6. まとめ
Databricksのダッシュボードは機能がシンプルで、前段のSQlで柔軟にデータ加工ができる点が非常に使いやすいと感じました。
パラメータを使えば、異なるデータセットに対して1つのフィルターで連動した絞り込みができ、実用的なダッシュボードが構築できます。
同じような実装を検討されている方の参考になれば幸いです。