同じ「売上」「アクティブユーザー」でも、部門やツールごとに集計条件が違えば意思決定はぶれます。dbt Semantic Layer は、このズレをなくすためにメトリクス定義をコードとして一元管理し、データ基盤全体で再利用できるようにする仕組みです。
本記事では、Analytics Engineer の実務と試験の両方で問われやすい「メトリクス統一」の設計指針、YAML 定義例、変更管理とテストのコツを、公式ドキュメントの安定的な振る舞いに基づいて解説します。
BI ツールごとに売上定義やフィルタ条件が違うと、同じ問いに複数の答えが並びます。現場は検証作業に追われ、経営は意思決定を遅らせます。根本原因は、メトリクスが可視化ツールやスプレッドシートなど散在する場所で別々に定義されることです。
dbt Semantic Layer は、メトリクスを YAML で宣言的に定義し、変換後のデータモデルと密に結び付けます。定義はバージョン管理され、レビュー・テスト・デプロイのパイプラインに載せられます。実行時は SQL にコンパイルされ、Snowflake や BigQuery、Databricks、Redshift などの DWH 上で評価されます(実行は各 DWH の権限モデルに従います。詳細は各 DWH 公式ドキュメントを参照)。
資格対策の観点では、メトリクスの一貫性確保、データモデルとの依存関係管理、テストとドキュメンテーションの自動化が重要論点です。Semantic Layer を使うと、これらをプロジェクトの標準運用に組み込めます。
Semantic Layer は、変換済みのファクト/ディメンションモデルの上に「意味」を与えるレイヤーです。YAML で semantic_model(エンティティ・ディメンション・メジャー)を定義し、それを材料に metrics(ビジネス指標)を宣言します。定義は SQL にコンパイルされ、DWH 上で集計が実行されます。
実務で安定的に使われる概念は以下です。記法や詳細オプションは公式ドキュメントを参照してください(docs.getdbt.com)。API 連携やクエリ提供の仕組みは dbt Cloud の機能として提供されます。
基本はスター・スキーマ思考です。ファクトモデル(例: fct_orders)に対して、注文日の時間ディメンションや顧客ディメンションをマート層で整備し、その上に semantic_model を定義します。モデル間の結合は entity で宣言したキーに基づきます。
可視化やノートブックは、Semantic Layer が生成する正規化された SQL を通してメトリクスを取得します。時間粒度やフィルタの差異はクエリ引数として与えられるため、同じ定義から複数のビューを安定的に作れます。
Semantic Layer を中心にしたデータフロー
以下は、受注ファクト fct_orders を対象にした semantic_model と、その上で定義するメトリクスの例です。実際のフィールド名やオプションはプロジェクトに合わせて調整してください。YAML はバージョン管理され、レビューとテストの対象になります。
simple metric で合計売上を、derived metric で平均注文額を定義しています。時間粒度は day をデフォルトにし、共通フィルタとしてキャンセルを除外しています。
semantic_model と metrics の YAML 例
semantic_models:
- name: orders
model: ref('fct_orders')
defaults:
agg_time_dimension: order_date
entities:
- name: order_id
type: primary
- name: customer_id
type: foreign
measures:
- name: order_revenue
agg: sum
expr: amount
- name: orders
agg: count_distinct
expr: order_id
dimensions:
- name: order_date
type: time
type_params:
time_granularity: day
- name: order_status
type: categorical
metrics:
- name: total_revenue
type: simple
label: Total Revenue
type_params:
measure: order_revenue
filter:
- {expr: "order_status != 'canceled'"}
- name: order_count
type: simple
label: Order Count
type_params:
measure: orders
filter:
- {expr: "order_status != 'canceled'"}
- name: average_order_value
type: derived
label: Average Order Value
type_params:
expr: total_revenue / order_count
metrics: [total_revenue, order_count]メトリクスを統一しても、運用で崩れては意味がありません。dbt ではモデルやソース同様に、Semantic Layer の定義を Pull Request でレビューし、CI でテストし、環境ごとにデプロイします。実行は DWH 上で行われ、既存の権限・監査の枠組みに乗ります。
後方互換性のない変更(例: フィルタ条件の変更や式の変更)は、メトリクスをバージョン分岐させ、段階的な切り替えを行います。ドキュメントとカタログで参照先を可視化し、影響範囲を事前に把握します。
メトリクスをどこに置くかで、再利用性や変更影響が大きく変わります。日々の運用と監査を考えると、定義がコードとして一箇所に集約され、DWH 上で一貫して実行される形が扱いやすくなります。
| 観点 | BI ツール内定義 | SQL ビュー(DWH) | dbt Semantic Layer |
|---|---|---|---|
| 一貫性 | ツールごとに差異が生じやすい | ビュー単位で統一できるが用途別に乱立しがち | YAML 定義を単一の真実とできる |
| 再利用性 | ツール内に閉じる | 同一 DWH では再利用可 | ツール横断で再利用を前提に設計 |
| 変更影響の可視化 | 難しい(手作業) | 依存ビューの解析が必要 | 依存関係がカタログで可視化 |
| テストと CI | 限定的 | クエリ単体での検証が中心 | 定義を dbt テスト/CI に統合 |
| ガバナンス | 各ツール設定に依存 | DWH の権限とビュー管理に依存 | DWH 権限に準拠しつつコードで統治 |
Analytics Engineer
問題 1
複数の BI ツールとノートブックから同一の「平均注文額(AOV)」を再利用し、定義の変更を Pull Request でレビューしたい。最も適切なアプローチはどれか。
正解: A
メトリクスを dbt Semantic Layer(semantic_model/metrics)に宣言すると、定義がコードとして一元化され、レビュー・テスト・バージョン管理が可能になります。BI ツール個別定義や CSV 配布は定義のズレを招き、DWH の固定列は柔軟性と監査性に欠けます。
Semantic Layer を使うには dbt Cloud が必須ですか?
メトリクスの発見・提供に関わる API や統合機能は dbt Cloud で提供されます。定義ファイル(semantic_model/metrics)自体はリポジトリで管理でき、dbt の通常の開発・レビュー・ドキュメント化に統合可能です。実行は DWH 上で行われ、権限や監査は各 DWH の仕組みに従います。最新の要件は docs.getdbt.com を参照してください。
どのデータウェアハウスで動作しますか?
dbt は主要なクラウド DWH(例: Snowflake、BigQuery、Databricks、Redshift など)をサポートしており、Semantic Layer はこれらの上で SQL として実行されます。利用可能な機能や要件はアダプタやバージョンにより変わる可能性があるため、公式ドキュメントの互換性マトリクスを確認してください。
SCD(緩やかに変化するディメンション)はどこで扱うべきですか?
SCD はマート層のモデル設計で扱い、最新レコードや履歴の扱いをテーブル側で明確化します。Semantic Layer では、そのモデルに定義した時間ディメンションとフラグ(例: is_current)をディメンション/フィルタとして利用し、参照時点を一貫させます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
dbt Model の基礎: SQL で定義する変換の最小単位
Analytics Engineer 向けに、dbt Model の定義、マテリアライゼーション、依存関係、インクリメン...
dbt Analytics Engineer 試験ガイド: 出題範囲・配点・申込の実務視点
dbt Analytics Engineer 認定の出題範囲、配点の考え方、申込から受験までの流れを、公式ドキュメントの...
dbt Cloud と dbt Core の違いと選び方:Analytics Engineer 試験に効く要点
dbt Cloud と dbt Core の機能差を、実務と資格対策の両面から整理。スケジューリング、IDE、RBAC、...
dbt プロジェクト構造ガイド: models / seeds / macros の実務レイアウト
Analytics Engineer 向けに、dbt プロジェクトのディレクトリ構造と命名規約、dbt_project....
dbt_project.yml の読み方:主要設定と命名を最短で掴む
dbt_project.yml の必須キー、命名解決(database.schema.identifier)、設定優先度...