この記事で伝えたいこと
- メトリクスビューは「ビューの濫造」と「SQLスキルの壁」を同時に解決する
- 指標を一度定義すれば、Genie・ダッシュボード・Excelから誰でも使える
- 「作る人」と「使う人」の役割分担で、データ民主化を実現する
メトリクスビューが解決する2つの問題
問題1: ビューの濫造
同じ指標を異なる切り口で見たいだけなのに、ビューがどんどん増えていく:
views/
├── monthly_sales.sql -- 月別売上
├── regional_sales.sql -- 地域別売上
├── monthly_regional_sales.sql -- 月×地域別売上
├── category_sales.sql -- カテゴリ別売上
├── monthly_category_sales.sql -- 月×カテゴリ別売上
├── customer_sales.sql -- 顧客別売上
├── ... -- まだまだ増える
しかも各ビューに同じ計算ロジック(SUM(amount) - SUM(refund))が重複して書かれている。修正が必要になったら全ビューを更新...
問題2: SQLを書けない人が使えない
せっかくビューを作っても、使う側にSQLの知識が必要:
-- これが書けないと使えない
SELECT region, SUM(amount) - SUM(refund) AS sales
FROM sales_data
GROUP BY region
ORDER BY sales DESC;
メトリクスビューの解決策
ビューの濫造を防ぐ
views/
└── sales_metrics.sql -- これ1つで全部カバー
1つのメトリクスビュー = 複数の指標 + 複数の切り口
CREATE VIEW sales_metrics WITH METRICS LANGUAGE YAML AS $$
version: 1.1
source: my_catalog.my_schema.sales_data
dimensions:
- name: month
expr: DATE_TRUNC('MONTH', order_date)
- name: region
expr: region_name
- name: category
expr: product_category
- name: customer
expr: customer_name
measures:
- name: total_sales
expr: SUM(amount) - SUM(refund)
- name: order_count
expr: COUNT(*)
- name: customer_count
expr: COUNT(DISTINCT customer_id)
$$;
SQLを書ける人は、同じメトリクスビューに対して切り口を変えるだけ:
-- 月別
SELECT month, MEASURE(total_sales) FROM sales_metrics GROUP BY month;
-- 地域別
SELECT region, MEASURE(total_sales) FROM sales_metrics GROUP BY region;
-- 月×地域×カテゴリ
SELECT month, region, category, MEASURE(total_sales), MEASURE(order_count)
FROM sales_metrics
GROUP BY month, region, category;
SQLを書けない人も使える
メトリクスビューの真価はSQLを書かなくても使えること:
| 利用方法 | SQLの知識 | 説明 |
|---|---|---|
| Genieスペース | 不要 | 自然言語で質問 |
| AI/BIダッシュボード | 不要 | ドラッグ&ドロップで可視化 |
| Excel連携 | 不要 | ピボットテーブル感覚 |
| SQLエディタ | 必要 | 柔軟なアドホック分析 |
役割分担:作る人と使う人
作る人(データエンジニア / アナリティクスエンジニア)
- 指標の計算ロジックを定義
- ビジネス部門と「売上とは何か」を合意
- メトリクスビューを作成・メンテナンス
- 必要スキル: SQL, YAML, データモデリング
↓ メトリクスビューを公開
使う人(ビジネスユーザー / 経営層 / 営業 / マーケ)
- Genieに日本語で質問するだけ
- ダッシュボードでグラフを見るだけ
- Excelでピボットするだけ
- 必要スキル: 特になし(ツールの基本操作のみ)
具体例:Genieスペースでの利用
ステップ1: メトリクスビューを作成(データエンジニアの仕事)
CREATE VIEW my_catalog.my_schema.sales_metrics
WITH METRICS LANGUAGE YAML AS $$
version: 1.1
source: my_catalog.my_schema.sales_data
comment: "Sales analysis metrics"
dimensions:
- name: order_date
expr: order_date
comment: "Order date"
synonyms:
- "注文日"
- "販売日"
- name: order_month
expr: DATE_TRUNC('MONTH', order_date)
comment: "Order month"
synonyms:
- "注文月"
- "販売月"
- name: region
expr: region_name
comment: "Sales region"
synonyms:
- "地域"
- "エリア"
- name: product_category
expr: product_category
comment: "Product category"
synonyms:
- "カテゴリ"
- "商品種別"
measures:
- name: total_sales
expr: SUM(amount) - SUM(refund)
comment: "Net sales after refunds"
synonyms:
- "売上"
- "売上高"
- name: order_count
expr: COUNT(*)
comment: "Total number of orders"
synonyms:
- "注文件数"
- "オーダー数"
- name: avg_order_value
expr: (SUM(amount) - SUM(refund)) / COUNT(*)
comment: "Average order value"
synonyms:
- "平均単価"
- "客単価"
- name: customer_count
expr: COUNT(DISTINCT customer_id)
comment: "Unique customer count"
synonyms:
- "顧客数"
- "ユーザー数"
$$;
ステップ2: Genieスペースを作成
- Databricksワークスペースで Genie を開く
- New Genie space をクリック
- 作成したメトリクスビュー(
sales_metrics)をデータソースとして追加 - ビジネスユーザーにアクセス権を付与
ステップ3: ビジネスユーザーが自然言語で質問
ユーザー: 「今月の地域別売上を教えて」
Genie: 東京: 5,200万円
大阪: 3,100万円
名古屋: 1,800万円
...
ユーザー: 「先月と比較して」
Genie: 東京: 5,200万円(前月比 +8%)
大阪: 3,100万円(前月比 -2%)
...
ユーザー: 「売上が伸びているカテゴリは?」
Genie: 家電: +15%
アパレル: +12%
...
ポイント: ユーザーは「売上」が何を指すか知らなくても、正しい数字が返ってくる
具体例:AI/BIダッシュボードでの利用
ステップ1: ダッシュボードを作成
- ダッシュボードを開く(「ダッシュボードを作成」をクリック)
- データタブをクリック → データソースを追加するをクリック
- カタログとスキーマを選択し、メトリクスビューを選択
ステップ2: グラフの設定
メトリクスビューを使うと、以下が選択肢として表示される:
ディメンション(X軸やフィルター)
- order_date
- order_month
- region
- product_category
メジャー(Y軸や値)
- total_sales
- order_count
- avg_order_value
- customer_count
SQLを書かずに、クリックだけでグラフが作れる。
ビフォー・アフター比較
ビュー管理
| 項目 | 従来 | メトリクスビュー |
|---|---|---|
| ビューの数 | 切り口の組み合わせ分だけ増殖 | 1つで済む |
| 計算ロジック | 各ビューに重複 | 1箇所に集約 |
| 修正作業 | 全ビューを手動更新 | 1箇所変えれば完了 |
| どれが正しいか | 迷う・聞く | 迷わない |
利用者の体験
| 項目 | 従来 | メトリクスビュー |
|---|---|---|
| SQLの知識 | 必須 | 不要(Genie等を使う場合) |
| 正しい指標の把握 | ドキュメントを探す | 定義がメトリクスビューに内包 |
| 新しい切り口での分析 | 依頼→開発→待機 | 自分でGenieに聞くだけ |
サンプルデータで試してみる
1. サンプルテーブルの作成
-- サンプルデータ用のテーブルを作成
CREATE OR REPLACE TABLE takaakiyayoi_catalog.metrics_view.sales_data AS
SELECT * FROM VALUES
('2024-01-15', '東京', '家電', 'C001', 50000, 0),
('2024-01-16', '大阪', 'アパレル', 'C002', 30000, 5000),
('2024-01-17', '東京', '食品', 'C003', 20000, 0),
('2024-01-18', '名古屋', '家電', 'C001', 80000, 0),
('2024-01-20', '東京', 'アパレル', 'C004', 45000, 0),
('2024-02-01', '大阪', '家電', 'C002', 60000, 10000),
('2024-02-05', '東京', '食品', 'C005', 15000, 0),
('2024-02-10', '名古屋', 'アパレル', 'C003', 35000, 0),
('2024-02-15', '東京', '家電', 'C001', 90000, 5000),
('2024-02-20', '大阪', '食品', 'C006', 25000, 0)
AS t(order_date, region_name, product_category, customer_id, amount, refund);
2. メトリクスビューの作成
CREATE OR REPLACE VIEW takaakiyayoi_catalog.metrics_view.sales_metrics
WITH METRICS LANGUAGE YAML AS $$
version: 1.1
source: takaakiyayoi_catalog.metrics_view.sales_data
comment: "売上分析用の指標定義"
dimensions:
- name: order_date
expr: order_date
comment: "注文日"
- name: order_month
expr: DATE_TRUNC('MONTH', order_date)
comment: "注文月"
- name: region
expr: region_name
comment: "販売地域"
- name: product_category
expr: product_category
comment: "商品の分類"
measures:
- name: total_sales
expr: SUM(amount) - SUM(refund)
comment: "返品控除後の純売上"
- name: order_count
expr: COUNT(*)
comment: "注文の総数"
- name: avg_order_value
expr: (SUM(amount) - SUM(refund)) / COUNT(*)
comment: "1注文あたりの平均金額"
- name: customer_count
expr: COUNT(DISTINCT customer_id)
comment: "ユニーク顧客数"
$$;
3. クエリで確認
-- 月別の売上と注文件数
SELECT
order_month,
MEASURE(total_sales) AS total_sales,
MEASURE(order_count) AS order_count
FROM takaakiyayoi_catalog.metrics_view.sales_metrics
GROUP BY order_month
ORDER BY order_month;
| order_month | total_sales | order_count |
|---|---|---|
| 2024-01-01T00:00:00.000+00:00 | 220000 | 5 |
| 2024-02-01T00:00:00.000+00:00 | 210000 | 5 |
-- 地域別の売上と顧客数
SELECT
region,
MEASURE(total_sales) AS total_sales,
MEASURE(customer_count) AS customer_count
FROM takaakiyayoi_catalog.metrics_view.sales_metrics
GROUP BY region
ORDER BY total_sales DESC;
| region | total_sales | customer_count |
|---|---|---|
| 東京 | 215000 | 4 |
| 名古屋 | 115000 | 2 |
| 大阪 | 100000 | 2 |
-- 月×地域×カテゴリの売上
SELECT
order_month,
region,
product_category,
MEASURE(total_sales) AS total_sales
FROM takaakiyayoi_catalog.metrics_view.sales_metrics
GROUP BY order_month, region, product_category
ORDER BY order_month, region, product_category;
| order_month | region | product_category | total_sales |
|---|---|---|---|
| 2024-01-01T00:00:00.000+00:00 | 名古屋 | 家電 | 80000 |
| 2024-01-01T00:00:00.000+00:00 | 大阪 | アパレル | 25000 |
| 2024-01-01T00:00:00.000+00:00 | 東京 | アパレル | 45000 |
| 2024-01-01T00:00:00.000+00:00 | 東京 | 家電 | 50000 |
| 2024-01-01T00:00:00.000+00:00 | 東京 | 食品 | 20000 |
| 2024-02-01T00:00:00.000+00:00 | 名古屋 | アパレル | 35000 |
| 2024-02-01T00:00:00.000+00:00 | 大阪 | 家電 | 50000 |
| 2024-02-01T00:00:00.000+00:00 | 大阪 | 食品 | 25000 |
| 2024-02-01T00:00:00.000+00:00 | 東京 | 家電 | 85000 |
| 2024-02-01T00:00:00.000+00:00 | 東京 | 食品 | 15000 |
4. Genieスペースで試す
上記のメトリクスビューを作成したら、Genieスペースに追加して以下の質問を試してみてください:
- 「今月の売上は?」
- 「地域別の売上を教えて」
- 「一番売れているカテゴリは?」
- 「東京の売上推移を見せて」
まとめ
メトリクスビューは2つの問題を同時に解決します:
- ビューの濫造防止: 1つのメトリクスビューで複数の切り口に対応
- SQLなしで利用可能: Genie、ダッシュボード、Excelで誰でも使える
作る人が指標を正しく定義し、使う人はツールを通じて簡単にアクセスする。これがセマンティックレイヤーとしてのメトリクスビューの本質的な価値です。
関連ドキュメント
| ドキュメント | URL |
|---|---|
| メトリクスビュー 概要 | https://docs.databricks.com/ja/metric-views/ |
| Genieスペース | https://docs.databricks.com/ja/genie/ |
| AI/BIダッシュボード | https://docs.databricks.com/ja/dashboards/ |




