缓慢变化维SCD笔记

来源:互联网 发布:面向对象程序设计java 编辑:程序博客网 时间:2024/06/02 21:44

blog、论坛里的干货很多,但是很多看过即忘,唯有实践出真知。所以先总结下吧。


1.SCD定义:建模的过程中,经常会遇到Slowly Changing Dimensions,缓慢变化维,或称为渐变维,SCD。

2.SCD应用的原因:实际的业务环境里,维度的属性并不是静态不变的,它会随着时间的发展发生缓慢的变化。打个最通用的比喻,销售人员维度,部门作为其一个属性,但是人员会换部门的,那么这个字段就会在业务系统中被刷,如果销售员甲在2013年3月从销售一部转到销售二部,那么他自身的业绩归属到部门的统计,通常会有不同的口径需求。

3.处理SCD的方式:
--方式一:直接用最新值,覆盖就有值。等于是忽略了历史的变化。拿上面销售人员的例子来说,销售员甲2013年3月以前的业绩,也会归入到销售二部。
--方式二:记录历史,以有效期起和止来标示当前有效。这样的情况下,需要结合代理键,因为一个维度成员,会有若干行记录,这种情况下,表结构可以类似于:KEY, CODE, NAME, 有效期起, 有效期止, 当前有效?这种情况下,可以将上例中销售员甲的转部门前的业绩归入到其当时归属的部门。
--方式三:记录当前和最近几次的历史,这种处理方式实际上很少使用。
--其它方式:
另外,还会有一些非主流的处理方式,譬如不覆盖,或者说1、2、3方式结合,成为TYPE 6的,等等。
实际的处理,需要理论结合实际,实际,指的是客户的需求和工具的支持度。
客户如果能接受覆盖,这是最容易处理的方式。
否则,就要调研关注变化的属性。
ETL工具中,有些可以支持从源系统表生成TYPE 2的组件,但是用起来好像也不是太好用。
原创粉丝点击