0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLを知らなくても正しい数字が手に入る:Databricksのメトリクスビューで実現するセルフサービスBI

Posted at

この記事で伝えたいこと

  • メトリクスビューは「ビューの濫造」と「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スペースを作成

  1. Databricksワークスペースで Genie を開く
  2. New Genie space をクリック
  3. 作成したメトリクスビュー(sales_metrics)をデータソースとして追加
  4. ビジネスユーザーにアクセス権を付与

ステップ3: ビジネスユーザーが自然言語で質問

ユーザー: 「今月の地域別売上を教えて」
Genie:    東京: 5,200万円
          大阪: 3,100万円
          名古屋: 1,800万円
          ...

ユーザー: 「先月と比較して」
Genie:    東京: 5,200万円(前月比 +8%)
          大阪: 3,100万円(前月比 -2%)
          ...

ユーザー: 「売上が伸びているカテゴリは?」
Genie:    家電: +15%
          アパレル: +12%
          ...

ポイント: ユーザーは「売上」が何を指すか知らなくても、正しい数字が返ってくる

具体例:AI/BIダッシュボードでの利用

ステップ1: ダッシュボードを作成

  1. ダッシュボードを開く(「ダッシュボードを作成」をクリック)
  2. データタブをクリック → データソースを追加するをクリック
  3. カタログとスキーマを選択し、メトリクスビューを選択

ステップ2: グラフの設定

メトリクスビューを使うと、以下が選択肢として表示される:

ディメンション(X軸やフィルター)

  • order_date
  • order_month
  • region
  • product_category

メジャー(Y軸や値)

  • total_sales
  • order_count
  • avg_order_value
  • customer_count

SQLを書かずに、クリックだけでグラフが作れる。

Screenshot 2025-12-18 at 13.23.07.png

Screenshot 2025-12-18 at 13.24.00.png

ビフォー・アフター比較

ビュー管理

項目 従来 メトリクスビュー
ビューの数 切り口の組み合わせ分だけ増殖 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: "ユニーク顧客数"
$$;

Screenshot 2025-12-18 at 13.27.43.png
Screenshot 2025-12-18 at 13.28.34.png

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スペースに追加して以下の質問を試してみてください:

  • 「今月の売上は?」
  • 「地域別の売上を教えて」
  • 「一番売れているカテゴリは?」
  • 「東京の売上推移を見せて」

Screenshot 2025-12-18 at 13.22.00.png

まとめ

メトリクスビューは2つの問題を同時に解決します:

  1. ビューの濫造防止: 1つのメトリクスビューで複数の切り口に対応
  2. 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/

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?