在指标视图中使用窗口度量值

重要

此功能为试验性的

利用窗口度量值,您可以在指标视图中通过窗口化、累积或半累加聚合来定义度量值。 这些类型的度量值允许更复杂的计算,例如移动平均值、期间内更改和运行总计。 本页包含一些实际示例,演示如何在指标视图中使用窗口度量值。

定义窗口度量值

窗口度量值允许使用开窗聚合、累积聚合或半累加聚合定义度量值。 窗口度量值包括以下必需值:

  • 次序: 确定窗口排序的维度。

  • 范围: 定义窗口的范围,例如后续、累积或所有数据。 可能的范围值包括:

    • current 包括窗口排序值等于当前行值的行。
    • cumulative:包括窗口排序值小于或等于当前行值的所有行。
    • trailing <value> <unit> 包括当前行中按指定时间单位数向后移动的行,例如 trailing 3 months。 这不包括当前单元。 例如, trailing 3 months 排除当前月份。
    • leading <value> <unit> 从当前行开始,包括往后按指定的时间单位数的行,例如 leading 7 days
    • all 包括所有行,而不考虑窗口值。
  • semiadditive: 指定在查询 GROUP BY中不包含订单字段时如何汇总度量值。 可取值包括 firstlast

尾随、移动或前导窗口度量示例

以下示例计算过去 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

以下详细信息突出显示此定义的关键部分:

  • 次序:datedate确保维度对窗口进行排序。

  • 范围: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