派生属性是什么
派生属性指能从维度已有字段按固定规则算出来的属性:由出生日期得年龄段、由订单金额得价格带、由邮编或经纬度得大区归属。它不引入新的业务事实,价值在于把散落在各报表里的 CASE WHEN 收敛成唯一一份口径。做法是在维度加工层一次算好并物化成列,下游直接取用,不再各自判断区间。
基本信息
| 典型属性 | 年龄段 / 价格带 / 区域归类 / 会员等级 |
|---|---|
| 计算位置 | 维度加工层一次算好,物化成列 |
| 前提条件 | 原始字段必须保留(出生日期、金额原值) |
| 规则登记 | 分段边界写进数据字典并标注生效日期 |
| 变更处理 | 规则调整后重算派生列,已发布报表单独评估 |
| 常见引擎 | Hive / Spark SQL / MySQL 8 等数仓引擎 |
典型使用场景
- 统一口径:多个报表都要按年龄段统计时,只保留维度里这一份定义
- 简化查询:下游直接按 age_band 过滤,不必每条 SQL 重写区间判断
- BI 建模:拖字段即可出图,不用在报表工具里维护计算字段
- 用户分群:按价格带、活跃分层做圈选与投放名单
- 跨系统对齐:把业务系统口径与报表口径的分段边界一次对齐
分段与价格带示例
分段与价格带示例
SELECT customer_id,
CASE WHEN age < 18 THEN '未成年'
WHEN age < 30 THEN '18-29'
WHEN age < 45 THEN '30-44'
ELSE '45+' END AS age_band, -- 边界左闭右开,段与段不重叠
CASE WHEN amt < 100 THEN 'P1'
WHEN amt < 1000 THEN 'P2'
ELSE 'P3' END AS price_band
FROM stg_customer
WHERE age IS NOT NULL; -- 空值单独落「未知」段,不要漏进 ELSE设计与治理要点
| 要点 | 做法 | 忽略后果 |
|---|---|---|
| 分段边界 | 只在一处定义,登记生效时间 | 同一分段在不同报表结果不一致 |
| 空值处理 | 显式归入「未知」分段 | 由 ELSE 兜底会把空值混进最高段 |
| 原始值 | 保留出生日期、金额原值 | 规则调整后无法回溯重算 |
| 规则版本 | 记录规则生效日期 | 跨期对比时新旧边界混算 |
分段边界变更属于口径变更:历史事实要不要按新规则重算,取决于业务是否要求跨期可比。若要求可比,应同时保留新旧两套派生列,而不是直接覆盖旧列。
候选值集合有限且稳定的属性(年龄段个数不随数据增长)适合物化成维度列;候选值会随业务无限增长的(如自定义标签)应放到标签表,否则维度列会不断膨胀。