指标模型设计
问题
如何设计一套规范的指标模型?原子指标和派生指标有什么区别?
答案
指标分层体系
| 分类 | 定义 | 示例 |
|---|---|---|
| 原子指标 | 业务过程 + 度量(不可再拆分) | 支付金额、订单数 |
| 派生指标 | 原子指标 + 统计周期 + 修饰词 | 近 7 天新用户支付金额 |
| 复合指标 | 多个指标的四则运算 | 客单价 = 支付金额 / 订单数 |
原子指标定义规范
| 字段 | 说明 | 示例 |
|---|---|---|
| 指标英文名 | 唯一标识 | pay_amount |
| 指标中文名 | 业务名称 | 支付金额 |
| 业务过程 | 来自哪个事实 | 支付完成 |
| 度量方式 | 聚合函数 | SUM |
| 数据类型 | 值类型 | DECIMAL(18,2) |
派生指标 = 原子 + 修饰 + 时间
派生指标 = 原子指标 + 统计周期 + 统计粒度 + 修饰词
近7天_新用户_支付金额
= SUM(pay_amount)
+ 时间:近 7 天
+ 粒度:按用户
+ 修饰词:is_new_user = 1
-- 派生指标的 SQL 表达
SELECT
user_id,
SUM(pay_amount) AS pay_amount_7d_new
FROM dwd.order_pay
WHERE dt >= DATE_SUB(CURRENT_DATE, 7)
AND is_new_user = 1
GROUP BY user_id;
为什么要拆分原子和派生?
- 一致性:同一个原子指标(如支付金额),不同团队不会定义不同的计算方式
- 可复用:一个原子指标可以衍生出多个派生指标
- 可管理:在指标平台上统一注册和管理
常见面试问题
Q1: UV 是原子指标还是派生指标?
答案:
UV(独立访客数)本身是原子指标:COUNT(DISTINCT user_id)近 7 天首页 UV是派生指标:原子(UV) + 时间(近7天) + 修饰(页面=首页)
Q2: 指标口径不一致怎么办?
答案:
- 建立指标字典,统一定义每个指标的计算逻辑
- 在指标平台上注册,所有人引用同一套定义
- 用 dbt 等工具将指标物化为统一的模型