比率指标的存储与计算
比率指标的存储与计算指比率永远只存分子与分母,展示时再相除。原因很直接:比率是不可加度量,任何维度下钻或重新聚合都必须回到分子分母重算,只存比率值会导致下钻时无法计算。分母为零必须兜底(nullif 或 case),否则除零直接报错;分子与分母各自的定义与来源要单独登记,避免出现「谁在前谁在后」的口径争议。
基本信息
| 存储方式 | 分子与分母分列存储 |
|---|---|
| 展示方式 | 相除计算,通常再乘 100 转百分比 |
| 下钻方式 | 分子分母各自聚合后再相除 |
| 零分母处理 | nullif 或 case,返回空值而不是报错 |
| 登记要求 | 分子分母口径、来源表与统计口径分别登记 |
典型使用场景
- 支付转化率:支付订单数除以提交订单数,下钻到渠道时要重算
- 毛利率:毛利除以收入,跨品类汇总不能对已算好的比率平均
- 人均指标:金额除以人数,分母为单位数时下钻会变
- 达成率:实际值除以目标值,目标口径需随维度变化
- 不良率:问题单数除以总单数,分母必须与分子同源同窗口
- 指标平台实现:所有比率型指标统一按分子分母存储,屏蔽错误用法
比率下钻
比率下钻
-- 分子分母分列存,下钻时各自聚合再相除
SELECT region,
sum(pay_cnt) AS num, -- 分子
sum(ord_cnt) AS den, -- 分母
sum(pay_cnt) / nullif(sum(ord_cnt), 0) AS pay_rate -- 相除,零分母返回空
FROM dws_order_day
WHERE dt = '2026-10-12'
GROUP BY region;
-- 错误做法:对已算好的比率求平均,忽略各分组规模权重
-- SELECT avg(pay_rate) FROM dws_order_day WHERE dt = '2026-10-12';常见比率的分子分母
| 指标 | 分子 | 分母 |
|---|---|---|
| 支付转化率 | 支付订单数 | 提交订单数 |
| 客单价 | 支付金额 | 支付订单数 |
| 毛利率 | 毛利 | 收入 |
| 退款率 | 退款订单数 | 成交订单数 |
| 人均浏览量 | 浏览量 | 去重访客数 |
分子分母要各自登记口径与来源,最典型的分歧是分子取成功支付、分母取全部订单,还是两边都取有效订单。差别看起来不大,但会让两个团队的同一个指标长期差几个百分点,而且谁也说不清谁对——因为口径从未写下来。