好的,这是一个非常核心的数据仓库和数据分析问题。建立事实表和维度表的依据主要来自于维度建模理论。其核心思想是将数据分为“事实”(业务过程发生的可度量事件)和“维度”(描述事实的背景上下文)。
下面我将详细解释建立事实表和维度表的依据、原则和步骤。
一、核心依据:业务过程
一切的开端都不是数据本身,而是业务。你需要回答一个问题:“业务用户想要分析什么?”
· 业务过程:指业务中可被跟踪的核心活动或事件。例如:
· 零售:销售订单、退货、库存盘点
· 电商:用户点击、加入购物车、支付
· 金融:贷款发放、客户存款、交易
· 医疗:病人就诊、化验检查
事实表就是这些业务过程在数据世界中的体现。
二、建立事实表的依据
事实表记录了业务过程发生的可度量的数值,通常是数字型的、可加的数据。
- 依据:可度量的事件
· 它回答“有多少?”的问题。
· 它必须包含与某个业务过程相关的、可以聚合的数字。例如:
· 在“销售”业务过程中,可度量的是 销售金额、销售数量、折扣金额。
· 在“用户点击”业务过程中,可度量的是 点击次数。
- 事实表的核心组成部分:
· 外键集合:由多个连接到维度表的外键组成,这些外键共同构成事实表的主键(在事务事实表中),称为代理键。
· 度量值/事实:就是那些可度量的数值(如销售额、数量)。
· 可选的退化维度:一些简单的、没有其他属性的描述性信息,如订单号、发票号,可以直接放在事实表中。
- 事实的类型:
· 可加事实:可以跨所有维度进行有意义的相加。例如:销售数量。
· 半可加事实:只能跨部分维度相加,不能跨时间维度。例如:账户余额,你可以把各个分行的余额加起来,但不能把每天余额加起来。
· 不可加事实:如比例、百分比。通常需要存储其分子和分母作为可加事实。
三、建立维度表的依据
维度表提供了观察和分析事实的“视角”或“背景”,是描述性的文本信息。
- 依据:描述业务事件的“谁、什么、何处、何时、为何”
· 它回答“是什么样的?”的问题。
· 它为事实数据提供丰富的过滤、分组和标签化的能力。
- 维度的核心组成部分:
· 主键:一个唯一的、无意义的代理键(通常是自增ID),用于连接到事实表。
· 属性:描述性的文本字段。例如:
· 客户维度:客户姓名、性别、年龄、所在城市。
· 产品维度:产品名称、品牌、类别、规格。
· 时间维度:年、季度、月、日、星期。
- 常见的维度类型:
· 标准维度:最常用的类型,如客户、产品、时间维度。
· 时间维度:非常特殊且重要,通常需要预先建立,包含所有可能用到的日期及其属性。
· 退化维度:没有独立维度表,其属性被放回事实表中。
· 缓慢变化维:处理维度属性随时间变化的问题(例如客户地址变更),有Type 1(覆盖)、Type 2(增加新行)、Type 3(增加新列)等策略。
四、实践步骤:如何具体建立
这个过程可以总结为以下四步:
第一步:选择业务过程
· 与业务部门沟通,确定最需要分析的核心环节。例如,优先分析“销售情况”。
第二步:声明粒度
· 这是最关键的一步! 粒度指的是事实表中的一行代表什么。
· 例如:
· “一行代表一个订单?”(粒度较粗,无法看订单内商品)
· “一行代表一个订单中的一个商品项?”(粒度更细,这是最常见的做法)
· 原则:选择最原子级的、不可再分的数据粒度。这为后续分析提供了最大的灵活性。
第三步:确定维度
· 基于第二步确定的粒度,列出所有描述该粒度所需的上下文信息。
· 示例:如果粒度是“一个订单中的一个商品项”,那么维度可能包括:
· 时间维度(下单时间)
· 产品维度(是什么商品)
· 客户维度(是谁买的)
· 店铺维度(在哪个店买的)
· 促销维度(是否参与了促销)
第四步:确定事实
· 基于第二步确定的粒度,列出所有可度量的数值。
· 示例:同样对于“一个订单中的一个商品项”,事实可能包括:
· 销售数量(买了几个)
· 商品单价
· 销售额(数量 * 单价)
· 折扣金额
五、一个简单的例子:零售销售
- 业务过程:线下门店销售。
- 粒度:每一行代表一张销售小票上的一个商品。
- 维度:
· DimDate(时间维度表)
· DimProduct(产品维度表)
· DimStore(门店维度表)
· DimCustomer(客户维度表,如果会员购买) - 事实:
· SalesQuantity(销售数量)
· UnitPrice(单价)
· SalesAmount(销售金额)
**最终模型(星型模式):
**
事实表:FactSales
DateKey (FK -> DimDate)
ProductKey (FK -> DimProduct)
StoreKey (FK -> DimStore)
CustomerKey (FK -> DimCustomer)
SalesQuantity
UnitPrice
SalesAmount
TicketNumber (退化维度)
总结
建立事实表和维度表的核心依据是:
事实表 维度表
代表什么 业务过程(发生了什么) 业务对象(谁、什么、哪里)
核心内容 度量值(可计算的数字) 描述属性(用于筛选、分组)
依据问题 “有多少?” “是什么样的?”
设计起点 声明粒度(一行代表什么) 围绕粒度(提供该行的上下文)
记住这个经典口诀:“业务过程驱动,粒度先行”。首先深入理解业务,然后确定最细的粒度,维度自然围绕粒度展开,事实则是该粒度上可度量的结果。
3166

被折叠的 条评论
为什么被折叠?



