如何使用缓慢变化维技术

作者: 数据僧 | 来源:发表于2018-12-01 20:42 被阅读2次

    尽管维度的属性相对稳定,但他们不可能一成不变,随着时间的推移,属性值仍然会发生变化。我们必须采取对应的策略应对发生的变化。
    业务数据治理和管理代表必须积极参与有关处理缓慢变化维度属性问题,不应该由IT单独决定
    缓慢变化维度:Slowly Changing Dimension,缩写为SCD

    类型0(SCD0):保留原始值

    1,维度属性值绝对不会发生变化,因此事实始终按照该原始值分组。
    2,SCD0适合任何标记为“原始”的属性。例如:客户原始信用分值,维度表的主键是代理键而不依赖操作型自然主键,假设其具有持久性,这一特性是不可改变的,持久性键始终是SCD0属性。

    类型1(SCD1):重写

    1,重写维度行中的旧值,以当前值替换。属性始终反映最近的情况。

    SCD1-重写-示例

    注意:
        SCD1易于实现,但是无法保留属性的历史值.
        如果维度模型通过OLAP多维数据库部署,SCD1属性是一种层次上卷属性,当SCD1属性发生变化时,多维数据可能需要重新处理。
        即使SCD1易于实现,也需要记住他们将会导致关系表或OLAP多维数据库在针对受影响属性的聚集时产生错误。

    2,###类型2(SCD2):增加新行
    1>当维度属性发生变化后,新维度行将插入属性对应的变化值。

    SCD2-增加新行-示例

    2,SCD2维度中的SCD1属性
    1>在同一个维度中混合使用多种缓慢变化维度技术也是比较常见的。当SCD1属性变化时,要求更新多个维度行。另外一个属性发生SCD2变化后,新行正确使用了SCD1的变化。

    SCD2-SCD1-混合使用多种缓慢变化维度技术示例

    注意:
        1,OLAP不需要重新处理聚集结果。
        2,根据不同的需求使用产品键,自然键作为不同计数的基础。
        3,SCD2是精确跟踪缓慢变化维度属性的主要技术,新维度行能自动划分事实表的历史。

    SCD3:增加新属性

    1>尽管SCD2能够区分历史情况,但是无法确保将新属性与过去的历史事实关联。当我们约束SCD2的属性时候,历史情况我们无法看到。例如:当销售队伍重组的时候,地区边界可能被重新划分,但是某些用户仍然希望能按照先前的的地区上卷最近的销售情况。SCD3恰恰能解决这个问题。

    SCD3-增加新属性示例

    2>如果维度属性变化节奏可预测。假设:在每年的年初产品列表重新分类,业务方面希望基于部门的当前年份或以往年份工作查询多年的事实。在此情况下,我们可以通过归纳类型得到一系列SCD3维度属性获得这些变化定期的、可预测的属性。

    SCD3-多类型属性示例

    注意:
        1,SCD3能确保要么通过新的,要么通过旧的属性值来考察新的和历史事实表,有时候也被称为交换的事实。
        2,SCD3对 [不可预测] 的属性变化无能为力。SCD3更新和增加列可能导致需要重新处理OLAP多维数据库

    SCD4:增加微型维度

    1,当变化频率加快时候,并且维度表包含几百万行的维度表。如果对变化的跟踪采用可靠的SCD2技术对浏览和查询性能具有负面影响。采用不同的维度消除频繁分析或者频繁变化的属性,这一维度技术叫做微型维度。
        例如:人口统计,不断变化的属性:收入,被转换为带状范围值。微型维度中的属性值通常呈现为相对小范围的离散值,尽管此类限制使用了预定义宽度范围的集合,但是它能够极大的减少微型维度中合并值的数量。

    SCD4-增加微型维度示例

    如果用户坚持要访问特定的行数据值,例如:按月查看不同收入级别的客户的购买数据。

    CSD4-增加微型维度-实际使用示例

    SCD5:SCD4与SCD1支架表

    SCD5是 SCD4(增加微型维度)和SCD1(重写)两种技术的合并。
    该技术的特点是增加当前微型维度主键作为主维度的一个属性。该微型维度主要是使用SCD1技术,重写每个属性的变化。不必向SCD2那样跟踪所有变化属性,避免导致爆炸性增长的情况发生。

    SCD5-微型维度与类型1支架表示例

    注意:
        SCD4微型维度这一术语是指当某个统计主键是 [事实表] 组合键的一部分;当统计主键是客户维度的外键,则被称为支架

    SCD6:将类型1属性增加到类型2维度

    SCD6是SCD2(增加新行),SCD3(增加新属性),SCD1(重写)的技术合并

    SCD6示例
    注意:
        采用这种混合方法,为获取变化建立新行(SCD2),增加新列以跟踪当前分配(SCD3),后续变化即最新状态进行重写(SCD1)
        这种技术关键是要考虑业务用户的场景,在灵活性与复杂性之间进行权衡,考虑将那些列暴露给用户,是他们不回因为面对诸多选择而不知所措。

    SCD7:双重类型1与类型2维度

    当我们需要支持更多属性的大型维度表的当前和历史场景。
    这个技术和SCD6功能类似。SCD7需要更少的ETL工作,可以通过SCD2的视图获取。SCD7的增量开销是事实表中的额外增加的列。基于当前属性值的查询相比SCD6,可以在更小的维度表上进行查询和过滤。


    SCD7(双重外键-SCD2-SCD1合并)

    SCD7的一种变体,当需要发布当前类型的维度属性时候,需要依赖所有的持久键。

    SCD7变体(双重外键-SCD2-SCD1合并)

    具体的表内容:

    SCD7变体示例行(双重外键-SCD2-SCD1合并)

    总结

    SCD0:
        维度表影响:属性值无变化
        事实表影响:事实与属性的原始值关联
    SCD1:
        维度表影响:重写属性值
        事实表影响:事实与属性的当前值关联
    SCD2:
        维度表影响:为新属性值增加新行
        事实表影响:事实将于在事实发生时有效的属性值关联
    SCD3:
        维度表影响:增加新列来保存当前值和历史值
        事实表影响:事实于当前和历史值关联
    SCD4:
        维度表影响:增加快速变化属性的微型维度
        事实表影响:事实与事实发生时有效的变化属性关联
    SCD5:
        维度表影响:增加SCD4微型维度以及在基本维度中重写类型1微型维度键
        事实表影响:事实与事实发生时有效的变化属性关联,加上当前快速变化的属性值
    SCD6:
        维度表影响:在维度行(SCD2)中增加类型(SCD3),并重写所有先前的所有维度行(SCD1)
        事实表影响:事实将于在事实发生时有效的属性值关联,加上当前值
    SCD7:
        维度表影响:增加包含新属性的维度行(SCD2),加上限于当前行和属性(SCD1)的视图
        事实表影响:事实将与在事实发生时有效的属性值关联,加上当前值


    数据僧 历史文章

    数据仓库-概述-读书笔记一
    数据仓库-DW/BI架构对比-读书笔记二
    数据仓库-事实表/维度表技术-读书笔记三
    维度处理-数据仓库-读书笔记(四)
    数据仓库-高级事实表技术-读书笔记五
    数据仓库-高级维度表技术-读书笔记六
    数据仓库,零售业务举例,维度模型设计4步骤,读书笔记(七)
    数据仓库-零售业务举例维度表设计细节-读书笔记(八)
    数据仓库-零售业务举例如何提高仓库扩展能力-读书笔记(九)
    数据仓库-零售业务中库存如何设计-读书笔记(十)


    数据僧 参考资料

    数据仓库工具箱


    如果您觉得我用心了,觉得您有所收获,麻烦关注下我吧,您的关注就是我的动力,因为有你,我就不是一个人在前行。

    数据僧

    相关文章

      网友评论

        本文标题:如何使用缓慢变化维技术

        本文链接:https://www.haomeiwen.com/subject/ughrcqtx.html