
DatabricksのMetric Viewを定義してAI/BI Dashboardから参照してみた
さがらです。
DatabricksのUnity Catalogには、Metric Viewという機能があります。ビジネスメトリクスをカタログ上で一元定義し、ダッシュボードやGenie Spacesなど複数のツールから再利用できるオブジェクトです。
先日公開したAI/BI Dashboardを試してみた記事の中で、データセット追加時に「Metric viewsも選択できる」という項目を確認していました。今回はこのMetric Viewを実際に定義し、同じsamples.bakehouseデータを使ってAI/BI Dashboardから参照するところまで試してみたので、手順と確認結果をまとめます。
機能概要
Metric Viewは、Unity Catalog上でビジネスメトリクス(売上合計・注文件数など)と分析軸(ディメンション)を一元定義するオブジェクトです。
通常のビューは作成時に集約とディメンションの組み合わせを固定する必要があります。一方Metric Viewはディメンションとメジャーを分離して定義し、クエリ時にどのディメンションでグループ化するかを自由に選択できます。例えば「総売上」というメジャーを一度定義すれば、「商品別」「国別」「月別」と用途に応じて集計軸を変えて参照できます。
定義したMetric ViewはAI/BI Dashboard・Genie Spacesなど複数のDatabricksツールのデータソースとして利用できるため、ダッシュボードごとに個別の集計SQLを書く必要がなくなります。
YAML定義の詳細な構文は以下の公式リファレンスが参考になります。
制限事項
- SQLクエリでMetric Viewを参照する場合、メジャー列は
MEASURE()関数でラップする必要があります(SELECT *は使用不可) - AI/BI Dashboardでデータソースとして直接選択した場合、クエリを修正して列の絞り込みやフィルタを追加することはできません
前提条件
- Databricks: Free Edition(AWS)
- こちらのブログでセットアップした環境を使用
- 使用データ:
samples.bakehouse(Databricks標準搭載のサンプルデータセット) - 保存先のカタログ:
sagara_catalogというカタログを作成しておき、このカタログにMetric viewを保存していく
事前準備
使用するテーブルの確認
今回Metric Viewのソースとして使用するのは、sales_transactionsとsales_franchisesの2テーブルです。
| テーブル名 | 使用するカラム |
|---|---|
samples.bakehouse.sales_transactions |
product(商品名)、paymentMethod(支払方法)、totalPrice(金額)、quantity(数量)、dateTime(日時)、franchiseID(フランチャイズID) |
samples.bakehouse.sales_franchises |
franchiseID(フランチャイズID)、country(国)、size(規模) |
前回のブログでは、この2テーブルをSQLでJOINするデータセットをダッシュボードごとに定義していました。今回はJOINとメジャー定義をMetric View側に集約します。
(以下、参考までに前回ブログで書いていたmonthly_country_salesのSQL)
SELECT
DATE_TRUNC('month', t.dateTime) AS month,
f.country,
f.size AS franchise_size,
SUM(t.totalPrice) AS monthly_sales,
COUNT(*) AS transaction_count
FROM samples.bakehouse.sales_transactions t
JOIN samples.bakehouse.sales_franchises f
ON t.franchiseID = f.franchiseID
GROUP BY DATE_TRUNC('month', t.dateTime), f.country, f.size
ORDER BY month
試してみた
1. Catalog ExplorerからMetric Viewを作成
DatabricksワークスペースのサイドバーでCatalogアイコンをクリックし、検索バーにsales_transactionsと入力します。samples.bakehouse.sales_transactionsを選択してテーブル詳細画面を開きます。
その後、テーブル詳細画面上部のCreate → Metric viewを選択します。

名前・カタログ・スキーマを指定するダイアログが表示されます。以下のように設定してCreateをクリックします。
- Name:
sales_transactions_metric_view※デフォルトで入力されていた名称 - Catalog: 任意のカタログ
- Schema: 任意のスキーマ

2. Metric ViewのYAML定義
Metric Viewのエディタは、デフォルトでGUI(低コードUI)が表示されます。今回はYAMLで定義したいのでYAMLタブをクリックして切り替えます。

既存のYAMLの内容を消去し、以下の内容を入力します。sales_transactionsをソースとし、sales_franchisesをJOINして、ディメンションとメジャーを定義しています。
version: 1.1
source: SELECT * FROM samples.bakehouse.sales_transactions
joins:
- name: franchise
source: samples.bakehouse.sales_franchises
'on': source.franchiseID = franchise.franchiseID
dimensions:
- name: product
expr: source.product
display_name: 商品名
- name: payment_method
expr: source.paymentMethod
display_name: 支払方法
- name: country
expr: franchise.country
display_name: 国
- name: franchise_size
expr: franchise.size
display_name: フランチャイズ規模
- name: order_month
expr: DATE_TRUNC('month', source.dateTime)
display_name: 売上月
measures:
- name: total_revenue
expr: SUM(source.totalPrice)
display_name: 総売上
- name: order_count
expr: COUNT(1)
display_name: 注文件数
- name: avg_order_value
expr: AVG(source.totalPrice)
display_name: 平均注文金額
YAMLの各要素のポイントは以下の通りです。
version: 1.1:display_nameなどのセマンティックメタデータを使用するためのバージョン指定ですsource: ベーステーブルをSELECT文で指定します。以降の定義でsourceエイリアスで参照できますjoins: JOINするテーブルを定義します。on句でJOIN条件を記述し、nameフィールドのエイリアスで参照しますdimensions:GROUP BY・WHERE句で使う列を定義します。JOINしたテーブルのカラムもfranchise.countryのように参照できますmeasures:SUM・COUNT・AVGなどの集計式を定義します
YAML入力後、Saveをクリックして保存します。バリデーションエラーが出ずに保存されればOKです。


3. AI/BI DashboardでMetric Viewをデータセットとして追加
新しいDashboardを作成します。

ダッシュボードとページの名前を適当に変更した上で、Dataタブを押し、Add datasetをクリックします。

先ほど作成したMetric Viewを選択し、Addを押します。

4. ビジュアライゼーションで確認
データセットを追加したら、キャンバスのタブに切り替えてビジュアライゼーションを作成します。
キャンバス下部のAdd a visualizationをクリックし、右ペインでデータセットにsales_transactions_metric_viewを選択します。 ※現時点ではフィールドの選択ではdisplay_nameに書いた日本語名が表示されないため、ご注意ください。
- Dataset:
sales_transactions_metric_view - Visualization:
Bar - X axis:
product - Y axis:
total_revenue※選択するとMEASURE(total_revenue)と表示されます。
グラフの軸名は、Metric Viewで定義した日本語のdisplay_nameが表示されていることがわかります。

最後に
DatabricksのMetric Viewを定義し、AI/BI Dashboardからデータセットとして参照できることを確認しました。
Metric Viewの便利な点は、JOINと集計ロジックをカタログ側に一元化できることです。前回のブログではmonthly_country_sales・payment_country_summaryなどのデータセット用にそれぞれSQLを書いていましたが、Metric ViewにJOIN定義とメジャーを持たせることで、ダッシュボード側のSQLをシンプルにでき、ロジックの再利用も容易に可能となります。
複数のダッシュボードやGenie Spacesから同じメトリクスを参照するケースでは、Metric Viewによる一元管理を試してみてください。











