维度缓慢变化称为SCD,对每个维度表的属性,都需要考虑为其定义处理变化的策略。
类型0 保留原始值
维度属性绝对不会变化,SCD称其为类型0
类型1 重写
对类型1来说,需要重写维度行中的旧值,以当前值替换,属性变化始终反映最近情况。这是应对维度变化最简单的方式,不需要触碰事实表。
问题:无法记录历史值,且若回溯数据则会造成影响。
类型2 增加新行
由于DW/BI的目标之一是正确表示历史,所以类型2可以满足此需求。维度变化时增加新行,同时记录生效失效时间。是精确跟踪缓慢变化维度属性的主要技术,当不能完全确定某一属性SCD业务规则时采用此方法是安全的,还可以提供类型1的重写。
问题:无法确保能够将新属性和过去的历史时间关联起来。
类型3 增加新属性
增加新维度列记录新维度,内涵是认为过去与现在的值都是正确的。
适合应用于某个变化引起维度表大量行变化的情况,或者变化可预测且需要基于任意历史值汇总放入场景。
问题:应用场景极少
类型4 增加微型维度
适用于变化频度较高,维度表数据量很大的场景。建立微型维度表,包含各个维度和一个维度自然键,表里存了这些维度的所有可能场景,对于维度值太多的情况可以进行范围分组分为积累,如金额分为0-1000,10000-2000,>2000三类。在事实表中则需要存储微型维度表的维度自然键和客户主键,以避免产生较大的维度表。
问题:对维度的粗略分类存在问题,因为没有存明细。
类型5 增加微型维度及类型1支架
用于精确保证历史属性值。采用重写的方式把这部分易变的属性分表为单独的表,并且存储基维度和微型维度,采用类型1的方式重写微型维度
类型6 增加类型1属性到类型2维度
保存历史和当前维度属性值。对历史数据进行类型2的增加新行,对于当前数据进行类型1的重写。也就是说数据需要保存时间字段,不论是生效时间失效时间还是DT,都是需要保存,然后如果要修改,那么针对特定关联的所有属性行进行重写
类型7 双类型1和类型2的维度
类型1仅展示当前属性,类型2展示最新历史概要。在事实表存储了自然键和持久键,当前属性通过持久键和事实表关联,历史属性通过自然键和事实表关联。即相当于在事实表增加一个键关联拿到历史上的最新维度,而原有的外健关联当前维度表获取当前维度。