浅谈缓慢变化维度设计

本文详细探讨了数据仓库中处理维度变化的7种方法:类型1-4为基础设计,包括重写、增加新行、增加新属性和微型维度;类型5-7为混合设计,结合了基本方法以支持按当前状态追溯历史。类型1和2最为常见,类型4适用于属性变化频繁且可枚举或范围化的情况。复杂的设计如类型5-7主要解决按当前状态统计历史事实的难题,但可能增加维护难度和误用风险。
摘要由CSDN通过智能技术生成

目录

前言

基本设计方法

类型1:重写

类型2:增加新行

类型3:增加新属性

类型4:增加微型维度

混合设计方法

类型5:类型4与类型1组合

类型6:类型1和类型2组合

类型7:类型1和类型2组合

结语


前言

维度表属性随着时间而变化,好的数据模型应具有追踪维度变化的能力。Kinball在维度建模工具箱一书中提出7种缓慢变化维度(Slowly changing Dimension, SCD)处理技术。本文逐一详解7种设计方法,其中类型1-4为基本设计方法,类型5-7由类型1-4相互组合形成。

维度属性不变的情况,在Kinball理论中成为类型0情况,如一个人的出生日期,这类属性一旦有值,将不在变化,可以视为常量。

为辅助讲解,本文设定一个案例场景:为统计不同员工的计算资源消耗情况,存在一张员工维度表和一张任务计算事实表。

其中员工基本属性:

代理键 员工编号 姓名 username 部门名称 ···

事实表属性:

任务id 执行人 资源消耗 ···

 员工的部门可能改变,接下来讨论员工部门改变后,数据如何处理。


基本设计方法

类型1:重写

针对变化的属性,直接重写原有的值。

例如,张三原部门为“数据开发1组”,在2021年1月1日部门变动为“数据开发2组”,对应数据的调整为:

改变前:

代理键 员工编号 姓名 username 部门名称
1009 NO001 张三 zhangsan1 数据开发1组

改变后:

代理键 员工编号 姓名 username 部门名称
1009 NO001 张三 zhangsan1 数据开发2组

新的部门值覆盖原有的值,代理键不变,事实表关联同一个键值。

这种实现方式无论ETL操作还是业务使用均很简单,但是缺点也很明显,无法追踪数据的历史状态。如分析人员希望1月1号之前的数据统计在“数据开发1组”部门中,则无法实现。

同时对于下游BI应用或汇总表,维度变化后需要重刷下游,否则进行上卷/下钻操作时可能出现数据不一致情况。

类型2:增加新行

针对每个变化的属性,增加一个新行。也被称为拉链表,在业内广泛使用。

属性变化时,保留原有记录同时使用最新值新增一条记录。维表设计时需额外增加几列,分别表示当前记录的生效起始时间、生效结束时间和是否当前行标识。

改变前:

代理键 员工编号 姓名 username 部门名称 行生效日期 行失效日期 是否当前行
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值