メトリクス ビューで詳細レベル (LOD) 式を使用する
Level of detail(LOD)式を使用すると、クエリー内のフィールドとは独立して集計が計算される粒度を指定できます。このページでは、メトリクスビューでの LOD 式の使用方法について説明します。
詳細度表現とは何ですか?
詳細レベル表現を使用すると、クエリに含まれるフィールドに関わらず、集計を計算する際に使用するフィールドを正確に指定できます。これにより、計算の範囲をきめ細かく制御できます。
詳細度表現には2種類あります。
- 「 固定詳細度 」:式自体で指定された事前定義された一連のフィールドを集計し、クエリ内の他のフィールドは無視されます。
- より粗い詳細レベル :特定のフィールドをグループ化から除外することで、クエリーよりも粗い粒度で集計します。
詳細レベルを固定
固定詳細レベル表現は、クエリ内のフィールドを無視して、定義した粒度で集計をコンピュートします。メトリクスビューでは、固定LOD式は、列定義のexprフィールドに直接、PARTITION BY句を伴うSQLウィンドウ関数を使用して定義されています。
固定レベルの詳細度を使用するタイミング
次のような場合は、固定レベルの詳細度表現を使用してください。
- クエリのグループ化に依存しない : メトリクスはすべての用途にわたって静的パーティショニングを使用します。
- データセットレベルの集計値 :行レベルのグループ分けと比較したグローバル集計値(例:優先度別の総売上高の割合)。
- マルチレベル階層 : 詳細レベルとロールアップレベルのメトリクスを同じメトリクス ビューで使用できます。
構文
固定 LOD 式は、定義された粒度で集計を計算するために、SQL ウィンドウ関数を使用します。フィールド定義のexprフィールドにウィンドウ関数を直接配置します。
fields:
- name: <lod_name>
expr: <AGGREGATE_FUNCTION>(<column>) OVER (PARTITION BY <dim1>, <dim2>, ...)
データセット全体で集計するには、 PARTITION BY句を省略し、 OVERの後に空の括弧を残します。
例:注文優先順位別の総売上高
たとえば、各注文の売上をその優先グループの総売上と比較できるメトリクスビューを定義するとします。次の例では、ソースクエリで priority_total_price をコンピュートし、IDフィールドとして公開します。
version: 1.1
source: samples.tpch.orders
fields:
- name: order_priority
expr: o_orderpriority
- name: order_date
expr: o_orderdate
- name: priority_total_price
expr: SUM(o_totalprice) OVER (PARTITION BY o_orderpriority)
measures:
- name: total_sales
expr: SUM(o_totalprice)
- name: pct_of_priority_total
expr: SUM(o_totalprice) / ANY_VALUE(priority_total_price)
priority_total_priceフィールドは、各優先度グループの固定合計をそのexprフィールドで直接定義します。pct_of_priority_total メジャーは、クエリが結果をどのようにグループ化するかにかかわらず、個別の注文売上をその固定合計で割ってパーセンテージを算出します。
メジャー式で固定詳細レベルフィールドを参照する場合、集計関数で囲みます。ANY_VALUEは、前の例のように、グループ内で値が一定の場合に使用します。
固定レベルの詳細表現によるフィルタリング
固定詳細レベルの式は、クエリ時フィルターが適用される前にコンピュートされます。 固定LOD計算にフィルタを適用するには、 CASEステートメントまたはFILTER句を使用して、ウィンドウ関数式内にフィルタ条件を含めます。
より粗いレベルのディテール
より粗い粒度の詳細式は、パーティションから1つ以上のフィールドを除外することにより、クエリよりも粗い粒度で集計します。メトリクス ビューでは、より粗い LOD 表現は、「ウィンドウメジャー」をall 範囲指定で使用して実装されます。
実験段階
ウィンドウ測定は実験的なものです。
より粗いレベルのディテールを使用するタイミング
次のような場合は、より粗いレベルの表現を使用してください。
- 動的グループ化 :クエリのグループ化に適応する集計(例:選択された任意のフィールドにおける全体の割合)。
- フィルター対応の集計 : クエリ時のフィルターを尊重しながら、より粗い粒度でコンピュートします。
構文
パーティションから除外する各フィールドについて、range: allを使用してウィンドウメジャーを定義します。
measures:
- name: <measure_name>
expr: <AGGREGATE_EXPRESSION>
window:
- order: <field_to_exclude>
range: all
semiadditive: last
複数のフィールドを除外するには、各フィールドについてwindow配列にエントリを追加します。
例:総売上高の割合
各注文優先度における総売上高の割合を計算するには:
version: 1.1
source: samples.tpch.orders
fields:
- name: order_priority
expr: o_orderpriority
measures:
- name: total_sales
expr: SUM(o_totalprice)
- name: all_priorities_sales
expr: SUM(o_totalprice)
window:
- order: order_priority
range: all
semiadditive: last
- name: pct_of_total_sales
expr: SUM(o_totalprice) / MEASURE(all_priorities_sales)
この例では:
total_salesクエリのグループ化レベルで集計します。all_priorities_salesrange: allを使用して、クエリ内のorder_priorityフィールドを無視し、すべての注文優先度における総計をコンピュートします。pct_of_total_sales優先度の高い売上を総売上で割って、パーセンテージを算出します。
その他のリソース
- ウィンドウ測定: メトリクス ビューでのより粗い詳細レベルの式の基礎となるメカニズム。
- Unity Catalogメトリクス ビュー: メトリクス ビューのコンポーネントとモデリング パターンの概要。
- 詳細レベル(LOD)式:AI/BIダッシュボードにおけるLOD式。