本页介绍了可组合性在指标视图中的工作原理,并提供了一些示例,演示如何通过在单个视图中构建维度、度量值和联接来编写逻辑。
概述
指标视图是可组合的,这意味着可以定义分层的可重用逻辑。 可以创建基于现有维度和度量值构建的新定义,而不是从头开始编写每个定义。
通过可组合性,您可以:
- 在新维度中引用以前定义的维度
- 引用新度量值时,可以使用任何维度或以前定义的度量值
- 在指标视图中定义的联接中引用列
可组合性有助于避免重复、简化指标定义,并支持更复杂的分析,而无需每次使用原始 SQL。
指标可组合性
可组合性 是通过重用更简单的基础度量值来构建复杂指标的原则。 无需为每个派生 KPI 编写和维护复杂的嵌套 SQL 逻辑,只需定义一次核心“原子”度量值,然后在其他更复杂的计算中引用它们。 此方法极大地提高了语义层的一致性、可审核性和维护。
可组合性的基础是 MEASURE() 函数,该函数允许度量值定义引用在同一指标视图中定义的任何其他度量值。
定义可组合性的度量值
可组合性在指标视图的 YAML 部分 measures 实现。
| 度量值类型 | Description | Example |
|---|---|---|
| 原子 | 对源列进行简单直接聚合。 这些构成基础模块。 | SUM(o_totalprice) |
| 组合 | 使用 MEASURE() 函数以数学形式组合一个或多个其他衡量指标的表达式。 |
MEASURE(Total Revenue) / MEASURE(Order Count) |
示例:平均订单值(AOV)
若要计算 平均订单值(AOV),需要两个度量值: Total Revenue 和 Order Count。
source: samples.tpch.orders
measures:
# Total Revenue
- name: total_revenue
expr: SUM(o_totalprice)
comment: The gross total value of all orders.
display_name: 'Total Revenue'
# Order Count
- name: order_count
expr: COUNT(1)
comment: The total number of line items or orders.
display_name: 'Order Count'
# Composed Measure: Average Order Value (AOV)
- name: avg_order_value
# Defines AOV as Total Revenue divided by Order Count
expr: MEASURE(total_revenue) / MEASURE(order_count)
comment: Total revenue divided by the number of orders.
display_name: 'Avg Order Value'
在此示例中,如果更改的定义(例如添加要排除税的 total_revenue 筛选器),则 avg_order_value 会自动继承该更改,确保 AOV 指标与新的业务规则保持一致。
使用条件逻辑的可组合性
可以使用可组合性来创建复杂比率、条件百分比和增长率,而无需依赖窗口函数进行简单的周期内计算。
示例:履行率
若要计算 履行率 (已完成订单/订单总数),首先使用 FILTER 子句定义已完成订单的度量值。
source: samples.tpch.orders
measures:
# Total Orders (denominator)
- name: total_orders
expr: COUNT(1)
comment: Total volume of orders regardless of status.
# Fulfilled Orders (numerator)
- name: fulfilled_orders
expr: COUNT(1) FILTER (WHERE o_orderstatus = 'F')
comment: Only includes orders marked as fulfilled.
# Composed Measure: Fulfillment Rate (Ratio)
- name: fulfillment_rate
expr: MEASURE(fulfilled_orders) / MEASURE(total_orders)
display_name: 'Order Fulfillment Rate'
format:
type: percentage # Using semantic metadata to format as a percent
使用可组合性的最佳做法
-
首先定义原子度量值:在定义引用它们的任何度量值之前,请始终建立基本度量值(
SUM,COUNTAVG)。 -
使用
MEASURE()以保持一致性:在引用其他度量值的计算时,总是使用该MEASURE()函数。 请勿手动重复聚合逻辑(例如,避免使用SUM(a) / COUNT(b),如果已经存在用于分子和分母的度量值)。 -
确定可读性优先级:
expr组合度量值应类似于 KPI 的数学公式。 例如,MEASURE(Gross Profit) / MEASURE(Total Revenue)比单个复杂的 SQL 表达式更清晰、更易于审核。 -
结合语义元数据: 撰写比率后,使用 语义元数据 (如示例中所示
fulfillment_rate)自动将结果的格式设置为下游工具的百分比或货币。 请参阅 在指标视图中使用语义元数据。