半累加指标

背景

很多用户经常使用时点值进行数据分析,例如余额指标——看最新时间点的值才有意义。但"最新时间点"的计算需要明确分组粒度:是按所有维度分组取最新值后聚合,还是按部分维度分组取最新值后聚合?不同业务场景需要不同的分组逻辑。V9.23已支持按"所有指标关联维度(剔除日期)"自动分组,但不支持灵活配置,无法满足更复杂的业务场景。

价值

  • 覆盖更多场景:从"只支持按全部分组统一取最新值"升级为支持自定义分组维度,余额、库存、水位等不可累加类型的指标的计算更加灵活准确。
  • 从日期扩展到更多维度:不可累加维度从固定的"统计日期"扩展到支持自定义维度(如考试次数等),适用的业务范围更广。

使用说明

  • 原时点属性改名为半累加指标。半累加指标指的是在部分维度上具备累加性(即可以进行求和、平均等聚合操作),而在其他维度上不具备此属性,仅取特定值(最大 / 最小)的指标。例如,余额可以在客户维度上进行累加,但在时间维度上直接累加则不适用,因为余额通常表示某一特定时点的快照。
  • 新建指标时,若需要配置不可累加维度,可以点击开启。
    • 不可累加维度:必填,默认选择统计日期。指的是计算时按哪个维度取最大或最小值,若为日期类型,则可以理解为时原来的时点属性。
    • 计算取值方式:默认选择最大值。指的是按不可累加维度(例如:日期/考试次数等),取最大值还是取最小值。
    • 计算维度分组:有三个选项,无、跟随关联维度、自定义。指的是按什么维度进行分组,分组后按不可累计加维度取最大或最小值。选择无,则不按维度分组直接取所有数据的最大或最小值。选择跟随关联维度则于关联维度所选维度保持一致。选择自定义则可以选择所有数据模型中的维度字段。不可选择于不可累加维度一样的字段。
  • 计算逻辑: MEMBER_CALC( 指标聚合函数(指标), 不可累加维度 = {INCLUDE 计算分组维度: 计算取值方式(不可累加维度)} )

半累加指标 - 图1

场景说明1

指标: 账户余额

  • 不可累加维度:统计日期(时间上不能累加)

  • 计算取值方式:最大值(取最新时间的值)

  • 计算维度分组:客户ID + 账户类型

用户问: "每个客户的账户余额是多少?"

计算分两步骤

第一步(内层)——按分组维度取最新值

  • 按 {客户ID, 账户类型} 这个最细粒度,对每个分组取最新日期的余额(最大值): 分组维度 = 用户提问给的维度(客户ID) + 配置的维度分组(客户ID + 账户类型) = 取交集 → 但这里实际作用是最细分组粒度:{客户ID, 账户类型},按这个组取每个组在统计日期维度上最新的值。

半累加指标 - 图2

第二步(外层)——按用户想问的维度聚合

  • 用户只问了"每个客户",所以按客户ID聚合:

半累加指标 - 图3

总结:先按分组维度 + 不可累加维度做最细粒度分组,在每个组里取极值,然后再按用户的查询维度做正常聚合。

场景说明2

指标:SUM(库存量)

  • 不可累加维度:统计日期

  • 计算取值方式:最大值(取最新时间的值)

  • 计算维度分组:仓库所在区域

  • 指标本身关联维度:仓库、仓库类型、仓库所在区域、统计日期

用户问: "每个仓库类型的最新库存是多少?"

  • 查询维度:仓库类型
  • 计算维度分组:所在区域
  • 内层分组 = {仓库类型, 所在区域} ← 查询维度 ∪ 计算分组维度

第一步:按内层分组取最大日期对应的值

第二步:按查询维度聚合