チュートリアル: 結合とデータ モデリングを使用してメトリック ビューを構築する

このチュートリアルでは、TPC-H データセットに対して売上分析メトリック ビューを作成します。 最終的には、次のメトリック ビューが表示されます。

  • スノーフレーク スキーマを使用して、複数のテーブル間で注文と顧客を結合します。
  • 時間、地理、および順序属性のフィールド (ディメンションとも呼ばれます) を定義します。
  • 比率、フィルター処理された集計、ウィンドウ メジャーなど、単純なメジャーと複雑なメジャーを計算します。
  • コンポーザビリティを活用して、より単純な測定値から複雑なメトリクスを構築します。
  • クエリ時に割引率を適用するパラメーターを定義します。
  • ダッシュボードと AI ツールの エージェント メタデータ が含まれています。

メトリック ビューを初めて使用する場合は、「 メトリック ビューを作成 する」から基本を学習します。 このチュートリアルでは、その基盤を実際の複雑さに拡張します。

必要条件

このチュートリアルを完了するには、以下が必要です。

  • Unity カタログで有効になっているワークスペース。
  • Databricks Runtime 17.3 以降を実行している SQL ウェアハウスまたはコンピューティング リソース。

メトリック ビューを作成するために必要な権限の完全な一覧については、「 前提条件」を参照してください。

Note

メトリック ビューの作成は、Databricks Runtime 16.4 以降でサポートされています。 このチュートリアルでは、Databricks Runtime 17.3 以降を必要とする機能を使用します。一部の手順では、後でランタイムが必要になります。 各機能の最小ランタイムについては、 メトリック ビューの機能の可用性に関する記事を参照してください。

データ モデル

TPC-H データセットは、卸売サプライ チェーンをモデル化します。 このチュートリアルでは、スノーフレーク スキーマで結合された 3 つのテーブルを使用します。

  • orders は、o_custkey = c_custkeycustomer に参加します
  • customer は、c_nationkey = n_nationkeynation に参加します
Role キー列
orders 注文処理のファクトテーブル o_orderkeyo_custkeyo_totalpriceo_orderdateo_orderstatus
customer ディメンションテーブル (顧客の詳細) c_custkeyc_namec_mktsegmentc_nationkey
nation ディメンション テーブル (国または地域の参照) n_nationkeyn_namen_regionkey

手順 1: メトリック ビューを作成し、エディターを開く

このメトリック ビューは、カタログ エクスプローラー UI でビルドしたり、 Genie Code で生成したり、完全な YAML 定義を直接記述したりできます。 3 つのメソッドはすべて、メトリック ビューをモデル化する 1 つの YAML 定義に解決されます。 以降の各手順で、[ カタログ エクスプローラー UI] または[YAML エディター ] タブを選択して、任意の方法に従います。 YAML エディターを使用する場合、各ステップのコード例は、そのステップでビルドした内容に対応する YAML 定義の部分です。

Note

このチュートリアルの YAML の例では、 fields キーワードを使用します。 低コード エディターでメトリック ビューをビルドすると、生成される YAML では、代わりに同等の dimensions キーワードが使用されます。 「フィールド」を参照してください。

メトリック ビューを作成するための UI に慣れていない場合は、「メトリック ビューを 作成する」を参照してください。

メトリック ビューを作成するには、カタログ エクスプローラーで次の手順を実行します。

  1. samples.tpch.orders を検索します。
  2. テーブル名をクリックします。
  3. [ 作成>メトリック ビュー ] をクリックし、ビューに名前を付けます。

詳細な作成手順については、「 メトリック ビューの作成」を参照してください。 エディターが開いたら、[ UI ] タブを使用して対話形式でビルドするか、 <> ボタンをクリックして YAML 定義を直接編集します。

手順 2: メトリック ビューを設定する

メトリック ビューのバージョンと説明を設定します。 versionは YAML 仕様のバージョンを決定し、commentは、カタログ エクスプローラーに表示されるメトリック ビューの目的を文書化します。 Azure Databricksはバージョンを管理します。

カタログ ブラウザ ユーザーインターフェース

そのバージョンはあなた向けに定義されています。 メトリック ビューを保存した後に説明を追加または編集するには:

  1. カタログ エクスプローラーでメトリック ビューを検索し、その名前をクリックします。
  2. [ 説明] をクリックし、メトリック ビューの説明を入力します。 YAML エディター タブに示されているサンプルの説明を使用できます。

このテキストは、YAML 定義の comment フィールドに対応します。 メトリック ビューを編集する方法の詳細については、「メトリック ビュー の編集」を参照してください。

YAML エディター

version: 1.1

comment: |-
  Sales analytics metric view for order performance analysis.
  Joins orders with customers and geography.
  Owner: Analytics Team
  Last updated: 2025-01-15

手順 3: ソースと結合を定義する

プライマリ ソース テーブルを定義し、関連テーブルを結合します。

  • source は、ファクト テーブル (注文) を粒度として設定します。
  • joins は、多対一のリレーションシップを使用して顧客データを取り込む。
  • ネストされた nation 結合は、customer を介して地理データに到達するように結合するスノーフレーク スキーマ パターンを示しています。ここで、国は顧客のサブディメンションです。

カタログ ブラウザ ユーザーインターフェース

この例では、スノーフレーク スキーマをモデル化するために、2 つの結合 ( 多対 1) を追加します。

customer結合を追加するには:

  1. エディターで、右上隅にある [ 結合 ] をクリックして、[ 結合の追加 ] ダイアログを開きます。
  2. samples.tpch.customerを検索し、テーブル名をクリックして、[追加] をクリックします。
  3. 結合条件を o_custkey = c_custkeyに設定します。
  4. 結合カーディナリティ で、多対一 を選択します。 カーディナリティの選択については、結合カーディナリティを参照してください。

次に、入れ子になった nation 結合を追加します。 customer の結合の手順を繰り返し、c_nationkey = n_nationkeysamples.tpch.nation を結合します。 join を customer の下にネストすると、customer のサブディメンションとして国をモデル化します。

完全な結合ダイアログの手順については、「 手順 2: 結合を追加する」を参照してください。

YAML エディター

source: SELECT * FROM samples.tpch.orders

joins:
  - name: customer
    source: samples.tpch.customer
    'on': o_custkey = c_custkey
    joins:
      - name: nation
        source: samples.tpch.nation
        'on': c_nationkey = n_nationkey

手順 4: フィルターを定義する

filterではソース データが制限され、メトリック ビューのすべてのクエリに適用されます。 このチュートリアルでは、メトリック ビューを最新のデータに制限します。

カタログ ブラウザ ユーザーインターフェース

フィルターを定義するには:

  1. エディターで、右上隅にあるフィルター アイコン。フィルターをクリックします。
  2. ドロップダウン メニューを使用して 、列o_orderdate演算子>=1995-01-01に設定します。

フィルターの詳細については、「 手順 3: フィルターを定義する」を参照してください。

YAML エディター

filter: o_orderdate >= '1995-01-01'

手順 5: フィールドを定義する

フィールドは、ユーザーがグループ化してフィルター処理する属性です。 フィールドには、ユーザーがクエリ時に集計するカテゴリ列 (地域や状態など) や、集計されていない数値列 (年齢や数量など) を指定できます。

エージェントメタデータ

このチュートリアルの各フィールドとメジャーには、ダッシュボードと AI ツールでのメトリック ビューの動作を改善する エージェント メタデータ プロパティが含まれています。

  • display_name: 技術的な列名の代わりに視覚化に表示される読み取り可能なラベル。
  • synonyms: Genie などの AI ツールが自然言語クエリを使用してフィールドとメジャーを検出するのに役立つ代替名。
  • format: ダッシュボード、ノートブック、SQL クエリ結果などのダウンストリーム サーフェスに値を表示する方法 (通貨、数値、パーセンテージなど)。

これらのプロパティは省略可能ですが、推奨されます。 フィールドとメジャーの定義は下記の手順でインライン に含まれます。.

フィールド定義

このチュートリアルでは、次の内容を追加します。

  • 時間フィールド:order_dateorder_month、および order_year を複数の粒度で使用して、さまざまな分析ニーズをサポートします。
  • 変換されたフィールド:order_statusorder_priority。ソース コードを読み取り可能なラベルに変換するために CASESPLIT を使用します。
  • 結合されたフィールド:customer_namemarket_segmentcustomer_nation。結合されたテーブルは結合名を使用して参照されます。 入れ子になった結合列では、 customer.nation.n_nameなどのチェーンドット表記を使用して、スノーフレーク スキーマを走査します。

カタログ ブラウザ ユーザーインターフェース

エディターは、すべてのソース列を [ フィールド] タブに自動的に追加します。 フィールドの編集、名前の変更、削除、追加を行い、メトリック ビューで次の内容を正確に定義できるようにします。 各フィールドの名前をクリックして編集するか、[追加] または [追加] アイコン クリックして作成し、 式をビルダー または カスタム モードで設定します。 次に示すように、各フィールドの 表示名シノニム を設定します。

  1. order_date: ビルダー モードで、 o_orderdate 列を選択します。 表示名を Order Dateに設定します。

  2. order_month: カスタム モードで、「 DATE_TRUNC('MONTH', order_date)」と入力します。 表示名を Order Monthに設定します。

  3. order_year: カスタム モードで、「 YEAR(order_date)」と入力します。 表示名を Order Yearに設定します。

  4. order_status: カスタム モードで、次の式を入力します。 表示名を Order Status に設定し、シノニムを statusfulfillment statusに設定します。

    CASE o_orderstatus
      WHEN 'O' THEN 'Open'
      WHEN 'P' THEN 'Processing'
      WHEN 'F' THEN 'Fulfilled'
    END
    
  5. order_priority: カスタム モードで、「 SPLIT(o_orderpriority, '-')[0]」と入力します。 表示名を Priorityに設定します。

  6. customer_name: ビルダー モードで、結合されたc_name テーブルからcustomer列を選択します。 表示名を Customer Nameに設定します。

  7. market_segment: ビルダー モードで、結合されたc_mktsegment テーブルからcustomer列を選択します。 表示名を Market Segment に設定し、シノニムを segmentindustryに設定します。

  8. customer_nation: カスタムモードで、ネストされたnation結合を参照するには、customer.nation.n_nameを入力します。 表示名を Country に設定し、シノニムを nationcountryに設定します。

フィールドの完全な手順については、「 手順 4: フィールドを追加する」を参照してください。

YAML エディター

fields:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date

  - name: order_month
    expr: "DATE_TRUNC('MONTH', order_date)"
    display_name: Order Month

  - name: order_year
    expr: YEAR(order_date)
    display_name: Order Year

  - name: order_status
    expr: |-
      CASE o_orderstatus
        WHEN 'O' THEN 'Open'
        WHEN 'P' THEN 'Processing'
        WHEN 'F' THEN 'Fulfilled'
      END
    display_name: Order Status
    synonyms:
      - status
      - fulfillment status

  - name: order_priority
    expr: "SPLIT(o_orderpriority, '-')[0]"
    display_name: Priority

  - name: customer_name
    expr: customer.c_name
    display_name: Customer Name

  - name: market_segment
    expr: customer.c_mktsegment
    display_name: Market Segment
    synonyms:
      - segment
      - industry

  - name: customer_nation
    expr: customer.nation.n_name
    display_name: Country
    synonyms:
      - nation
      - country

手順 6: パラメーターを定義する

パラメーターを使用すると、クエリを実行するときにメトリック ビューに値を渡すことができるため、1 つの定義で多数のクエリ バリアントを処理できます。 このチュートリアルで追加される discount パラメーターは、後でメジャーによって使用され、割引になった収益が計算されます。 パラメーターの既定値は 0 であるため、値を渡さないクエリは未集計の収益を返します。 パラメーターの詳細については、「 メトリック ビューでパラメーターを使用する」を参照してください。

カタログ ブラウザ ユーザーインターフェース

エディターの見出しで、[ パラメーターの追加] をクリックします。 名前として「 discount 」と入力し、既定値の 0 を入力し、 double データ型を選択します。

YAML エディター

parameters:
  - name: discount
    data_type: double
    default: 0

手順 7: 指標を定義する

尺度とは、ユーザーが分析したい計算のことです。 最初にアトミック メジャーを定義してから、コンポーザビリティを使用して、 MEASURE() 関数で以前に定義されたメジャーを参照する複雑なメトリックを構築します。 エージェント メタデータで説明されているように、各指標のdisplay_nameformat、およびsynonymsを設定します。 このチュートリアルでは、次の内容を追加します。

  • Atomic メジャー:order_count, total_revenueunique_customers であり、シンプルな集計によって構成要素を形成します。
  • 構成済みメジャー:avg_order_valuerevenue_per_customer。集計ロジックを複製するのではなく、 MEASURE() を使用して以前に定義されたメジャーを参照します。 total_revenue変更された場合、これらのメジャーは更新された定義を自動的に使用します。 コンポーザビリティを参照してください。
  • フィルター済みメジャー:open_order_revenueおよびfulfilled_order_revenue。これらはFILTER (WHERE ...)を使用して、個別のフィールドなしで条件付きメトリクスを作成します。
  • パラメーター化されたメジャー:discounted_revenue であり、discount パラメーターを参照して割引率を適用します。 メトリック ビューでのパラメーターの使用を参照してください。
  • ウィンドウ集計:t7d_customersユニーク顧客数の直近7日間のローリングカウントを計算します。 ウィンドウ メジャー パターンの詳細については、ウィンドウ メジャー を参照してください。

カタログ ブラウザ ユーザーインターフェース

エディターは、サンプル COUNT(*) 小節を自動的に追加します。 これを編集または削除し、メトリック ビューが次の内容を正確に定義するようにメジャーを追加してください。 メジャーごとに、追加またはプラス アイコン[追加] をクリックしてから式をビルダー モードまたはカスタム モードに設定します。 表示名書式、シノニムを次のように設定します。 通貨形式には小数点以下 2 桁、数値形式の場合は小数点以下 0 桁を使用します。

  1. order_count: ビルダー モードで、 [個別のカウント] 集計をo_orderkey で選択します。 表示名を Order Countに設定し、書式を数値に設定 します
  2. total_revenue: ビルダー モードで、o_totalprice集計を選択します。 表示名を Total Revenueに設定し、書式を 通貨 (USD)、シノニムを revenuesalesに設定します。
  3. discounted_revenue: カスタム モードで、「 SUM(o_totalprice * (1 - discount))」と入力します。 表示名を Discounted Revenueに設定し、書式を 通貨 (USD) に設定します。
  4. unique_customers: ビルダー モードで、 [個別のカウント] 集計をo_custkey で選択します。 表示名を Unique Customersに設定し、書式を数値に設定 します
  5. avg_order_value: カスタム モードで、「 MEASURE(total_revenue) / MEASURE(order_count)」と入力します。 表示名を Avg Order Value、書式を Currency (USD)、シノニムを AOV に設定します。
  6. revenue_per_customer: カスタム モードで、「 MEASURE(total_revenue) / MEASURE(unique_customers)」と入力します。 表示名を Revenue per Customerに設定し、書式を 通貨 (USD) に設定します。
  7. open_order_revenue: カスタム モードで、「 SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')」と入力します。 表示名を Open Order Revenueに設定し、書式を 通貨 (USD)、シノニムを backlogに設定します。
  8. fulfilled_order_revenue: カスタム モードで、「 SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')」と入力します。 表示名を Fulfilled Revenueに設定し、書式を 通貨 (USD) に設定します。
  9. t7d_customers: カスタム モードで、「 COUNT(DISTINCT o_custkey)」と入力します。 次に、[+ ウィンドウ] をクリックし、範囲order_dateと準加法集計を使用してtrailing 7 daylastウィンドウを構成します。 表示名を 7-Day Rolling Customersに設定し、書式を数値に設定 します

メジャー全体の手順については、「手順 5: メジャーを追加する」を参照してください。

YAML エディター

measures:
  - name: order_count
    expr: COUNT(DISTINCT o_orderkey)
    display_name: Order Count
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact

  - name: total_revenue
    expr: SUM(o_totalprice)
    display_name: Total Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - revenue
      - sales

  - name: discounted_revenue
    expr: SUM(o_totalprice * (1 - discount))
    display_name: Discounted Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact

  - name: unique_customers
    expr: COUNT(DISTINCT o_custkey)
    display_name: Unique Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact

  - name: avg_order_value
    expr: MEASURE(total_revenue) / MEASURE(order_count)
    display_name: Avg Order Value
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - AOV

  - name: revenue_per_customer
    expr: MEASURE(total_revenue) / MEASURE(unique_customers)
    display_name: Revenue per Customer
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact

  - name: open_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')
    display_name: Open Order Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - backlog

  - name: fulfilled_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')
    display_name: Fulfilled Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact

  - name: t7d_customers
    expr: COUNT(DISTINCT o_custkey)
    window:
      - order: order_date
        semiadditive: last
        range: trailing 7 day
    display_name: 7-Day Rolling Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0

完全な定義を確認する

上記の手順を完了すると、メトリック ビューには次の完全な定義が表示されます。

完全な YAML 定義を表示する
version: 1.1

parameters:
  - name: discount
    data_type: double
    default: 0

source: SELECT * FROM samples.tpch.orders

joins:
  - name: customer
    source: samples.tpch.customer
    'on': o_custkey = c_custkey
    joins:
      - name: nation
        source: samples.tpch.nation
        'on': c_nationkey = n_nationkey

filter: o_orderdate >= '1995-01-01'

comment: |-
  Sales analytics metric view for order performance analysis.
  Joins orders with customers and geography.
  Owner: Analytics Team
  Last updated: 2025-01-15

fields:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date
  - name: order_month
    expr: "DATE_TRUNC('MONTH', order_date)"
    display_name: Order Month
  - name: order_year
    expr: YEAR(order_date)
    display_name: Order Year
  - name: order_status
    expr: |-
      CASE o_orderstatus
        WHEN 'O' THEN 'Open'
        WHEN 'P' THEN 'Processing'
        WHEN 'F' THEN 'Fulfilled'
      END
    display_name: Order Status
    synonyms:
      - status
      - fulfillment status
  - name: order_priority
    expr: "SPLIT(o_orderpriority, '-')[0]"
    display_name: Priority
  - name: customer_name
    expr: customer.c_name
    display_name: Customer Name
  - name: market_segment
    expr: customer.c_mktsegment
    display_name: Market Segment
    synonyms:
      - segment
      - industry
  - name: customer_nation
    expr: customer.nation.n_name
    display_name: Country
    synonyms:
      - nation
      - country

measures:
  - name: order_count
    expr: COUNT(DISTINCT o_orderkey)
    display_name: Order Count
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: total_revenue
    expr: SUM(o_totalprice)
    display_name: Total Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - revenue
      - sales
  - name: discounted_revenue
    expr: SUM(o_totalprice * (1 - discount))
    display_name: Discounted Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: unique_customers
    expr: COUNT(DISTINCT o_custkey)
    display_name: Unique Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: avg_order_value
    expr: MEASURE(total_revenue) / MEASURE(order_count)
    display_name: Avg Order Value
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - AOV
  - name: revenue_per_customer
    expr: MEASURE(total_revenue) / MEASURE(unique_customers)
    display_name: Revenue per Customer
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: open_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')
    display_name: Open Order Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - backlog
  - name: fulfilled_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')
    display_name: Fulfilled Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: t7d_customers
    expr: COUNT(DISTINCT o_custkey)
    window:
      - order: order_date
        semiadditive: last
        range: trailing 7 day
    display_name: 7-Day Rolling Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
SQL を使用してメトリック ビューを作成する

カタログ エクスプローラーの外部でこの定義をビルドする場合は、次の SQL を実行してメトリック ビューを作成します。

CREATE OR REPLACE VIEW catalog.schema.tpch_sales_analytics
WITH METRICS
LANGUAGE YAML
AS $$
version: 1.1

parameters:
  - name: discount
    data_type: double
    default: 0

source: SELECT * FROM samples.tpch.orders

joins:
  - name: customer
    source: samples.tpch.customer
    'on': o_custkey = c_custkey
    joins:
      - name: nation
        source: samples.tpch.nation
        'on': c_nationkey = n_nationkey

filter: o_orderdate >= '1995-01-01'

comment: |-
  Sales analytics metric view for order performance analysis.
  Joins orders with customers and geography.
  Owner: Analytics Team
  Last updated: 2025-01-15

fields:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date
  - name: order_month
    expr: "DATE_TRUNC('MONTH', order_date)"
    display_name: Order Month
  - name: order_year
    expr: YEAR(order_date)
    display_name: Order Year
  - name: order_status
    expr: |-
      CASE o_orderstatus
        WHEN 'O' THEN 'Open'
        WHEN 'P' THEN 'Processing'
        WHEN 'F' THEN 'Fulfilled'
      END
    display_name: Order Status
    synonyms:
      - status
      - fulfillment status
  - name: order_priority
    expr: "SPLIT(o_orderpriority, '-')[0]"
    display_name: Priority
  - name: customer_name
    expr: customer.c_name
    display_name: Customer Name
  - name: market_segment
    expr: customer.c_mktsegment
    display_name: Market Segment
    synonyms:
      - segment
      - industry
  - name: customer_nation
    expr: customer.nation.n_name
    display_name: Country
    synonyms:
      - nation
      - country

measures:
  - name: order_count
    expr: COUNT(DISTINCT o_orderkey)
    display_name: Order Count
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: total_revenue
    expr: SUM(o_totalprice)
    display_name: Total Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - revenue
      - sales
  - name: discounted_revenue
    expr: SUM(o_totalprice * (1 - discount))
    display_name: Discounted Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: unique_customers
    expr: COUNT(DISTINCT o_custkey)
    display_name: Unique Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: avg_order_value
    expr: MEASURE(total_revenue) / MEASURE(order_count)
    display_name: Avg Order Value
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - AOV
  - name: revenue_per_customer
    expr: MEASURE(total_revenue) / MEASURE(unique_customers)
    display_name: Revenue per Customer
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: open_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')
    display_name: Open Order Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - backlog
  - name: fulfilled_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')
    display_name: Fulfilled Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: t7d_customers
    expr: COUNT(DISTINCT o_custkey)
    window:
      - order: order_date
        semiadditive: last
        range: trailing 7 day
    display_name: 7-Day Rolling Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
$$;

メトリック ビューを作成するその他の方法については、「メトリック ビュー の作成」を参照してください。

手順 8: メトリック ビューのクエリを実行する

ビジネスに優しい構文を使用してメトリック ビューのクエリを実行します。 MEASURE()関数は、選択したフィールドの粒度でメジャーを集計します。

ディメンションごとの指標の集計

この例では、複数のフィールドにまたがる指標を集計します。 顧客の国と市場セグメント別の総収益、注文数、平均注文値が返され、最初に最も高い収益でランク付けされます。

SELECT
  customer_nation,
  market_segment,
  MEASURE(total_revenue) AS total_revenue,
  MEASURE(order_count) AS order_count,
  MEASURE(avg_order_value) AS avg_order_value
FROM catalog.schema.tpch_sales_analytics
GROUP BY customer_nation, market_segment
ORDER BY total_revenue DESC;

毎月の傾向を分析する

この例では時刻フィールドをメジャーと結合して傾向を追跡します。 月別および注文ステータス別の合計収益と未完了注文収益 (バックログ) が返されます。

SELECT
  order_month,
  order_status,
  MEASURE(total_revenue) AS total_revenue,
  MEASURE(open_order_revenue) AS open_order_revenue
FROM catalog.schema.tpch_sales_analytics
GROUP BY order_month, order_status
ORDER BY order_month;

パラメーター値を渡す

メトリック ビューではパラメーターが定義されているため、それをテーブル値関数として呼び出し、クエリ時に値を渡すことができます。 次のクエリでは、10% 割引が適用されます。 discountの既定値は 0 であるため、引数を省略したクエリは未集計の収益を返します。

SELECT
  customer_nation,
  MEASURE(total_revenue) AS total_revenue,
  MEASURE(discounted_revenue) AS discounted_revenue
FROM catalog.schema.tpch_sales_analytics(discount => 0.1)
GROUP BY customer_nation
ORDER BY discounted_revenue DESC;

学習した内容

次を示すメトリック ビューを作成しました。

特徴 Example
スノーフレークスキーマ結合 注文から顧客、さらに国へのネストされた多対一結合
時間フィールド 日付、月、年単位の粒度
変換されたフィールド CASE ステートメント、 SPLIT 関数
簡単な対策 COUNTSUM
コンポーザビリティ 以前に定義された測定をavg_order_valueを使用してrevenue_per_customerMEASURE()参照します。
フィルター処理された指標 FILTER (WHERE ...) 条件付き集計の場合
ウィンドウ寸法 trailing 7 day を使用して7日間の顧客数をローリング更新する
パラメーター discount パラメーターを discounted_revenue メジャーに適用
エージェントメタデータ フィールドとメジャーの display_nameformatsynonyms

その他のリソース