一致性维度是什么
一致性维度是在多个事实表之间共享、且定义与取值完全一致的维度:同一个名称对应同一套编码、同一套层级、同一套口径。它让订单、支付、库存这些不同业务过程能在同一维度上对齐汇总与对比,是星座模型成立的前提。
基本信息
| 核心要求 | 同名、同定义、同取值 |
|---|---|
| 载体形式 | 公共维度表,或定义一致的视图与同构表 |
| 收益 | 跨过程下钻、汇总与对比,指标可对齐 |
| 维护方式 | 统一由维度 Owner 维护,变更走评审 |
| 判定标准 | 同一条维度记录在各过程解析出的含义相同 |
典型使用场景
- 跨过程分析:下单与支付按同一渠道维度对齐,比较转化与金额
- 总线矩阵落地:矩阵中的列必须是一致性维度,否则只是同名列
- 多源合并:客户维度来自多个系统,需要统一的编码与层级
- 指标对齐:同一指标的分子分母来自不同事实表,维度不一致就无法相除
- 权限控制:按一致的组织或门店维度统一做行级权限
跨事实表共享维度
跨事实表共享维度
-- 订单事实与库存事实都关联同一张商品维度
-- 因此可以按同一类目口径对比销量与库存
SELECT d.cat_l1_name,
sum(o.qty) AS sale_qty, -- 来自订单事实
sum(i.stock_qty) AS stock_qty -- 来自库存事实
FROM dim_product d -- 一致性维度只关联一次
LEFT JOIN fact_order o ON o.product_sk = d.product_sk
LEFT JOIN fact_stock i ON i.product_sk = d.product_sk
GROUP BY d.cat_l1_name;
-- 前提:两张事实表的 product_sk 指向同一套维度版本与类目口径相似情况辨析
| 情形 | 是否一致性维度 | 处理方式 |
|---|---|---|
| 同名、同定义、同取值 | 是 | 直接共享,可跨过程汇总 |
| 同名不同口径 | 否 | 先统一口径,或显式区分为两个维度 |
| 同义不同名 | 否 | 统一命名后再共享,否则使用者会误以为无关 |
| 取值一致但编码不同 | 否 | 建立映射关系,统一到一套代理键 |
一致性不等于物理上必须是同一张表。允许通过视图、同构表或统一加工流程实现,关键是取值与定义严格一致;物理复制而各自维护通常很快出现取值漂移。
判断维度是否真一致的实用方法:把它关联到两个不同事实表上分别汇总,结果能对得上且能互相解释。如果对不上,说明只是同名列而不是一致性维度。