详细信息级别(LOD)表达式允许您指定聚合计算的粒度,这些计算的粒度独立于查询中的维度。 本页介绍如何在指标视图中使用 LOD 表达式。
什么是详细表达式级别?
通过详细级别表达式,您可以精确指定进行计算聚合时要使用的维度,而不考虑查询中存在的维度。 这样就可以对计算范围进行精细控制。
详细信息表达式有两种类型的级别:
- 固定的详细信息级别:聚合表达式本身中指定的预定义维度集,忽略查询中的其他维度。
- 较粗的细节层次:通过在分组中排除特定维度,按照比查询更粗的粒度进行聚合。
固定的详细信息级别
固定级别的详细信息表达式以定义的粒度计算聚合,忽略查询中的维度。 在指标视图中,固定的 LOD 表达式是通过 SQL 窗口函数在 PARTITION BY 查询中的 source 子句实现的。 然后,将预计算结果呈现为身份维度。
何时使用固定级别的详细信息
需要满足以下条件时,请使用固定级别的详细信息表达式:
- 不依赖于查询分组:具有跨所有用途的静态分区的指标。
- 数据集级聚合:与行级别分组相比的全局聚合(例如,按优先级计算总销售额的百分比)。
- 多级层次:在同一视图中可以查看到详细级别和汇总级别的度量。
Syntax
固定 LOD 表达式使用 SQL 窗口函数 在定义的粒度上计算聚合。
在查询中包含
source窗口函数:SELECT ..., <AGGREGATE_FUNCTION>(<column>) OVER (PARTITION BY <dim1>, <dim2>, ...) AS <lod_name> FROM <table>若要聚合整个数据集,请忽略
PARTITION BY条件,并在OVER后留空括号。将预计算列公开为标识维度,其中
name和expr均为列名。dimensions: - name: <lod_name> expr: <lod_name>
示例:按订单优先级统计的总销售额
假设你想要定义一个指标视图,其中每个订单的销售量与其优先级组的总销售额进行比较。 以下示例在源查询中计算 priority_total_price ,并将其公开为标识维度:
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 筛选器条件。
更粗略的详细信息级别
通过排除分区中的一个或多个维度,以更大粒度聚合详细层次。 在指标视图中,粗略的 LOD 表达式是使用有范围规范的 窗口度量 实现的 all 。
重要
窗口度量值是 实验性的。
何时使用更粗糙的详细信息级别
如果需要,请使用更粗细的详细信息表达式级别:
- 动态分组:适应查询分组的聚合(例如,任何所选维度的总计百分比)。
- 筛选器感知聚合:在考虑查询时的筛选器范围内,以较粗粒度进行计算。
Syntax
对于要从分区中排除的每个维度,请使用以下命令定义窗口度量值 range: all:
measures:
- name: <measure_name>
expr: <AGGREGATE_EXPRESSION>
window:
- order: <dimension_to_exclude>
range: all
semiadditive: last
若要排除多个维度,请将条目添加到每个维度的 window 数组中。
示例:总销售额的百分比
计算每个订单优先级的总销售额百分比:
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将优先级级别的销售额除以总计以生成百分比。
其他资源
- 窗口测量:度量视图中用于表达低精度详情级别的基础机制。
- Unity 目录指标视图:指标视图组件和建模模式概述。
- 详细信息级别(LOD)表达式:AI/BI 仪表板中的 LOD 表达式。