维度建模方法
一、使用一致性维度
1.1 一致性维度
- 当不同的维度表的属性具有相同列名和领域内容时,称维度表具有一致性
- 利用一致性维度属性与不同事实表关联,可以将不同事实表的信息合并到同一个报表中
- 一致性维度由业务和数据管理方共同制定,可被所有事实表重复使用
- 保证分析结果一致,减少开销
1.2 缩减维度
- 一种一致性维度,由基本维度的列与行的子集构成
- 构建聚集型事实表时,需要缩减上卷维度
- 当商业过程获取高粒度级别数据时,也需要缩减维度,如按月和品牌获取数据
- 当两个维度具有相同的粒度级别,但是其中一个表示行的部分子集时,也需要一致性维度子集
1.3 跨表钻取
- 指当每个查询的行头包含相同的一致性属性时,使不同的查询能够针对两个或更多的事实表
- 不同事实表的查询结果针对公共维度属性的行头,通过排序或融合实现排列
1.4 价值链
- 价值链用于区分主要业务过程的自然流程,例如销售商的价值链可能包含购买、库存、零售额等
- 操作型系统通常会为价值链上的每个过程都创建事务或快照
- 由于每个步骤都有特定的时间间隔、粒度和维度属性,故每个过程通常至少建立一个事务事实表
1.5 企业数仓总线架构
- 建立企业DW/BI系统的增量方法
- 关注业务过程,将数仓规划分解为可管理的模块,通过跨不同过程重用公共一致性维度实现集成
- 总线架构中技术与数据库是分离的,关系型数据库和OLAP系统都可参与
1.6 企业数仓总线矩阵
- 用于设计和与总线架构交互的基本工具
- 矩阵的行表示业务过程,列表示维度,点表示业务过程与维度是否存在关联关系
- 确定某一过程涉及哪些维度,哪些维度会夸业务过程需要做一致性处理
1.7 总线矩阵实现细节
- 是更加粒度化的总线矩阵
- 扩展每个业务过程,以展示特定事实表或OLAP数据库
1.8 机会/利益相关方矩阵
- 确定总线矩阵后,可以通过替换包含业务功能的维度列来规划不同的矩阵
- 新的矩阵点表示哪些业务功能与哪些业务过程行相关
- 机会/利益相关方矩阵可用于区分哪些业务过程分组应该与哪些过程中心行相关
二、处理缓慢变化维度属性
2.1 类型0:原样保留
- 维度属性值不会变化,适合属性标记为 “原型” 的维度,如客户的原始积分,日期维度的大部分属性
2.2 类型1:重写
- 用最新值覆盖维度行中的原有值,总是反映最新的状态,不保留历史情况
- 实现简单,无需增加新的维度行
- 受此影响的事实表或OLAP数据需要重复计算
2.3 类型2:增加新行
- 在维度表中增加新行,新行中使用新的属性值填充
- 存在维度表中多行描述同一成员的情况,故不能使用自然键或持久键,需要新的代理主键与事实表关联
- 增加新行时,最少需要新增3列:行的有效时间/日期,行的截止时间/日期,最新行标识
2.4 类型3:增加新属性
- 在维度表增加新属性列用于保存原属性值,原属性列采用类型1改为新属性值
- 此类型不太常用
2.5 类型4:增加微型维度
- 用于处理维度表中一组变化频率超快的维度
- 通常是维度表中包含几百万条数据的情况下,将频繁变化的维度属性单独提取出来形成一个微型维度表
- 微型维度表有自己的唯一主键,基维度表通过外键与微型维度关联
2.6 类型5:增加微型维度及类型1支架
- 用于保存微型维度表的精确历史属性值,在类型4的基础上,微型维度变化时产生新行,同类型2
- 每当微型维度发生变化时,在基维度表中使用新行的主键覆盖微型维度表的主键值,同类型1
2.7 类型6:增加类型1属性到类型2维度
- 与类型5类似,类型6也用于保存历史和当前维度属性
- 在类型2的基础上,新增属性列保存当前属性的最新状态值,在聚合度量时,可以使用改变时的属性值,也可以使用当前属性值
- 当前属性值变化时,由系统自动改写所有相关持久键的的类型1列属性值
2.8 类型7:双类型1和类型2维度
- 同一张维度表同时存储类型1和类型2两个维度列,类型1保存最新属性值,类型2保存历史概要
- 一行类型1,使用持久键,多行类型2,使用代理键
- 事实表同时存储维度表的持久键和代理键,按需选择作为与维度表关联的外键
三、处理维度层次关系
3.1 固定深度位置的层次
- 多对一关系的一种,如品牌 -> 分类 -> 部门
- 层次级别作为维度表不同的属性列出现,提供可预测的、快速的查询性能
3.2 轻微参差不齐/可变深度层次
- 没有固定的深度,但层次深度有限,如地理层次通常有3~6层
- 设计为固定深度层次,不同维度行根据业务规则确定深度和属性值
3.3 具有层次桥接表的参差不齐/可变深度层次
- 针对深度不确定的可变深度层次在建模时很难处理,SQL语言在查询时不能替换参差不齐层次,不支持对自身层次结构的共享,也不支持随时间变化的参差层次
- 通过构建桥接表可以解决以上问题,在桥接表中需要对每一个可能的路径保留一行,确保可以使用SQL语言遍历所有层次
3.4 具有路径字符属性的可变深度层次
- 可在维度中采用路径字符串属性列,来代替使用桥接表表示可变深度
- 路径列包含从最高节点到该行所描述的特定节点的完整路径
- 优点:无需维护专门的桥接表
- 缺点:
- 无法确保其他层次的快速替换,也无法保证自身层次的共享
- 难于构建可变路径,当路径产生变化时,需要重新标记整个路径