首页/数据/数仓建模速查/SCD 类型 5:迷你维度叠加当前值外挂
维度与事实设计149 条

SCD 类型 5:迷你维度叠加当前值外挂

在类型 4 迷你维度的基础上,主维度再增加「当前迷你维键」列并以类型 1 覆盖,兼顾历史组合分析与按当前值过滤。

数仓建模速查数据更新于 2026-10-13

类型 5 是什么

类型 5 在迷你维度(类型 4)的基础上再外挂一层:主维表除了指向迷你维度历史键之外,再增加一列「当前迷你维键」,随属性变更以类型 1 的方式覆盖。事实行保存当时的迷你维键,主维的当前键始终指向最新组合。这样同一份历史事实既能按当时的属性组合分析,也能按现在的组合回溯筛选,两种口径不必重建两份数据。

基本信息

结构迷你维度 + 主维上的当前迷你维键
事实行存当时的迷你维键,永不改写
当前键更新属性变更时按类型 1 覆盖到最新组合
用途按当前等级筛选历史行为,或按当时组合还原历史
成本迷你维组合枚举要控制,否则基数逼近主维

典型使用场景

  • 按当前画像回溯:把老客户按现在的年龄段重新分群,分析历史购买行为
  • 按当时画像还原:事实行用当时的组合键,做当时口径的人群分析
  • 组合维度枚举:年龄段 × 收入段这类离散组合用迷你维度集中管理
  • 报告口径切换:同一批事实按当时与按当前两种分组同时出数
  • 画像版本对比:属性组合变化前后的行为差异对比
  • 避免稀疏列:把多个离散属性收进一张迷你维,主维保持稳定

结构示意

结构示意
dim_customer(customer_sk, name, current_profile_sk)   -- 当前键,类型1覆盖
dim_profile(profile_sk, age_band, income_band)         -- 迷你维组合枚举
fact_order(order_id, customer_sk, profile_sk, amt)     -- 存当时的 profile_sk

-- 按当时组合看历史行为
-- fact_order.profile_sk -> dim_profile

-- 按当前组合回溯历史行为
-- fact_order.customer_sk -> dim_customer.current_profile_sk -> dim_profile

两个键的读法

键位置口径
profile_sk事实行当时口径:事实发生时该客户所属组合
current_profile_sk主维表现行口径:客户当前所属组合
customer_sk事实行与主维代理键,用于关联主维拿当前键
age_band / income_band迷你维度组合属性,供分组与筛选
类型 5 最常见的错误是两个键混用:事实里明明存的是当时的组合键,报表却用主维的当前键去分组,于是「按当时口径」的结果实际按现在算了。查询前必须明确报的是哪一种口径,并在字段名或报表说明中写清。

易错点

  • 两个键混用:事实关历史键、报表却用当前键聚合,口径与标题不符
  • 迷你维组合枚举失控:属性自由组合后基数逼近主维,瘦身目的落空
  • 当前键未随属性变更同步覆盖:按当前口径出数时拿到过期组合
  • 事实行被回写成当前键:当时口径永久丢失,历史分析无法还原
  • 文档未标注两种口径:新人接手后按字段名直觉使用,报表口径长期矛盾

数据来源与参考

  • Kimball Group:缓慢变化维技术(Type 5)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌