javamans
作者javamans·2010-06-23 11:35
it技术咨询顾问·Accenture

【转】缓慢变化维的处理

字数 910阅读 1607评论 2赞 2

 

缓慢变化维的处理

维度建模的数据仓库中,有一个概念叫Slowly Changing Dimensions,中文一般翻译成“缓慢变化维”,


维度建模的数据仓库中,有一个概念叫Slowly Changing Dimensions,中文一般翻译成“缓慢变化维”,经常被简写为SCD。缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。这种随时间发生变化的维度我们一般称之为缓慢变化维,并且把处理维度表的历史变化信息的问题称为处理缓慢变化维的问题,有时也简称为处理SCD的问题。

处理缓慢变化维的方法通常分为三种方式

I - 当某个维度成员的数据发生变化时,最新的列值将覆盖以前的维度记录,从而清除了该维度成员的历史记录
II - 当某个维度成员的数据发生变化时,最新的列值将存储为维度中的新记录,从而提供了一个维度成员的多个实例,这样便保留了历史记录
III - 当某个维度成员的列数据发生变化,而数据仓库要保留该变化列的最后一个版本时,原始数据将移到该维度记录的最后一个版本列中,并且所有新维度信息将覆盖现有列。
以上三种方式中,第I种处理最简单,但是将会导致分析结果的失真,比如当一个销售员所在的部门发生变化的时候,如果采用第一种方式,在处理部门和销售员之间的上钻、下钻操作时,会导致聚合误差,将销售员在原来部门的销售业绩带入到新的部门中。
采用第II 种方法的时候,需要加入一个代理键,要注意的是对于不同的数据仓库平台,有相应的处理技巧,否则会导致不合理的情况出现。比如在Microsoft Analysis Service2005中,当一个销售员由部门A调入部门B,在调回部门A的时候,如果维度属性的关键Key设置为代理键,就会一个销售员出现在部门A中两次的情况。
第III种方式由于可能会涉及到动态改变数据仓库模型,这样会带来比较大的开销,所以在实际的数据仓库实现中并不经常使用。
一般情况下,采用第I、第II 种方法结合使用的策略,对于维度中一些描述性的属性,采用直接覆盖的方式,而对于那些将会出现在层次中,可能会参与聚合计算的属性,则采用第二种方式。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论2 条评论

jinyqjinyq其它null
2011-09-01 14:44
学习了。谢谢!
Ctrl+Enter 发表

作者其他文章

相关问题

相关资料

X社区推广