根据什么依据建立事实表和维度表?

好的,这是一个非常核心的数据仓库和数据分析问题。建立事实表和维度表的依据主要来自于维度建模理论。其核心思想是将数据分为“事实”(业务过程发生的可度量事件)和“维度”(描述事实的背景上下文)。

下面我将详细解释建立事实表和维度表的依据、原则和步骤。

一、核心依据:业务过程

一切的开端都不是数据本身,而是业务。你需要回答一个问题:“业务用户想要分析什么?”

· 业务过程:指业务中可被跟踪的核心活动或事件。例如:
· 零售:销售订单、退货、库存盘点
· 电商:用户点击、加入购物车、支付
· 金融:贷款发放、客户存款、交易
· 医疗:病人就诊、化验检查

事实表就是这些业务过程在数据世界中的体现。


二、建立事实表的依据

事实表记录了业务过程发生的可度量的数值,通常是数字型的、可加的数据。

  1. 依据:可度量的事件

· 它回答“有多少?”的问题。
· 它必须包含与某个业务过程相关的、可以聚合的数字。例如:
· 在“销售”业务过程中,可度量的是 销售金额、销售数量、折扣金额。
· 在“用户点击”业务过程中,可度量的是 点击次数。

  1. 事实表的核心组成部分:

· 外键集合:由多个连接到维度表的外键组成,这些外键共同构成事实表的主键(在事务事实表中),称为代理键。
· 度量值/事实:就是那些可度量的数值(如销售额、数量)。
· 可选的退化维度:一些简单的、没有其他属性的描述性信息,如订单号、发票号,可以直接放在事实表中。

  1. 事实的类型:

· 可加事实:可以跨所有维度进行有意义的相加。例如:销售数量。
· 半可加事实:只能跨部分维度相加,不能跨时间维度。例如:账户余额,你可以把各个分行的余额加起来,但不能把每天余额加起来。
· 不可加事实:如比例、百分比。通常需要存储其分子和分母作为可加事实。


三、建立维度表的依据

维度表提供了观察和分析事实的“视角”或“背景”,是描述性的文本信息。

  1. 依据:描述业务事件的“谁、什么、何处、何时、为何”

· 它回答“是什么样的?”的问题。
· 它为事实数据提供丰富的过滤、分组和标签化的能力。

  1. 维度的核心组成部分:

· 主键:一个唯一的、无意义的代理键(通常是自增ID),用于连接到事实表。
· 属性:描述性的文本字段。例如:
· 客户维度:客户姓名、性别、年龄、所在城市。
· 产品维度:产品名称、品牌、类别、规格。
· 时间维度:年、季度、月、日、星期。

  1. 常见的维度类型:

· 标准维度:最常用的类型,如客户、产品、时间维度。
· 时间维度:非常特殊且重要,通常需要预先建立,包含所有可能用到的日期及其属性。
· 退化维度:没有独立维度表,其属性被放回事实表中。
· 缓慢变化维:处理维度属性随时间变化的问题(例如客户地址变更),有Type 1(覆盖)、Type 2(增加新行)、Type 3(增加新列)等策略。


四、实践步骤:如何具体建立

这个过程可以总结为以下四步:

第一步:选择业务过程

· 与业务部门沟通,确定最需要分析的核心环节。例如,优先分析“销售情况”。

第二步:声明粒度

· 这是最关键的一步! 粒度指的是事实表中的一行代表什么。
· 例如:
· “一行代表一个订单?”(粒度较粗,无法看订单内商品)
· “一行代表一个订单中的一个商品项?”(粒度更细,这是最常见的做法)
· 原则:选择最原子级的、不可再分的数据粒度。这为后续分析提供了最大的灵活性。

第三步:确定维度

· 基于第二步确定的粒度,列出所有描述该粒度所需的上下文信息。
· 示例:如果粒度是“一个订单中的一个商品项”,那么维度可能包括:
· 时间维度(下单时间)
· 产品维度(是什么商品)
· 客户维度(是谁买的)
· 店铺维度(在哪个店买的)
· 促销维度(是否参与了促销)

第四步:确定事实

· 基于第二步确定的粒度,列出所有可度量的数值。
· 示例:同样对于“一个订单中的一个商品项”,事实可能包括:
· 销售数量(买了几个)
· 商品单价
· 销售额(数量 * 单价)
· 折扣金额


五、一个简单的例子:零售销售

  1. 业务过程:线下门店销售。
  2. 粒度:每一行代表一张销售小票上的一个商品。
  3. 维度:
    · DimDate(时间维度表)
    · DimProduct(产品维度表)
    · DimStore(门店维度表)
    · DimCustomer(客户维度表,如果会员购买)
  4. 事实:
    · SalesQuantity(销售数量)
    · UnitPrice(单价)
    · SalesAmount(销售金额)

**最终模型(星型模式):
**

事实表:FactSales
DateKey (FK -> DimDate)
ProductKey (FK -> DimProduct)
StoreKey (FK -> DimStore)
CustomerKey (FK -> DimCustomer)
SalesQuantity
UnitPrice
SalesAmount
TicketNumber (退化维度)

总结

建立事实表和维度表的核心依据是:

事实表 维度表
代表什么 业务过程(发生了什么) 业务对象(谁、什么、哪里)
核心内容 度量值(可计算的数字) 描述属性(用于筛选、分组)
依据问题 “有多少?” “是什么样的?”
设计起点 声明粒度(一行代表什么) 围绕粒度(提供该行的上下文)

记住这个经典口诀:“业务过程驱动,粒度先行”。首先深入理解业务,然后确定最细的粒度,维度自然围绕粒度展开,事实则是该粒度上可度量的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值