dbt

dbt metrics 実務ガイド: 指標の定義と利用を“壊れない”形で設計する

2026-04-19
NicheeLab編集部

指標は最終成果物ではなく、意思決定のための契約です。定義場所と計算方法がブレると、BIの数字がツールごとにズレます。本稿では、dbtにおける指標定義の選択肢を、モデルによる集約とSemantic Layerによる統一定義の両面から整理します。

dbt公式の機能はバージョンで変遷があります。特に旧来のmetricsリソースは非推奨方向で、現在はdbt CloudのSemantic Layer(MetricFlowベース)が推奨です。資格対策では、安定して問われやすい概念(粒度、テスト、系譜、ガバナンス)に軸足を置きつつ、新旧の位置づけを押さえておきましょう。

指標をどこで定義するか: モデル vs Semantic Layer

dbtでの指標の置き場所は、大きく2つに分かれます。ひとつは集約済みのマートモデルを作る方式、もうひとつはSemantic Layerでmeasureとmetricを宣言して下流ツールから呼び出す方式です。前者はどのDWHでも動く普遍性、後者は定義の一元化と接続先での再利用性に強みがあります。

現場では、まず事実テーブルとディメンションの正規化、時間粒度の統一、フィルタ条件の合意を済ませてから、どちらの方式を選ぶかを決めるのが堅実です。

  • モデル方式: fct_ / dim_ を整備し、必要な集約ビューをdbtモデルとして提供
  • Semantic Layer方式: measures・dimensions・metricsをYAMLで宣言し、ツール横断で再利用
  • どちらでも共通: 粒度、フィルタの既定、null/重複の扱い、テストの自動化
  • データプラットフォーム非依存性を優先するならモデル方式、組織横断の定義一元化を優先するならSemantic Layer

指標の系譜と利用の流れ

Sources (RAW)Staging (stg)Marts (dim/fct)A) 集約モデル (dbt SQL)B) Semantic LayerBI / Notebooks / Apps指標の系譜と利用の流れ

モデルで指標を表現する: 安定・移植性重視の作り方

マート層で事実テーブルを整備し、AOVやCVRなどの指標をビュー/テーブルとして提供する方法です。どのDWHでも使え、dbt Coreのみで完結するため、試験でも本流として問われやすいです。

ポイントは一貫した粒度管理と、集約ロジックの再利用です。たとえば日次・週次・月次と3つ作るのではなく、最小粒度(日次)を基本に、下流でロールアップ可能な形に保ちます。

  • 粒度の明示: date_day, customer_id などを主キーに含める
  • フィルタの既定値は列として持つよりも、ビュー層で統一的に適用
  • 重複行・遅延到着の扱いをstgで潰す(surrogate key、windowで最新行など)
  • tests: unique, not_null, accepted_values を必ず用意
  • exposuresでダッシュボード依存関係を可視化して監視対象にする

Semantic Layerで指標を定義する: 再利用性と一貫性の最大化

dbt CloudのSemantic Layer(MetricFlowベース)では、semantic_modelsでエンティティ・ディメンション・メジャーを宣言し、metricsで指標を組み立てます。BIやノートブックがこの層を経由することで、ツール間の指標不一致を防げます。

仕様やキーワードはバージョンで更新されることがあるため、実装前に公式ドキュメントを確認してください。概念としては、measure(集計対象の定義)とmetric(利用者向けのビジネス指標)を分離し、time grainやディメンション、フィルタの既定を明示します。

  • measureは集計方法(sum, count, avg など)と式を定義
  • metricはmeasureを参照し、必要に応じてratioや派生計算を宣言
  • time_granularityや既定フィルタをmetric側に持たせると誤用を防止
  • 接続済みBIから同一API経由で取得することで数値の一貫性を担保
アプローチ定義場所/管理主な利点注意点
手書き集約モデル(SQL)dbt Coreのモデル(marts層)DWH非依存・シンプル・運用が容易粒度やフィルタの乱立に注意。BIごとの差分管理が必要
旧metricsリソース(非推奨)YAMLのmetrics定義(旧仕様)一時期のdbt Coreで簡易に定義可能現在は非推奨。新規はSemantic Layerへ移行推奨
Semantic Layer(MetricFlow)semantic_models と metrics(dbt Cloud)定義一元化・ツール横断の再利用・メトリクスガバナンスCloud依存、仕様更新への追随が必要

Semantic Layerの例: semantic_models と metrics のYAML

semantic_models:
  - name: orders
    model: ref('fct_orders')
    entities:
      - name: order
        type: primary
        expr: order_id
      - name: customer
        type: foreign
        expr: customer_id
    dimensions:
      - name: order_date
        type: time
        type_params:
          time_granularity: day
      - name: channel
        type: categorical
    measures:
      - name: orders
        agg: count
      - name: gross_revenue
        agg: sum
        expr: gross_amount

metrics:
  - name: total_revenue
    type: simple
    label: Total Revenue
    type_params:
      measure: gross_revenue
  - name: aov
    type: ratio
    label: Average Order Value
    type_params:
      numerator: gross_revenue
      denominator: orders
    filter: channel != 'internal'
    time_granularity: day

粒度・テスト・ガバナンス: 壊れない指標の作法

壊れない指標は、粒度の明示、入力データ品質の担保、そしてドキュメントの3点で決まります。特に日付とエンティティの組で一意になるかを最初に確認し、nullや遅延到着を想定した設計にします。

テストはstgとmartsの両方に配置します。stgではスキーマ整合と重複排除、martsではキーの一意性、結合の完全性、受け入れ値の検証を行います。Semantic Layerを使う場合でも、土台のモデルテストは省略しません。

  • 粒度: 最小粒度で保持し、必要に応じてロールアップ
  • フィルタ: ビジネス合意済みの既定フィルタを定義。除外条件は明文化
  • null/遅延: 既定値の扱いと更新戦略(スナップショット/増分)を決める
  • テスト: unique, not_null, relationships, accepted_values を必須化
  • ドキュメント: 指標の定義根拠、分子・分母、例外事項をdocsで公開

指標の利用: BI・ノートブック・アプリからの呼び出し

モデル方式では、集約ビューをBIが直接参照します。Semantic Layer方式では、対応コネクタやAPIを介してmetricを指定して取得します。どちらでも、権限設計とキャッシュ戦略を合わせて考えておくとパフォーマンスが安定します。

ダッシュボードはexposuresでdbtプロジェクトに登録し、上流変更の影響を可視化します。リリース前に該当exposureに対するデータ検証を自動実行すると、指標の破壊的変更を早期に検知できます。

  • BI接続: モデル方式はビュー/テーブル参照、Semantic Layerはコネクタ/API参照
  • 権限: 最小権限のロールで読み取りを付与。Semantic Layer経由時はCloud側の権限も確認
  • キャッシュ: 時系列指標は日次リフレッシュのウィンドウを短くしすぎない
  • exposures: type=dashboard の依存関係で影響範囲を追跡
  • SLA: 更新頻度と遅延の許容範囲をダッシュボードに明記

試験対策の要点: ひっかけ回避の観点整理

Analytics Engineer試験では、定義の一貫性とデータ品質に関する原則が狙われます。具体プロダクトの細部仕様は変わる可能性があるため、概念の優先順位で判断できるようにしておきましょう。

ひっかけとして多いのは、BIツールごとの計算フィールド乱立や、粒度の不一致による比率の誤差です。分母・分子が同じフィルタと粒度で計算されているかを常に確認します。

  • 指標はビジネス定義の契約。定義場所の一元化が最優先
  • 粒度が合わない集約の比率は誤差を生む。先に正しい粒度へ揃える
  • testsとdocsは合格の定番論点。examplesやaccepted_valuesを活用
  • exposuresで下流の可視化を管理し、変更の影響を追跡
  • Semantic Layerは概念把握が重要。measureとmetricの役割分担を説明できること

問題で確認

Analytics Engineer

問題 1

組織全体でAOV(平均注文額)をツール横断で一貫提供したい。DWHは複数、BIも複数種類が並行稼働している。再利用性とガバナンスを最も両立できるアプローチはどれか。

  1. dbt CloudのSemantic Layerでmeasureとmetricを定義し、対応コネクタ経由で各BIから取得する
  2. 各BIの計算フィールドでAOVを定義し、ドキュメントで共通化を周知する
  3. マートに日次・週次・月次それぞれのAOVテーブルを作り、BIが用途に応じて選ぶ
  4. 上流ETLでAOVを事前計算してRAW層に書き込み、全ツールがそれを読む

正解: A

ツール横断の一貫性と再利用性を最も担保できるのはSemantic Layerでの定義一元化。BI側の計算や複数粒度の乱立、RAWへの焼き込みはメンテ困難や定義逸脱の温床になりやすい。

よくある質問

旧来のdbt metricsリソースは使ってよいですか?

現在は非推奨方向です。新規はdbt CloudのSemantic Layer(MetricFlow)での定義を検討してください。既存プロジェクトの移行は、measureとmetricの対応関係を整理し、粒度・フィルタの既定を明記したうえで段階的に行うのが安全です。詳細はdbt公式ドキュメントの最新ガイダンスを参照してください。

DWHやBIが混在しています。どの方式が安全ですか?

移植性最優先ならモデル方式(dbt SQLでの集約ビュー)が堅実です。一方で組織横断の一貫性と再利用を最大化したいならSemantic Layerが有力です。どちらにせよ、土台のstg/martsの品質テストと粒度の統一が前提です。

パフォーマンスはどう考えますか?

モデル方式ではマテリアライズ(table/incremental)と集約の事前計算を活用します。Semantic Layerではコネクタ側の最適化とDWHの統計・パーティションを活かします。どちらでも、日付ウィンドウの再計算範囲を適切に制限し、コストの高いディメンション結合を事前に正規化するのが有効です。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
dbt

dbt Model の基礎: SQL で定義する変換の最小単位

Analytics Engineer 向けに、dbt Model の定義、マテリアライゼーション、依存関係、インクリメン...

dbt

dbt Analytics Engineer 試験ガイド: 出題範囲・配点・申込の実務視点

dbt Analytics Engineer 認定の出題範囲、配点の考え方、申込から受験までの流れを、公式ドキュメントの...

dbt

dbt Cloud と dbt Core の違いと選び方:Analytics Engineer 試験に効く要点

dbt Cloud と dbt Core の機能差を、実務と資格対策の両面から整理。スケジューリング、IDE、RBAC、...

dbt

dbt プロジェクト構造ガイド: models / seeds / macros の実務レイアウト

Analytics Engineer 向けに、dbt プロジェクトのディレクトリ構造と命名規約、dbt_project....

dbt

dbt_project.yml の読み方:主要設定と命名を最短で掴む

dbt_project.yml の必須キー、命名解決(database.schema.identifier)、設定優先度...

dbtの記事一覧 (101件)
© 2026 NicheeLab All rights reserved.