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 指标分层模型架构图
下面这张图,展示了我常用的指标分层模型。你可以看到数据从底层明细到上层应用的完整流转路径。
4.5 实战中的注意事项
理论讲完了,说点实际的。我在多个项目中落地这套模型,有几个坑想提醒你:
- 不要为了省事把派生指标直接定义成原子指标。比如「华东区支付金额」如果直接存成原子指标,那「华北区支付金额」怎么办?「华东区+手机品类」又怎么办?原子指标必须保持最细粒度。
- 复合指标的计算逻辑要显式声明。我习惯在元数据里记录复合指标的公式,比如「客单价 = 支付金额 / 支付用户数」,并且这两个引用必须是原子指标或派生指标的ID,不能是文字描述。
- 分层不是越多越好。有些人搞了五六层,结果数据流转链路太长,延迟高、维护难。我个人觉得,三层就够了——DWD、DWS、ADS。如果业务特别复杂,可以在DWS和ADS之间加一层DM(数据集市),但不要超过四层。
一个小技巧:在定义原子指标时,可以给它加一个「不可再分」的标签。这样后续任何人想新增派生指标,都必须先确认底层原子指标是否存在。我团队用这个规则,半年内减少了30%的重复指标。
最后说一句:指标分类和分层,不是为了炫技,而是为了让数据可管理、可追溯、可复用。你想想看,如果每个指标都独立定义、独立存储,那数据团队迟早会被业务方的「这个指标怎么和那个对不上」给淹没。所以,从今天开始,给你的指标分好类、分好层吧。