数据仓库中,缓慢变化维的一种设计方案

数据仓库中,缓慢渐变维度是一种经常使用到的方案。

“渐变”,即为逐渐变化的维度,因为日常应用中,维度属性是随时可能发生变化的,而BI统计时,又可能是需要历史某个时间点的维度属性值。所以这种情况下,就需要我们记录下这个变化信息,于是渐变维度就出现了。

“缓慢”两个字,也是需要注意的,仅有缓慢变化的才适用于这种方案。如果是每天每时每刻都在变化的就不适合这种方案了,因为那样会产生太多太多的记录,导致维度表记录过多,影响效率。


下面就先来看一下它的表结构设计:


与渐变相关的几个字段:

SCD_StartDate - 该记录生成时间

SCD_EndDate - 该记录废弃时间

SCD_IsActive - 该记录是否当前激活状态

SCD_Version- 该记录当前版本号

GetItAct - 数据更新时间

外键可以先不看,它与缓慢渐变维度关系不大。


业务字段:

DeaprtNo为业务主键,一般不会发生变化。

DepartName为部门名称,不过我们并不关心它的历史状态,所以需设置为实时更新。其他ENName类似。

DepartType我们关注它的历史,所以需用ETL工具,设置为渐变更新。

ParentDepartID同样关注历史,需设置渐变更新。


可能的更新情况如下:

1. DepartName变化,此时不会产生新的记录,仅会做如下操作:

   a)更新当前最新记录的DepartName为最新。

   b)根据业务主键DepartNo,更新所有同No的历史记录的DepartName为最新。


2.ParentDepartID变化时,则会产生新的记录,此时会做如下操作:

  a) 修改旧记录的EndDate为当前时间

  b)修改旧记录的isActive=0

  c)添加一条新的记录,StartDate=当前时间,isAtive=1,Version=旧Version+1

  如下图:



维度表的使用:

1.取最新版数据

select * from dm_depart_dim d
where d.SCD_IsActive = 1


2.取历史数据 --2013-02-12为时间点

select * from dm_depart_dim d
where  '2013-02-12' between d.SCD_StartDate and d.SCD_EndDate 
or (d.SCD_EndDate is null and  '2013-02-12'  >=d.SCD_StartDate)


3.建立事实表与维度表关联

如取最新数据,根据SQL1获取最新数据的ID,放入事实表维度ID外键中

如取历史数据,根据SQL2获取历史数据的ID,放入事实表维度ID外键中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值