维度建模关键概念

维度建模支持对业务过程的分析,这是通过对业务过程度量来进行建模实现的。
度量和环境构成了维度建模的基础。

事实和维度

在kimball的维度建模中,度量称为事实,上下文和环境则称为维度。

事实表

事实表应该包含最底层的,最原子的细节。这样会带来最大的灵活性。维度建模中,细节的级别称为事实表的粒度。
事实表中最常用的度量一般是数值型和可加型,半可加型(库存)
事实表根据粒度角色的划分不同,可分为事务事实表、周期快照事实表、累计快照事实表
事务事实表:用于承载事务数据,通常粒度比较低,例如:产品交易事务事实
周期快照事实表:用于记录有规律的、固定时间间隔的业务累计数据,例如月平均余额事实表
累计快照事实表:记录具有时间跨度的业务处理过程的整个信息。
注意:一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中

维度表

维度表是建模的灵魂。
维度表包含了事实表所记录的业务过程度量的上下文 和环境,除了5个w等信息外,还包含很多描述字段和标签字段等。数据仓库的能力直接与维度属性的质量和深度成正比。在详细的业务用于属性方面花的时间越多,数仓越好。在属性列值给定方面所花时间越多,越好。
对于数字型的字段到底是作为事实还是i 维度属性看待,通常看字段是一个含有许多取值并参与运算的度量值(事实),还是一个变化不多并作为约束条件的离散取值(维度)

星形架构和雪花架构

星形架构:是非规范化结构,其数据存储存在冗余。
雪花模型:是对星形模型的规范化。一个或者维度没有直接链接到事实表,而是通过其他维表链接。去除数据冗余,节省部分存储,但使用不方便。
星形模型牺牲了部分存储冗余,但是带来使用的便捷,使下游用户的使用和学习成本低,且目前存储成本极低,以存储换使用便捷比较合理,因此大多数情况下会采用星形模型。

维度建模的过程

一般为四个步骤:选择业务过程,定义粒度,确定维度,确定事实。
1、选取业务过程
可以听取用户意见。在模型设计中应将注意力放在业务过程而不是业务部门。因此确保数据一致性应该从企业公司全局于整体的角度。
2、定义粒度
粒度传递事实表度量值相联系的细节所达到程度信息。其实质是如何描述事实表单个行。
应该最大限度地选择业务过程中最为原子性的粒度
3、确定维度
粒度确定后,维度是对度量上下文的描述。比较容易确定
4、确定事实
定义粒度后,事实和度量一般很容易确定

维度表设计

维度变化

在维度设计过程中,确定源头数据变化在维度表中如何表示非常重要。在维度建模中,这一现象称为缓慢变化的维度,简称缓慢变化维。
处理方法:
1、重写维度值
用新值覆盖旧值。该技术适用于不需要保留此维度属性历史变化的情况,常用于错位订正或者维度属性无关紧要的场景。
2、插入新的维度行
通过在维度表中插入新的行来保存和记录变化的情况。保留历史和最新的维度属性。会给用户带来困惑,使用户的学习和使用成本加大。开发成本大
3、插入新维度列
用户希望即能用变化前的属性值,又能用变化后的属性值来分析变化前后的事实。可以采用插入新的维度列
后续会介绍快照技术

维度层次

维度层次指某个维度表中属性之间存在从属关系。比如商品类目(一、二、三级)
处理办法:
1、将维度层次扁平化,冗余存储到一个维表中。比如商品的1-3级类目,分别用三个字段存储(星形模型)
2、新建类目维度表,在维度表中维护父子关系(雪花模型)
通常采用第一种方法处理。反规范化的处理牺牲部分存储,但是带来便捷,降低学习成本。

维度一致性

没有物理上的数据仓库,数据仓库是对多个主题,多个业务过程的多次迭代中逐步建立的。
这些多个主题、多个业务过程的多次迭代过程被从逻辑上划分为数据集市。一般是部门级或者面向某个特定主题。数仓则是企业级,面向主题饿的、集成的数据集合。
维度一致性指:两个维度如果有关系,要么是完全一样的,要不是一个是另一个的子集。不一致既包含内容不一致,也包含属性上不一致。
跨主题的分析(支付订单-意向uv转化率) ,在维度建模中称为横向钻取。

维度整合和拆分

维表可能来自多个业务系统,带来维度整合和拆分。
整合需要考虑如下几点:
1、命名规范:确保一致和统一
2、字段类型:统一整合为一个字段类型
3、字段编码和含义:编码和含义要一致。在不同的业务系统,对应的含义一样
拆分:
不同主题的维度需要拆分,比如石油商品和零售店的销售的食品等。
处理办法:
1、建立一个基础维表:包含不同业务的共有属性,同时建立各自业务单独维表包含其独特的业务属性。
2、拆分,既不合并。各自业务建立独立的维度表,各自管理各自维度表属性
实际中,对于业务差异大的业务,耦合在一起不能带来很大的便利和好处,因此倾向于拆分(既不合并)

维度其他

退化维度:在事实表中维度,但是没有对应的维度表。

深入事实表

事实表是维度建模的核心表和基本表。
主要三种类型:事务事实表,快照事实表、累计快照事实表。
1、事务事实表
通常用来记录业务过程中的事件,并且为原子粒度的事件。事务事实表中的数据在事务事件发生后。粒度通常是每个事务一条记录。
事务被提交,数据被插入,数据就不在进行更改。
过程:选择业务过程、定义粒度、确定维度、确定事实
一般的,在事实表设计中,只存放分子分母。因为比例的计算适合业务强相关的,所以一般不把比例的计算放入事实表中。
2、快照事实表
是指间隔一定周期的对业务状态进行一次拍照并记录下来的事实表。比如销售库存,银行账户余额
与事务事实表不同的是,周期快照事实表是稠密的,事务事实表只有事务发生才有记录,周期快照事实表则必须捕获当前每个实体的状态。比如某个商品某天没有销售,那这个商品不会存在当天的事务事实表中,但是会存在周期快照事实表中。
周期快照表的事实一般是半可加。比如商品的库存等
3、累计快照事实表
不常见,但对某些业务场景有价值
车险理赔业务。一次车险的理赔包含客户报案、保险公司立案,客户提交材料。。。。。累计快照事实事实表正是从全流程的角度对业务状态的拍照。
4、无事实的事实表
比如在线人数、uv、pv。通常人为增加一个常量列(其列值为1)