数据仓库中,缓慢变化维的一种设计方案
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.取最新版数据
2.取历史数据 --2013-02-12为时间点
3.建立事实表与维度表关联
如取最新数据,根据SQL1获取最新数据的ID,放入事实表维度ID外键中
如取历史数据,根据SQL2获取历史数据的ID,放入事实表维度ID外键中
“渐变”,即为逐渐变化的维度,因为日常应用中,维度属性是随时可能发生变化的,而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外键中
相关文章推荐
- 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路
- 智能数据仓库的设计方案
- 三个例子,让你看懂数据仓库多维数据模型的设计
- 数据插入一种基于CAS的无锁并发HashTable设计及C代码实现
- 校园数字化建设--注册中心投标文件研究(6)--公共数据交换平台设计方案概述
- 数据仓库自动抽取:通过 SQL Server 企业管理器中的数据转换服务 (DTS) 设计器 创建 Analysis Services 处理任务
- 【数据仓库】数据仓库设计前如何粗估所需的存储空间大小?
- 数据仓库缓慢变化维(Slow changing demenison) 的实现方案
- 数据仓库专题(3)-分布式数据仓库事实表设计思考
- 一次oracle数据库大数据表的分区方案设计,以及所踩的坑
- 优化方案:ETL的过程原理和数据仓库建设
- Atitit.数据操作dsl 的设计 ---linq 方案
- 数据仓库设计小知识之一个属性的维度设计
- 数据仓库数据库设计方法---关系模型和多维模型比较分析
- 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案
- 3 关于数据仓库维度数据处理的方法探究系列——缓慢变化维概述和原理
- 数据仓库的模型设计 (转)
- Disruptor:一种高性能的、在并发线程间数据交换领域用于替换有界限队列的方案
- 数据仓库专题(9)-缓慢变化维处理技术
- 设计数据密集型应用-第四章-编码和应用演进 (涉及的问题和方案)