メトリック ビューは、データのセマンティック レイヤーを作成し、テーブルとビューを標準化されたビジネス メトリックに変換します。 測定対象、集計方法、セグメント化方法を定義します。 メトリック ビューを使用すると、組織全体のすべてのユーザーが同じ主要業績評価指標 (KPI) に対して同じ値をレポートできるため、一貫性のないレポートが排除され、あらゆるディメンションで柔軟な分析が可能になります。
結合、ディメンション、メジャー、およびエージェント メタデータの完全な例については、「 チュートリアル: 結合を使用して完全なメトリック ビューを作成する」を参照してください。
コア コンポーネント
メトリック ビューは、次の要素で構成されます。
| コンポーネント | 説明 | 例 |
|---|---|---|
| ソース | データを含むベース テーブル、ビュー、または SQL クエリ。 | samples.tpch.orders |
| ディメンション | メトリックをセグメント化またはグループ化するために使用される列属性。 | 製品カテゴリ、注文月、顧客リージョン |
| 対策 | メトリックを生成する列の集計。 |
COUNT(o_order_id)を注文数、SUM(o_total_price)を合計収益として |
| フィルター | スコープを定義するためにソース データに適用される条件。 |
|
| 結合 | データを強化するためのテーブル、ビュー、メトリック ビュー間のリレーションシップ。 |
orders テーブルを customers テーブルに customer_key で結合する |
ソースを定義する
メトリック ビューのソースとして、テーブルに似た資産または 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)
注
JOIN句を含むソースとして SQL クエリを使用する場合は、基になるテーブルに主キー制約と外部キー制約を設定し、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 定義のフィルターは、メトリック ビューを参照するすべてのクエリに適用されます。 次の例は、フィルターをブール式として記述する方法を示しています。
# 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)
両方のテーブルが列名を共有する場合は、usingの代わりに on 句を使用します。
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 データセットは、Azure 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ではなく"Customer Lifetime Value")。 - 個別の時間ディメンション: 詳細レベルと傾向分析の両方をサポートするために、細かい時間ディメンション ("Order Date" など) と切り捨てられた時間ディメンション ("Order Month" や "Order Week" など) を含めます。