メインコンテンツまでスキップ

メトリクス ビューで詳細レベル (LOD) 式を使用する

詳細レベル(LOD)式を使用すると、クエリ内のディメンションとは独立して、集計を計算する粒度を指定できます。このページでは、メトリクス ビューで LOD 式を使用する方法を説明します。

詳細度表現とは何ですか?

詳細レベル式を使用すると、クエリに含まれるディメンションに関係なく、集計を計算する際に使用するディメンションを正確に指定できます。これにより、計算範囲をきめ細かく制御できます。

詳細度表現には2種類あります。

  • 固定詳細レベル :式自体で指定された事前定義済みのディメンションセットに基づいて集計を行い、クエリ内の他のディメンションは無視します。
  • より粗い詳細レベル :特定のディメンションをグループ化から除外することで、クエリよりも粗い粒度で集計します。

詳細度表現はいつ使用するか

詳細度表現は、次のような場合に使用します。

  • 合計に対する割合を計算します(例えば、各カテゴリーの総売上高に占める割合など)。
  • 個々の値をデータセット全体の集計値と比較する(例えば、売上高と平均売上高を比較する)。
  • 異なるグループ間で一定のセグメントレベルのメトリクスを作成します。

詳細レベルを固定

固定レベルの詳細表現は、クエリ内のディメンションを無視して、定義した粒度で集計します。 メトリクス ビューでは、固定 LOD 式は、 sourceクエリ内のPARTITION BY句を含むSQLウィンドウ関数を使用して実装されます。 コンピュート前の結果は、アイデンティティ次元として公開されます。

構文

固定 LOD 式は、 SQLウィンドウ関数を使用して、定義された粒度で集計をコンピュートします。

  1. sourceクエリにウィンドウ関数を含めます。

    SQL
    SELECT ..., <AGGREGATE_FUNCTION>(<column>) OVER (PARTITION BY <dim1>, <dim2>, ...) AS <lod_name>
    FROM <table>

    データセット全体で集計するには、 PARTITION BY句を省略し、 OVERの後に空の括弧を残します。

  2. 事前に計算された列を、 nameexprの両方が列名であるような、同一性ディメンションとして公開します。

    YAML
    dimensions:
    - name: <lod_name>
    expr: <lod_name>

固定レベルの詳細度を使用するタイミング

次のような場合は、固定レベルの詳細度表現を使用してください。

  • クエリのグループ化に依存しない : すべての用途にわたって静的パーティショニングを備えたメトリクス。
  • データセットレベルの集計値 :行レベルのグループ分けと比較したグローバル集計値(例:優先度別の総売上高の割合)。
  • マルチレベル階層 : 詳細レベルとロールアップレベルのメトリクスを同じメトリクス ビューで使用できます。

例:注文優先順位別の総売上高

各注文の売上をその優先グループの総売上と並べて比較できるメトリクス ビューを定義するとします。 次の例では、ソース クエリでコンピュートpriority_total_priceを作成し、それをアイデンティティ ディメンションとして公開します。

YAML
version: 1.1

source: |
SELECT
o_orderkey,
o_orderpriority,
o_totalprice,
o_orderdate,
SUM(o_totalprice) OVER (PARTITION BY o_orderpriority) AS priority_total_price
FROM samples.tpch.orders

dimensions:
- name: order_priority
expr: o_orderpriority
- name: order_date
expr: o_orderdate
- name: priority_total_price
expr: priority_total_price

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識別次元には、各優先度グループの固定合計値が格納されます。pct_of_priority_totalメジャーは、クエリが結果をどのようにグループ化するかに関係なく、個々の注文の売上を固定の合計で割ってパーセンテージを算出します。

注記

メジャー式で固定レベルの詳細ディメンションを参照する場合は、それを集計関数で囲みます。前の例のように、グループ内で値が一定の場合はANY_VALUE使用します。

固定レベルの詳細表現によるフィルタリング

固定詳細レベルの式は、クエリ時フィルタが適用される前に、 sourceクエリ内でコンピュートされます。 固定LOD計算にフィルタを適用するには、 sourceクエリ自体にフィルタ条件を含めます。

より粗いレベルのディテール

より粗いレベルの詳細表現は、パーティションから1つ以上のディメンションを除外することにより、クエリよりも粗い粒度で集約します。メトリクス ビューでは、 all範囲指定のウィンドウ メジャーを使用して、より粗い LOD 式が実装されます。

備考

実験段階

ウィンドウ測定は実験的なものです。

構文

パーティションから除外する各ディメンションについて、 range: allでウィンドウ尺度を定義します。

YAML
measures:
- name: <measure_name>
expr: <AGGREGATE_EXPRESSION>
window:
- order: <dimension_to_exclude>
range: all
semiadditive: last

複数の次元を除外するには、各次元に対応するエントリをwindow配列に追加します。

より粗いレベルのディテールを使用するタイミング

次のような場合は、より粗いレベルの表現を使用してください。

  • 動的グループ化 :クエリのグループ化に合わせて調整される集計値(たとえば、選択された任意のディメンションの合計に対する割合)。
  • フィルター対応の集計 : クエリ時のフィルターを尊重しながら、より粗い粒度でコンピュートします。

例:総売上高の割合

各注文優先度における総売上高の割合を計算するには:

YAML
version: 1.1

source: samples.tpch.orders

dimensions:
- 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_sales range: allを使用して、クエリ内のorder_priorityディメンションを無視して、すべての注文優先度の総計を計算します。
  • pct_of_total_sales 優先度の高い売上を総売上で割って、パーセンテージを算出します。

その他のリソース