モデルメトリクスビュー
メトリクス ビューはデータのセマンティック レイヤーを作成し、テーブルとビューを標準化されたビジネス メトリクスに変換します。 彼らは、何を測定するか、どのように集計するか、そしてどのようにセグメント化するかを定義する。メトリクスビューは、組織内のすべてのユーザーが同じ主要業績評価指標(KPI)に対して同じ値を報告することを保証し、一貫性のない報告を排除し、あらゆる側面にわたる柔軟な分析を可能にします。
結合、ディメンション、メジャー、およびエージェントのメタデータを含む完全な例については、 「チュートリアル: 結合を使用して完全なメトリクス ビューを構築する」を参照してください。
コアコンポーネント
メトリクス ビューは次の要素で構成されます。
コンポーネント | 説明 | 例 |
|---|---|---|
ソース | データを含む基本テーブル、ビュー、またはSQLクエリ。 |
|
ディメンション | セグメント化またはグループ メトリクスに使用される列属性。 | 製品カテゴリ、注文月、顧客地域 |
メジャー | メトリクスを生成する列集計。 |
|
フィルター | 範囲を定義するために、ソースデータに適用される条件。 |
|
テーブルのJOIN | テーブル、ビュー、メトリクス ビューとエンリッチデータとの関係。 |
|
ソースを定義する
テーブルのようなアセットまたはSQLクエリをメトリクス ビューのソースとして使用できます。 参照されるアセットに対して、少なくともSELECT権限が必要です。
テーブル状のアセット は、表形式のスキーマを公開し、テーブル、ビュー、マテリアライズドビュー、ストリーミング テーブル、フォーリンテーブル、システム テーブル、メトリクス ビューなどのSELECTクエリをサポートするUnity Catalogオブジェクトです。
テーブルのようなアセットをソースとして使用する
テーブルのようなアセットをソースとして使用するには、完全修飾名を指定します。例えば: samples.tpch.orders 。
メトリクス ビューをソースとして使用する
既存のメトリクス ビューを新しいメトリクス ビューのソースとして使用できます。
version: 1.1
source: views.examples.source_metric_view
dimensions:
- name: Order month
expr: '`Order Month`'
measures:
- name: Latest order month
expr: MAX(`Order month`)
- name: Latest order year
expr: "DATE_TRUNC('year', MEASURE(`Latest order month`))"
メトリクス ビューをソースとして使用する場合、同じ構成ルールがディメンションとメジャーの参照に適用されます。 構成可能性を参照してください。
SQLクエリをソースとして使用する
SQLクエリを使用するには、クエリテキストをYAMLに直接記述します。
version: 1.1
source: SELECT * FROM samples.tpch.orders o LEFT JOIN samples.tpch.customer c ON o.o_custkey
= c.c_custkey
dimensions:
- name: Order key
expr: o_orderkey
measures:
- name: Order Count
expr: COUNT(o_orderkey)
SQLクエリをJOIN句を含むソースとして使用する場合は、基となるテーブルに主キーと外部キーの制約を設定し、最適なクエリパフォーマンスを得るためにRELYオプションを使用してください。主キーと外部キーの関係を宣言する、および主キー制約を使用したクエリの最適化を参照してください。
寸法
ディメンションとは、クエリ実行時にSELECT 、 WHERE 、 GROUP BY句で使用される列のことです。各式はスカラー値を返さなければなりません。ディメンションは、ソース データの列、またはメトリクス ビューで以前に定義されたディメンションを参照できます。 各次元は2つの要素から構成されます。
name: 列の別名expr: ソース データまたはメトリクス ビューで以前に定義されたディメンションを参照するSQL式
メジャー
指標とは、あらかじめ定められた集計レベルなしに結果を生み出す表現のことです。それらは集計関数を用いて表現されなければならない。メジャーは、ソースデータの基本フィールド、ディメンション、または以前に定義されたメジャーを参照できます。各指標は以下の構成要素から成ります。
name: 尺度の別名expr: SQL集計関数を含めることができる集計SQL式
以下の例は、注文データと収益データを分析するための一般的な測定パターンを示しています。これらの例では、注文価格( o_totalprice )、顧客識別子( o_custkey )、注文キー( o_orderkey )、注文日( o_orderdate )、優先度レベル( o_orderpriority )などの販売取引データを含むTPC-H注文テーブルを使用します。
measures:
# Simple count measure
- name: Order Count
expr: COUNT(1)
# Sum aggregation measure
- name: Total Revenue
expr: SUM(o_totalprice)
# Distinct count measure
- name: Unique Customers
expr: COUNT(DISTINCT o_custkey)
# Calculated measure combining multiple aggregations
- name: Average Order Value
expr: SUM(o_totalprice) / COUNT(DISTINCT o_orderkey)
# Filtered measure with WHERE condition
- name: High Priority Order Revenue
expr: SUM(o_totalprice) FILTER (WHERE o_orderpriority = '1-URGENT')
# Measure using a dimension
- name: Average Revenue per Month
expr: SUM(o_totalprice) / COUNT(DISTINCT DATE_TRUNC('MONTH', o_orderdate))
集計関数の一覧については、 「集計関数」を参照してください。
フィルターを適用する
YAML 定義内のフィルターは、メトリクス ビューを参照するすべてのクエリに適用されます。 次の例は、フィルタをBoolean式として記述する方法を示しています。
# Single condition
filter: o_orderdate > '2024-01-01'
# Multiple conditions
filter: o_orderdate > '2024-01-01' AND o_orderstatus = 'F'
# IN clause
filter: o_orderstatus IN ('F', 'P') AND o_orderdate >= '2024-01-01'
結合を操作する
メトリクス ビューの結合は、ファクト テーブルからディメンション テーブルへの直接結合 (スター スキーマ) と、正規化されたディメンション テーブルを横断するマルチ ホップ結合 (スノーフレーク スキーマ) の両方をサポートしています。
結合テーブルにはMAP型の列を含めることはできません。MAP型の列から値を展開するには、 「マップまたは配列からネストされた要素を展開する」を参照してください。
モデルスター図
スター型スキーマでは、 sourceはファクトテーブルであり、 LEFT OUTER JOINを使用して 1 つ以上のディメンションテーブルと結合します。メトリクス ビューは、選択されたディメンションとメジャーに基づいて、特定のクエリに必要なファクト テーブルとディメンション テーブルを結合します。
結合列を指定するには、 on句(ブール式)またはusing句(共有列名)のいずれかを使用します。 結合は多対一の関係に従う必要があります。多対多の場合、結合されたディメンションテーブルから最初に一致する行が選択されます。
次の例では、 orders (ファクトテーブル)をcustomer (ディメンションテーブル)に結合し、顧客属性をディメンションとして公開します。
version: 1.1
source: samples.tpch.orders
joins:
- name: customer
source: samples.tpch.customer
on: source.o_custkey = customer.c_custkey
dimensions:
- name: Customer name
expr: customer.c_name
- name: Customer market segment
expr: customer.c_mktsegment
measures:
- name: Total revenue
expr: SUM(o_totalprice)
- name: Order count
expr: COUNT(1)
両方のテーブルで列名が共通している場合は、 onの代わりにusing句を使用してください。
joins:
- name: customer
source: samples.tpch.customer
using:
- customer_key
on句では、 sourceメトリクス ビューのソース テーブルを参照し、結合nameは結合されたテーブルの列を参照します。 例えば、 source.o_custkey = customer.c_custkeyソーステーブルのo_custkey列をcustomerテーブルのc_custkey列に結合します。接頭辞が指定されていない場合、参照はデフォルトで結合されたテーブルになります。
モデルの雪の結晶スキーマ
スノーフレークスキーマは、ディメンションテーブルを正規化し、それらをサブディメンションに接続することで、スタースキーマを拡張したものです。これにより、多階層の結合構造が作成されます。
スノーフレークスキーマを定義するには:
- メトリクス ビューの作成
- 第1レベル(スター型スキーマ)の結合を追加する
- 他のディメンションテーブルと結合する
- ビューにディメンションを追加して、ネストされたディメンションを公開します。
次の例では、TPC-H データセットを使用して、注文の地理的階層を示すスノーフレーク スキーマを示します。 この例では、注文テーブルを顧客、次に顧客の国籍(国)、最後に顧客の地域(大陸)に結合します。この多段階結合構造により、「地域別の収益を表示する」や「国別の顧客分布を比較する」といった分析が可能になります。TPC-H データセットは、 Databricksワークスペースのsamplesカタログで入手できます。
source: samples.tpch.orders
joins:
- name: customer
source: samples.tpch.customer
on: source.o_custkey = customer.c_custkey
joins:
- name: nation
source: samples.tpch.nation
on: customer.c_nationkey = nation.n_nationkey
joins:
- name: region
source: samples.tpch.region
on: nation.n_regionkey = region.r_regionkey
dimensions:
- name: clerk
expr: o_clerk
- name: customer
expr: customer
comment: returns the full customer row as a struct
- name: customer_name
expr: customer.c_name
- name: nation
expr: customer.nation
- name: nation_name
expr: customer.nation.n_name
YAML構文とフォーマット
メトリクス ビューの定義は、標準の YAML 表記構文に従います。 必要な構文と形式については、メトリクス ビューの YAML 構文リファレンスを参照してください。
ベストプラクティス
メトリクス ビューをモデル化するときは、次のガイドラインに従ってください。
- モデルの原子尺度 : まず最も単純な尺度を定義することから始めます (たとえば、
SUM(revenue)、COUNT(DISTINCT customer_id))。構成可能性を活用して、複雑なメジャーを構築する。 - ディメンション値を標準化する :変換(
CASEステートメントなど)を使用して、データベースコードを明確なビジネス名に変換します(たとえば、注文ステータス「O」を「Open」に、「F」を「Fulfilled」に変換します)。 - フィルターを使用して範囲を定義する : メトリクス ビューに完了した注文のみを含める必要がある場合は、ユーザーが不完全なデータを誤って含めることができないように、メトリクス ビューでそのフィルターを定義します。
- 明確な名前を使用する : メトリクス名はビジネス ユーザーが認識できるものにする必要があります (たとえば、
cltv_agg_measureの代わりに「顧客生涯価値」)。 - 時間軸を分離する :詳細レベルの分析と傾向分析の両方をサポートするために、詳細な時間軸(「注文日」など)と切り捨てられた時間軸(「注文月」や「注文週」など)を含めます。