重要
此功能为试验性的。
利用窗口度量值,您可以在指标视图中通过窗口化、累积或半累加聚合来定义度量值。 这些类型的度量值允许更复杂的计算,例如移动平均值、期间内更改和运行总计。 本页包含一些实际示例,演示如何在指标视图中使用窗口度量值。
定义窗口度量值
窗口度量值允许使用开窗聚合、累积聚合或半累加聚合定义度量值。 窗口度量值包括以下必需值:
次序: 确定窗口排序的维度。
范围: 定义窗口的范围,例如后续、累积或所有数据。 可能的范围值包括:
-
current
: 包括窗口排序值等于当前行值的行。 -
cumulative
:包括窗口排序值小于或等于当前行值的所有行。 -
trailing <value> <unit>
: 包括当前行中按指定时间单位数向后移动的行,例如trailing 3 months
。 这不包括当前单元。 例如,trailing 3 months
排除当前月份。 -
leading <value> <unit>
: 从当前行开始,包括往后按指定的时间单位数的行,例如leading 7 days
。 -
all
: 包括所有行,而不考虑窗口值。
-
semiadditive: 指定在查询
GROUP BY
中不包含订单字段时如何汇总度量值。 可取值包括first
和last
。
尾随、移动或前导窗口度量示例
以下示例计算过去 7 天内尾随或前导时间窗口的度量值。
version: 0.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'
dimensions:
- name: date
expr: o_orderdate
measures:
- name: t7d_customers
expr: COUNT(DISTINCT o_custkey)
window:
- order: date
range: trailing 7 day
semiadditive: last
对于此示例,以下配置适用:
次序:date
指定日期维度对窗口进行排序。
范围: 该 trailing 7 day
规范将窗口定义为每个日期之前的 7 天,不包括日期本身。
semiadditive:last
指示使用 7 天窗口中的最后一个值。
环比窗口期度量示例
计算从上一个周期到当前周期的更改。
version: 0.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'
dimensions:
- name: date
expr: o_orderdate
measures:
- name: previous_day_sales
expr: SUM(o_totalprice)
window:
- order: date
range: trailing 1 day
semiadditive: last
- name: current_day_sales
expr: SUM(o_totalprice)
window:
- order: date
range: current
semiadditive: last
- name: day_over_day_growth
expr: (MEASURE(current_day_sales) - MEASURE(previous_day_sales)) / MEASURE(previous_day_sales) * 100
对于此示例,适用以下条件:
使用了两个窗口度量值:一个用于计算前一天的总销售额,另一个用于计算当天的总销售额。
第三个度量值计算当前和前几天之间的百分比变化(增长)。
累计(持续更新的)总值示例
计算每个时间点的运行总度量值。
version: 0.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'
dimensions:
- name: date
expr: o_orderdate
measures:
- name: running_total_sales
expr: SUM(o_totalprice)
window:
- order: date
range: cumulative
semiadditive: last
以下详细信息突出显示此定义的关键部分:
次序:date
确保 date
维度对窗口进行排序。
范围:cumulative
将窗口定义为所有数据,包括每个日期。
semiadditive:last
确保在维度上进行聚合时使用最终的累积值。
日期期间度量值示例
计算给定时间段内的运行总计。
version: 0.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1997-01-01'
dimensions:
- name: date
expr: o_orderdate
- name: year
expr: DATE_TRUNC('year', o_orderdate)
measures:
- name: ytd_sales
expr: SUM(o_totalprice)
window:
- order: date
range: cumulative
semiadditive: last
- order: year
range: current
semiadditive: last
以下详细信息突出显示此定义的关键部分:
使用两个窗口测量:一个用于在
date
维度上进行累积求和,另一个用于将求和限制在current
年份内。累积总和受
year
维度限制,以检查是否仅在当前年份内计算。
半累加性度量示例
计算一个指标,该指标不应在特定维度上进行求和,比如银行余额。
dimensions:
- name: date
expr: date
- name: customer
expr: customer_id
measures:
- name: semiadditive_balance
expr: SUM(balance)
window:
- order: date
range: current
semiadditive: last
以下详细信息突出显示此定义的关键部分:
次序:
date
date
确保维度对窗口进行排序。范围:
current
将窗口限制为一天,且不跨天聚合。semiadditive:
last
确保在聚合多天时返回最近的余额。
注释
此时间窗口仍然对所有客户的余额进行求和,以获得每天的总体余额。
查询窗口度量值
可以使用窗口度量值查询指标视图,就像任何其他指标视图一样。 以下示例查询指标视图中的数据:
SELECT
state,
DATE_TRUNC('month', date),
MEASURE(t7d_distinct_customers) as m
FROM sales_metric_view
WHERE date >= DATE'2024-06-01'
GROUP BY ALL