您的位置:首页 > 其它

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

2013-05-22 17:56 218 查看
数据仓库中,缓慢渐变维度是一种经常使用到的方案。

“渐变”,即为逐渐变化的维度,因为日常应用中,维度属性是随时可能发生变化的,而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外键中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐