半可加度量是什么
半可加度量指在部分维度上可加、在时间维度上不可加的量:账户余额在不同账户之间可以相加得到总余额,但把某账户连续 30 天的余额加总没有任何业务含义;库存、人数、在保件数同理。这类度量必须配套口径声明——期末、期初、日均还是最大值,不同口径算出的数字不同,报表要明确标注而不能指望使用方默认理解。
基本信息
| 不可加维度 | 时间(跨时间求和无语义) |
|---|---|
| 常见口径 | 期末值、期初值、日均、区间最大值 |
| 实现方式 | 窗口函数、取特定时点、或预先算好 |
| 存储形态 | 通常落在周期快照事实表上 |
| 声明要求 | 口径写入字段名或指标注释,禁止隐式默认 |
典型使用场景
- 账户余额:期末余额与日均余额是财务与风控的两个不同指标
- 库存水平:期末库存、日均库存与周转天数
- 会员人数:月末在册人数不可跨月相加
- 在保与在职:保险在保件数、企业在职人数按月统计
- 设备在线数:每日在线设备数,月度看月日均或月末值
- 授信与额度:剩余额度按期末取值,跨月求和没有意义
期末、期初与日均
期末、期初与日均
-- 期末余额:取区间内最后一个有数据的日期
SELECT account_id, balance
FROM fact_account_balance_daily
WHERE dt = (SELECT max(dt) FROM fact_account_balance_daily
WHERE dt <= '2026-10-11');
-- 期初余额:取区间内第一个有数据的日期
SELECT account_id, balance
FROM fact_account_balance_daily
WHERE dt = (SELECT min(dt) FROM fact_account_balance_daily
WHERE dt >= '2026-10-01');
-- 日均余额:按账户先平均,再跨账户汇总
SELECT avg(daily_balance) FROM (
SELECT account_id, avg(balance) AS daily_balance
FROM fact_account_balance_daily
WHERE dt BETWEEN '2026-10-01' AND '2026-10-11'
GROUP BY account_id) t;口径与含义对照
| 口径 | 取值方式 | 常见用途 |
|---|---|---|
| 期末值 | 区间最后一天的快照 | 对外披露、监管报送 |
| 期初值 | 区间第一天的快照 | 与上期期末对齐核对 |
| 日均值 | 按实体先平均再汇总 | 资源占用、成本分摊 |
| 区间最大值 | 取区间内峰值 | 容量规划、风控峰值 |
| 区间平均余额合计法 | 用日均余额之和算利息基数 | 利息与费用计算 |
判断某度量是否半可加,最快的办法是问一句「跨时间加总讲不讲得通」。讲不通的都要显式给口径,并在报表标题或字段名里体现,例如写成期末余额、日均余额,而不是笼统的余额。