第一章 数据仓库、商业智能及维度建模初步

1.1 数据获取与数据分析的区别

信息对于系统的两个作用:

  • 操作型系统保存数据(面向用户的应用开发,比如网站后台数据库,MySQL等概念)
    • 不维护历史数据,仅保留最新的系统状态
    • 强事务性,更快的处理事务,一次处理一个事务
  • 分析型系统(DW/BI)使用数据(面向数据分析的开发,数据分析,大数据、数仓的概念)
    • 维护历史数据,数据量大
    • 一次处理多个事务

1.2 数仓和商业智能的目标

  • 方便的存取信息
  • 以一致的形式展现信息
  • 能适应变化
  • 即使的展现信息
  • 称为保护信息菜户的安全堡垒
  • 称为提高决策指定能力的权威和可行的基础
  • 成功的标志是业务群体接收DW/BI系统(愿意用和相信其价值)

后两点最重要,否者所有都是白费或者有害

1.3 维度建模简介

维度建模可以满足:

  • 以商业用户可以理解的方式发布数据
  • 提供高效的查询性能

这源于其简单性

维度建模不要求满足3NF,3NF用于消除冗余但是不利于理解查询

1.3.1 星型模式与OLAP多维数据库

星型模型(传统数据库)和OLAP(hive)是多维建模的两种实现方式。

1.3.2 用于量度的事实表

事实表中每一行对应一个量度事件。每行中的数据是一个特定级别的细节数据,称为粒度。

维度建模的核心是事实表中的所有量度行(每个指标)必须是同一粒度

比如销售事实中的细节数据:美元销售额,事实表中数据最好是可加的,最好不要存放文本数据,文本数据应该放在维度表中

事实表是稀疏的,但是将消耗维度模型的90%甚至更多的空间。

事实表在行数上趋向于边长,在列上趋向于变短

事实表按照事务可划分为分为三类:

  • 事务(最常见)
  • 周期性快照
  • 积累快照

一般事实表包含两个甚至更多的的外键,这些外键与维度表主键关联。

事实表的主键通常是外键组合在一起的组合主键,表示多个维度的集合

对应操作型数据库,事实表就是,操作型数据库中的关系表,比如学生选课表(仅仅多了对这个事实的数值属性比如各种成绩等)

1.3.3 用于描述环境的维度表

维度表包含与业务过程量度时间有关的文本环境,用于描述与“谁、什么、哪里、合适、如何、何时、为什么”有关的事件。

维度表通常有很多列,50~100个都很正常。

维度表趋向于包含较少的行,但是可能存在多列。

维度表由单一主键定义,用于被事实表关联参照。

维度表示查询约束(where语句)、分组(group by)、报表标识的主要来源。属性名一般为名词。可以帮助对系统的理解。尽量使用文本描述而不是代码。

区分数值属性是事实表还是维度表的方法是:

  • 如果一个数值属性包含多个值并作为计算参与者的度量——事实
  • 如果仅是对具体值的描述,一个常量、某个约束和行标识的参与者——维度属性

维度表不需要满足3NF,维度表通常数据量很小,因此不需要满足3NF

对应操作型数据库,维度表就是:操作型数据库中的实体,比如学生标表、课程表

1.3.4 星型模式中的维度与事实的连接

事实表存储:数值量度、多个维度外键(量度),围绕的是多个参考的维度表(环境)。

1.4 Kimball 的 DW/BI 架构

共有四个组成部分:源操作系统、ETL系统、数据展示和商业智能应用

1.4.1 源操作系统

  • 行为日志
  • 业务数据库

1.4.2 获取-转换-加载(ERL)系统

  • 清洗数据
  • 数据合并
  • 复制数据

最后步骤

  • 构建和加载数据到展示区域、划分维度和事实
    • 拆分组合列
    • 反范式化(争议、本书支持)

1.4.3 用于支持商业智能决策的展现区

  • 采用维度模型来展现。
  • 要包含最细粒度的数据。
  • 使用公共的、一致性的维度建立维度结构
  • 遵循总线结构

1.4.4 商业智能应用

查询工具、看板、可视化、推荐等

1.5 其他 DW/BI架构

1.5.1 独立数据集市架构

按部门独立建设:相当于每个部门都有自己的上面的一套

1.5.2 辐射状企业信息工厂Inmon架构

BI应用之前按照部门汇总,其他都是通用的。

详细参见:p21

1.5.3 混合辐射状架构与Kimball架构

详细参见:p22

1.6 维度建模神话

  • 维度模型仅包含汇总数据(事实应该包含细节数据)
  • 维度模型是部门级别而不是企业级别(事实应该是按照业务过程组织而不是部门)
  • 维度模型不可扩展(实际上可以)
  • 尾部模型仅能用于预测(实际上应该以度量过程为中心)
  • 维度模型不能被集成

1.7 考虑使用维度模型的更多理由

  • 敏捷性考虑

1.8 本章小结

  • 维度建模基本概念
  • Kimball DW/BI模型与其他模型比较
  • 误解解释

第二章 Kimball 维度建模技术概述

2.1 基本概念

2.1.1 收集业务需求与数据展现

  • 与业务代表交流发现需求
  • 理解基于关键性能指标、竞争性商业问题、决策制定过程、支持分析需求
  • 数据实际情况可以通过与源系统专家交流,构建高层次数据分析访问数据可行性来揭示

2.1.2 协作维度建模研讨

  • 建模者与业务代表讨论协作是关键

2.1.3 4步骤维度设计过程

  • 选择业务过程
  • 声明粒度
  • 确认维度
  • 确认事实

根据此,设计组确定表名、列名、示例领域值以及业务规则。业务管理代表必须参与详细的设计活动,以确保覆盖正确的业务

2.1.4 业务过程

业务过程是组织完成的操作型活动,例如,获取订单、处理保险理赔、学生课程注册或每个月账单快照。

业务过程对应事实表。过程选择非常重要,过程定义了特定的设计目标以及对粒度、维度、事实的定义。每个业务过程对应企业数据仓库总线矩阵的一行

2.1.5 粒度

声明粒度是维度设计的重要步骤。

粒度用于确定某一事实表的行表示什么。选择维度或事实前必须声明粒度,因为每个候选维度或事实必须与定义的维度保持一致。

原子粒度是最低级别的粒度,应从原理粒度开始设计。上卷汇总粒度对性能调整非常重要,要猜测业务公共问题。

同一事实表不能混用多种粒度

2.1.6 描述环境的维度

参见第一章

2.1.7 用于量度的试试

参见第一章

2.1.8 星型模型与OLAP多维数据库

参见第一章

2.1.9 方便地扩展到维度模型

维度模型对数据关系发生变化具有灵活的适应性。可以灵活应对如下变化

  • 当事实与存在的事实表粒度一致时,可以创建新列
  • 通过建立新的外键列,可以将维度关联到已经存在的事实表上,前提是维度列与事实表的粒度保持一致
  • 可以在维度表上通过建立心裂添加属性
  • 可以使事实表的粒度更加原子化,方法是在维度表上添加属性,然后以更新的粒度重置事实表,小心保存事实表及维度表的列名

2,2 事实表技术基础

2.2.1 事实表结构

从最低粒度看,事实表行对应一个量度时间,反之亦然。因此事实表设计依赖物理活动

存储的是:

  • 现实世界的操作型事件产生的量度值
  • 参考维度表的外键
  • 可选的退化维度键和日期时间戳

2.2.2 可加、半可加、不可加事实

  • 可加:可以按照事实表中任意维度汇总
  • 半可加:可以按照事实表中某些维度汇总
  • 完全不可加:例如比率

2.2.3 事实表中的空值

可以存放空值量度

2.2.4 一致性事实

如果某些量度出现在不同的事实表中,应保证技术定义相同,如果不兼容,应以不同的命名告诫业务用户和BI应用

2.2.5 事务事实表

每一行对应一个空间或时间上某点(事务)的事实表,一般都包含一个与维度表关联的外键

2.2.6 周期快照事实表

每一行对应标准周期(如一天、某周)的量度事件。粒度是周期性的,不是个体事务。

2.2.7 累计快照事实表

每一行汇总了发生在过程开始和结束之间可预测步骤内的量度事件。管道或工作流过程(例如履行订单或索赔过程)

2.2.8 无事实的事实表

没有量度,仅有关系的事实表如某天参加课程的时间

2.2.9 聚集事实表或OLAP多维数据库

2.2.10 合并事实表

例如科技奖现货销售和销售预测合并为同一张事实表

2.3 维度表技术基础

2.3.1 维度表结构

每个维度表都包含单一的主键列。通常较宽,是扁平非规范表,通常作为属性查询和约束分组的定义。

2.3.2 维度代理键

一般维度表的主键是一个自增的id(维度代理建),日期维度的维度表不需要遵循代理建规则。

2.3.3 自然键、持久建和超自然键

  • 自然键例子:工号
  • 超自然键或持久建例子:离职员工重新入职该键不会发生变化的键

2.3.4 下钻

根据维度表的属性进行group by

2.3.5 退化维度

维度除了之间没有其他内容的情况,可以放入事实表中

2.3.6 非规范化扁平维度

非规范化有利于提高时间效率

2.3.7 多层级维度

例如日历日期维度可以按照财务周期层次从天到周进行划分,也可能存在从天到月再到年的层次。位置密集型维度可能包含多个地理层次。再次情况下,同一维度中可以存在不同的层次

2.3.8 文档属性的标识和指示器

操作码应分解为属性枚举

2.3.9 维度表中的空值属性

建议采取特殊描述字符串描述空值属性

2.3.10 日历日期维度

使用时期作为主键

2.3.11 扮演角色的维度

一个筛选条件,枚举值,当前记录的类型是啥?

2.3.12 杂项维度

类似于extra

2.3.13 雪花维度

维度表按照层次结构建,称之为雪花模式。应该避免使用雪花模式,雪花模式查询困难、效率低。应使用扁平化的非规范的维度表

2.3.14 支架维度

某个维度表引用其他维度表,称之为支架维度。应避免使用,应通过事实表关联

2.4 使用一致性维度集成

2.4.1 一致性维度

当不同维度表的属性具有相同的列名和领域内容时,称维度表具有一致性。

2.4.2 缩减维度

缩减维度是一种一致性维度,由基本维度的列与行的子集构成。

2.4.3 跨表钻取

简单的说,跨表钻取意思是每个查询的行头包含相同的一致性属性时,使用不同的查询能不针对两个或更多的事实表进行查询。

2.4.4 价值链

待阅读、待补充

2.5 处理缓慢变化属性

  • 原样保留
  • 重写
  • 增加新行

待阅读、待补充

待阅读、待补充

第三章 零售业务

3.1 维度建模设计的4步骤

3.1.1 选择业务过程

  • 业务过程一般是一个行为动词,通常表示业务执行过程中的活动。
  • 业务过程通常由某个操作型系统支撑,例如账单或购买系统
  • 业务过程建立或获取关键性量度
  • 业务过程通常由输入激活,产生输出量度。在许多组织中,包含一系列过程,他们既是某些过程的输入又是某些过程的输出。一系列过程产生的一系列事实表

了解业务过程、业务战略并将之细化到数据和操作型系统。

业务部门不等于业务过程

3.1.2 声明粒度

粒度由获取业务过程事件的操作型系统的物理实现确定(表现为:如何确定事实表中的一行)

  • 客户销售事务上的每个产品扫描到一行中
  • 医生开具的票据内容采用一行表示等

3.1.3 确定维度

维度要解决的是:业务人员是如何描述来自业务过程量度事件的数据

  • 谁、何时、何处、为何等环境信息

3.1.4 确定事实

通过回答:过程的量度是什么(指标)

3.2 零售业务研究

3.2.1 选择业务过程

选择 POS零售交易

3.2.2 声明粒度

选择最细的原子粒度:POS交易的单个产品

3.2.3 确定维度

描述性维度:日期、产品、门店、促销、收银员、支付方式。

3.2.4 确定事实

事实:销售数目、单价、折扣、净支付价格、扩展折扣、美元销售值。

  • 计算获得事实
  • 不可加事实
  • 事务事实表

3.3 维度表设计细节

3.3.1 日期维度

关于每天的各种属性:key、日期、完整描述、周天、日历月、年、假日标识符等等

3.3.2 产品维度

比如产品维度,主键为sku

  • 需要扁平化多对一层次(比如类别只有少量值,大量的是重复的,但是仍可以进行扁平化,不需要额外参考)
  • 具有内嵌含义的列要展平
  • 数字值需要判断是否要放入事实表中(比如价格)
    • 对该数字进行变化分析,需要放在事实表中
    • 该数字变化不大,用于分组或过滤,应放在维度表中
    • 同时需要,则同时放于两种表中
  • 下钻维度属性
    • 合理的产品表应包含50个左右的描述属性
    • 每个属性可以作为约束和构建行头指针的标识的来源,下钻就是从维度表中请求行头指针以提供更多信息(就是按照属性聚合)

3.3.3 商店维度

主要是商店的地理信息属性组成表,商店Key作为主键,商店编号作为自然键

3.3.4 促销维度

促销的属性,可以考虑更细化(按不同类型的促销放入不同的表中)

3.3.5 其他零售业维度

例如促销员维度

3.3.6 事务号码的退化维度

看起来像是事实表的一个维度关键字,但实际上并没有对应的维度表:例如POST事务号、但是可以用来分组等

3.4 实际销售模式

如何查询已有数据。按照需求进行可视化或者SQL查询(BI工具)

销售事实查询关联

3.5 零售模式的扩展能力

针对各种变化如何处理

  • 新的维度属性:维度表添加新列
  • 新的维度:添加新的维度表、向事实表中添加新的外键列
  • 新的可量度事实:向事实表中添加数据(同一粒度),创建新的事实表(不是同一粒度)

3.6 无事实的事实表

例如促销事实表,并不存在相关事实(指标)

3.7 维度与事实表键

  • 维度表的唯一主键应该是代理键而不是来自操作系统的标识符(自然键)。
    • 代理键又称:无意义键、整数键、非自然键、人工键、合成键(自增ID)
    • 自然键:又称业务键、产品键、操作键,表示有意义的组合,比如身份证号、手机号码、各种编码,内部包含很多信息可以用来查询的,针对多维键应该拆开储存
  • 日期维度智能键,一般用于分区,格式为YYYYMMDD的数字
  • 事实表并不强制使用代理建(但是推荐)

3.8 抵制规范化的冲动