4、指标分类与分层:原子指标、派生指标、复合指标的定义与关系、指标分层模型

聊到指标层设计,很多人一上来就画大宽表,恨不得把所有维度都塞进去。结果呢?维护成本高、口径对不上、业务方天天来吵架。我早期也踩过这个坑,后来才明白——指标必须先分类、再分层。这就像盖楼,你得先搞清楚哪些是砖头,哪些是预制板,哪些是装饰墙,才能把楼盖稳。

4.1 三类核心指标:原子、派生、复合

我们先从最基础的定义说起。我个人习惯把指标分成三个层次,每一层解决不同的问题。

4.1.1 原子指标

原子指标,说白了就是不可再拆的业务度量。它直接来自业务过程的事实,比如「订单金额」「用户数」「点击次数」。原子指标不依赖任何维度约束,它是派生和复合的基石。

原子指标的特征:

  • 直接来源于明细事实表
  • 通常是一个数值字段的聚合(SUM、COUNT、AVG)
  • 不包含任何维度限定条件
  • 命名规范:动词+度量单位,如「支付金额」「注册用户数」

举个例子。在电商场景里,「订单金额」就是原子指标。它只告诉你「所有订单的金额总和」,不区分是哪个品类、哪个渠道、哪个时间段。嗯,这里要注意——原子指标一旦定义,全局唯一。同一个业务含义,不能出现两个不同的原子指标。

4.1.2 派生指标

派生指标,就是在原子指标的基础上,加上维度限定和时间周期。你可以理解为:原子指标 + 维度修饰 + 时间周期 = 派生指标。

比如「2024年Q1的华东区手机品类支付金额」,就是由「支付金额」(原子指标)+「华东区」(维度修饰)+「手机品类」(维度修饰)+「2024年Q1」(时间周期)派生出来的。

我的经验:派生指标是业务方最常使用的指标。我曾经在一个项目中,业务方提了200多个指标需求,结果梳理下来,底层原子指标只有12个。剩下的全是派生组合。所以,把原子指标管好,派生指标自然就清晰了。

4.1.3 复合指标

复合指标,是多个派生指标或原子指标通过四则运算、比率计算得到的。比如「客单价 = 支付金额 / 支付用户数」「转化率 = 下单用户数 / 访问用户数」。

复合指标的核心价值在于:它反映的是业务效率或质量,而不是单纯的规模。业务方看复合指标,往往是为了做决策判断。

避坑指南:我曾经见过一个团队,把「毛利率」直接定义成原子指标,结果口径对不上——有人用含税金额算,有人用不含税金额算。后来我强制要求:复合指标必须显式引用底层原子指标,不允许直接写死数值。这样口径才能追溯。

4.2 三类指标的关系

它们之间的关系,可以用一句话概括:原子指标是根,派生指标是枝,复合指标是果。

具体来说:

  • 原子指标 → 派生指标:一对多关系。一个原子指标可以派生出无数个派生指标(不同维度、不同时间周期)。
  • 派生指标 → 复合指标:多对多关系。一个复合指标可能引用多个派生指标,一个派生指标也可能被多个复合指标引用。
  • 复合指标可以嵌套:比如「毛利率 = (收入 - 成本) / 收入」,其中「收入」和「成本」本身也可能是复合指标。

你想想看,如果底层原子指标定义错了,上层所有派生和复合指标都会跟着错。这就是为什么我总强调:指标治理,要从原子指标开始。

4.3 指标分层模型

有了分类,还得有分层。分层解决的是「指标应该放在哪一层」的问题。我常用的分层模型是这样的:

分层 包含内容 存储位置 使用场景
DWD(明细数据层) 原子指标对应的原始事实 明细事实表 数据开发、ETL加工
DWS(汇总数据层) 派生指标(轻度汇总) 汇总事实表 日常报表、自助分析
ADS(应用数据层) 复合指标、业务KPI 应用宽表、Cube 决策看板、高管驾驶舱

这个分层的好处是:每一层职责清晰,数据可追溯。DWD 层只负责存原始事实,不做任何业务逻辑加工;DWS 层做维度汇总,产出派生指标;ADS 层做业务计算,产出复合指标。

核心原则:

  • 原子指标只出现在 DWD 层
  • 派生指标只出现在 DWS 层
  • 复合指标只出现在 ADS 层
  • 不允许跨层引用(比如 ADS 直接读 DWD)

这样做,当业务方问「这个指标怎么算的」时,你可以从 ADS 一路追溯到 DWD,每一步都清清楚楚。

4.4 指标分层模型架构图

下面这张图,展示了我常用的指标分层模型。你可以看到数据从底层明细到上层应用的完整流转路径。

指标分层模型架构图 DWD 明细数据层 原子指标:订单金额、用户数、点击次数、支付金额 存储:明细事实表 | 粒度:单笔交易/单次行为 DWS 汇总数据层 派生指标:2024年Q1华东区手机品类支付金额 存储:汇总事实表 | 粒度:维度组合+时间周期 ADS 应用数据层 复合指标:客单价、转化率、毛利率、复购率 存储:应用宽表、Cube | 粒度:业务KPI 核心原则:原子指标只在DWD,派生指标只在DWS,复合指标只在ADS,不允许跨层引用

4.5 实战中的注意事项

理论讲完了,说点实际的。我在多个项目中落地这套模型,有几个坑想提醒你:

  1. 不要为了省事把派生指标直接定义成原子指标。比如「华东区支付金额」如果直接存成原子指标,那「华北区支付金额」怎么办?「华东区+手机品类」又怎么办?原子指标必须保持最细粒度。
  2. 复合指标的计算逻辑要显式声明。我习惯在元数据里记录复合指标的公式,比如「客单价 = 支付金额 / 支付用户数」,并且这两个引用必须是原子指标或派生指标的ID,不能是文字描述。
  3. 分层不是越多越好。有些人搞了五六层,结果数据流转链路太长,延迟高、维护难。我个人觉得,三层就够了——DWD、DWS、ADS。如果业务特别复杂,可以在DWS和ADS之间加一层DM(数据集市),但不要超过四层。

一个小技巧:在定义原子指标时,可以给它加一个「不可再分」的标签。这样后续任何人想新增派生指标,都必须先确认底层原子指标是否存在。我团队用这个规则,半年内减少了30%的重复指标。

最后说一句:指标分类和分层,不是为了炫技,而是为了让数据可管理、可追溯、可复用。你想想看,如果每个指标都独立定义、独立存储,那数据团队迟早会被业务方的「这个指标怎么和那个对不上」给淹没。所以,从今天开始,给你的指标分好类、分好层吧。