内容承接 第2章 Kimball维度模型技术概述(一)
下钻
下钻是商业用户分析数据的最基本的方法。下钻仅需要在查询上增加一个行头指针。新行的头指针是一个维度属性,就是将数据按组查询,在SQL中用Group By表达式。属性可以来自任何与查询使用的事实表关联的维度。
退化维度
有时,维度除了主键外没有其他内容。退化维度被放入事实表中,清楚地表明没有关联的维度表。退化维度常见于交易和累计快照事实表中。
非规范化扁平维度
维度设计者需要将操作型数据库设计所带来的对规范化设计的要求,并将非规范化的多对一固定深度层次引入扁平维度行的不同属性。非规范化维度能够实现维度建模的双重目标:简化及速度。
多层次维度
多数维度包含不止一个自然层次。如:日历日期维度可以按从天到周划分,也可以从月到年的层次。在同一维度中可以存在不同层次。
文档属性的标识与指示器
令人迷惑的缩写、真/假标识以及业务指标可以作为维度表中文本字词含义的补充解释。操作代码值所包含的意义应分解成不同的表示不同描述性维度属性的部分。
维度表中的空值属性
当给定维度行没有全部填充时,或者当存在属性没有被应用到所有维度行时,将产生空值维度属性。推荐采用描述性字符串替代空值。(如:使用Unknown或Not Applicale替换空值。)避免在维度属性中使用空值,因为不同的数据库系统在处理分组和约束时,针对空值的处理方法不一致。
日历日期维度
日历日期维度通常包含许多描述,(如:周数,月份名称,国家假日等属性。)日期维度表需要特定的行表示未知或待定的日期。若需要更详细的精确度,可以在事实表中增加不同的日期时间戳。日期时间戳并不是维度表的外键,单以单独列的形式存在。如按当天时间(time-of-day)属性进行约束或分组,如按当天或其他数字分组,则需要在事实表上增加一个“当天时间(time-of-day)”维度外键。
杂项维度
事务型商业过程通常产生一系列混杂的、低粒度的标识和指示器。这种情况下建立单独的将不同维度合并到一起的杂项维度。
雪花维度
当维度表中的层次关系是规范的时,低粒度属性作为辅助表通过属性键连接到基本维度表。当这一过程包含多重维度表层次时,建立的多级层次结构被称为雪花模式。雪花模式在其中查询是非常困难的。雪花模式还会影响查询性能。扁平化的、非规范的维度表完全能够获得与雪花模式相同的信息。
支架维度
维度可包含对其他维度的引用。(如:银行账户维度可以引用表示开户日期的维度)。这些被引用的辅助维度称为支架维度。维度之间的关联应该由事实表来实现。在事实表中通过两个维度的不同外键相关联。
使用一致性维度集成
维度建模方法最成功的方面之一就是为集成来自不同商业过程的数据而定义了简单而强大的解决方案。
一致性维度
当不同的维度表的属性具有相同列名和领域内容时,称维度表具有一致性。利用一致性维度属性与每个事实表关联,可将来自不同事实表的信息合并到同一报表中。当一致性属性被用作行头(SQL分组列)时,来自不同事实表的结果可以排列到跨钻报表的同一行中。
缩减维度
缩减维度是一种一致性维度,由基本维度的列与行的子集构成。当构建聚集事实表时需要缩减上卷维度。当商业过程自然地获取粒度级别较高的数据时,也需要缩减维度。另一种情况,当两个维度具有同样的粒度级别的细节数据,但其中一个仅表示行的部分子集时,也需要一致性维度子集。
跨表钻取
**跨表钻取是当每个查询的行头包含相同的一致性属性时,使不同的查询能够针对两个或更多的事实表进行查询。来自两个查询的回答集合将针对公共维度属性行头,通过执行排序-融合操作实现排列。
价值链
价值链用于区分组织中主要业务过程的自然流程。(如,销售商的价值链可能包含购买、库存、零售额等)。操作型源系统通常为价值链上的每个步骤建立事务或快照。因为每个过程在特定时间间隔,采用特定时间间隔,采用特定粒度和维度建立唯一的度量,所以每个过程通常至少建立一个原子事实表。
企业数据仓库总线架构
企业总线架构提供一种建立企业DW/BI系统的增量式方法。企业总线架构通过关注业务过程将DW/BI规划过程分解为可管理的模块,通过重用跨不同过程的标准化一致性维度发布实现集成。支持可管理敏捷实现对应企业数据仓库总线矩阵。
企业数据仓库总线矩阵
企业数据仓库总线矩阵是用于设计并与企业数据仓库总线架构交互的基本工具。矩阵的行表示业务过程,列表示维度。矩阵中的点表示维度与给定的业务过程是否存在关联关系。设计时应该分析每一行,用于测试是否为业务过程定义好相关的候选维度,同时分析每个列,考虑某一维度需要跨多个业务过程并保持一致性。总线矩阵还可用作输入帮助确定优先处理DW/BI项目过程管理。
总线矩阵实现细节
总线矩阵实现细节是一个更加粒度化的总线矩阵。其中扩展每个业务过程行以展示特定事实表或OLAP多维数据库。在此细节粒度上,可以文档化精确的粒度描述以及事实列表。
机会/利益相关方阵
在确定了企业数据仓库总线矩阵行之后,可以通过替换包含业务功能(如,市场,销售,财务等)的维度列规划不同的矩阵。机会/利益相关方矩阵可用于区分哪些业务过程分组应该与过程中心行相关。
处理缓慢变化维度属性
处理缓慢变化维度(Slowly Changing Dimension,SCD)属性的基本方法。对同一维度表中属性的变化,采用不同的变化跟踪技术是比较常见的方法。
类型0:原样保留
对类型0,维度属性值不会发生变化,因此事实表以原始值分组。
类型1:重写
对类型1,维度行中原来的属性值被新值覆盖。类型1属性总是反映最近的工作,因此该技术破坏了历史情况。受此影响的聚集事实表和OLAP多维数据将会重复计算。
类型2:增加新行
对类型2,将在维度表中增加新行,新行中采用修改的属性值。要实现该方式需要维度主键更具有一般性,不能仅采用自然键或持久键,因为采用该方法时经常会出现多行描述同样成员的情况。
当变化类型2发生时,最少需要在维度行中增加三个额外列:1.行有效的日期/时间戳列;2.行截止日期/时间戳列;3.当前行标识。
类型3:增加新属性
对类型3,将在维度表上增加新属性以保存原来的属性值,新属性值以变化类型1方式重写主属性。这种类型3变化有时称为替换现实。可以利用当前值或替换现实来分组或过滤事实数据。不常用
类型4:增加微型维度
对于类型4,当维度中的一组属性快速变化并划分为微型维度时采用。此情况常被称为快速变化魔鬼维度。通常包含几百万行的维度表中使用的属性是微型维度设计的候选,即使它们不常变化。变化类型4微型维度要自己的唯一主键。变化类型4微型维度需要自己的唯一主键,基维度和微型维度主键从相关的事实表中获取。
类型5:增加微型维度及类型1支架
对类型5,用于精确保存历史属性值,按照当前属性值,增加报表的历史事实。类型5建立在类型4微型维度之上,并嵌入当前类型1引用基维度中的微型维度。将基维度及微型维度支架表示为展现区域中的单一表。每当当前微型维度分配发生变化时,ETL小组需要重写类型1微型维度引用。
类型6:增加类型1属性到类型2维度
与类型5类似,类型6也保存历史和当前维度属性值。类型6建立在类型2的基础上,同时嵌入维度行属性的当前类型1版本,因此事实行可以被过滤或分组,要么按照属性的当前值。在此环境中,当属性发生变化时,类型1属性有系统自动重写与特定持久键关联所有行。
类型7:双类型1和类型2维度
类型7是用于支持过去和现在报表的最后一种混合技术。事实表可以被访问,通过被建模为类型1维度仅仅展示最新属性值,建模为类型2维度展示最新历史概要。
处理维度层次关系
维度往往存在层次关系。
固定深度位置的层次
固定深度层次是多对一关系的一种,(如,从产品到品牌,再到分类,到部门。)当固定深度层次定义完成后,层次就具有商定的名字,层次级别作为维度表在不同位置属性出现。固定层次能够提供可预测的、快速的查询性能。当层次不是多对一关系,或层次的深度不定,以致层次没有稳定的命名时,需要非固定层次技术。
轻微参差不齐/可变深度层次
轻微参差不齐层次没有固定的层次深度,但层次深度有限。地理层次深度通常包含3到6层。与其使用复杂的机制构建难以预测的可变深度层次,不如将其变换为固定深度位置设计,针对不同的维度属性确立最大深度,然后基于业务规则放置属性值。
具有层次桥接表的参差不齐/可变深度层次
在关系数据库中,深度不确定的可变深度层次非常难以建模。SQL扩展和OLAP访问语言对递归父子关系提供了一些支持,方法有限。采用SQL扩展,在查询时,不能替换参差不齐层次,不支持对自身层次结构的共享,同时不支持随时间变化的参差不齐的层次。这样的情况可以通过关系数据库中采用构建桥接表方式建模参差不齐层次来解决。此时桥接表对每个可能的路径保留一行,确保能够遍历所有层次的形式,采用标准SQL而不是特定语言扩展来实现。
具有路径字符属性的可变深度层次
可以在维度中采用路径字符属性,以避免使用桥接表表示可变深度层次。对维度中每行,路径字符属性包含特定的嵌入文本字符,包含从层次最高节点到特定维度行所描述节点的完整路径描述。多数标准层次分析需求可以通过SQL处理,不必采用SQL语言扩展。缺点:路径字符方法不能确保其他层次的快速替换,无法共享自身层次,难于构建可变路径层次的变化,可能需要重新标记整个层次。
高级事实表技术
这些技术涉及不太常见的事实表模式。
事实表代理键
代理键可用作所有维度表的主键。此外,可使用单列代理事实键,尽管不太需要。在ETL加载过程中顺次分配的,不与任何维度关联的事实表代理键,可用于(1)作为事实表的唯一主键列;(2)在ETL中,用作事实表行的直接标识符,不必查询多个维度;(3)允许将事实表更新操作分解为风险更小的插入和删除操作。
蜈蚣事实表
多对一层次的每层建立不同规范化维度,(如,日期维度,月份维度、季度维度等),并将所有外键包含在一个事实表中。这将产生蜈蚣事实表。包含与多维度相关的多个维度。
属性或事实的数字值
如果数字值主要用于计算目的,则可能属于事实表。如果数字值只要用于确定分组或过滤,则应将其定义为维度属性,离散数字值用值范围属性进行补充(如¥0~50)。
日志/持续时间事实
积累快照事实表获取多个过程里程碑,每个都包含日期外键并可能包含日期/时间戳。每个包含日期外键并可能包含日期/时间戳。商业用户通常希望分析这些里程碑之间的滞后及延迟时间。
头/行事实表
操作型交易系统通常包括事务头指针行,头指针行与多个事务行关联。也称父/子模式,所有头指针级别维度外键与退化维度应该被包含在行级别事实表。
分配的事实
头指针/行事务数据与对应的事实具有不同粒度。应该尽量分配头指针事实,使其基于业务所提供的规则划分为行级别,分配的事实可以按照所有维度进行分片并上钻操作。尽量避免建立头指针级别的事实表,除非这样的聚集能够获得查询性能的改善。
利用分配建立利润与损失事实表
事实表揭示利润等价方程是企业DW/BI应用能够发布的最强大的结果。利润方程:收入-开销=利润。
网友评论