2. 数据仓库基础概念回顾:星型模型、雪花模型、事实表与维度表、缓慢变化维度(SCD)类型

在深入采购支出数据仓库设计之前,必须牢固掌握数据仓库的四大核心概念:星型模型、雪花模型、事实表与维度表以及缓慢变化维度(SCD)。这些概念是构建高效、可扩展分析系统的基石,直接影响ETL流程的设计与品类分类趋势分析的准确性。

2.1 事实表与维度表:数据仓库的“动词”与“名词”

数据仓库的建模通常采用维度建模方法,其核心是将业务度量与描述性上下文分离,形成两种核心表:

表类型 核心作用 特征 采购支出示例
事实表 记录业务过程的度量(“发生了什么”) 行数巨大、可追加、包含外键和数值度量 采购订单事实表:包含订单金额、数量、折扣、外键(时间、供应商、品类、部门)
维度表 描述业务过程的上下文(“谁、什么、何时、何地”) 行数相对较小、宽表、包含文本描述和层次属性 品类维度表:包含品类ID、品类名称、品类层级(大类/中类/小类)、采购经理
关键原则:事实表负责“胖”(行数多),维度表负责“宽”(列数多)。在采购分析中,品类维度表是趋势分析的核心驱动表,其质量直接决定分析深度。

2.2 星型模型 vs. 雪花模型

这两种模型是维度建模中最常见的两种架构,主要区别在于维度表的规范化程度。

对比维度 星型模型 雪花模型
维度表结构 非规范化,一张宽表包含所有层级属性 规范化,将层级拆分为多个子维度表
查询性能 高(减少JOIN次数) 较低(需要多次JOIN)
数据冗余 高(存在重复描述) 低(数据一致性更好)
ETL复杂度 简单 较复杂
易用性 高(业务用户容易理解) 较低(表关系复杂)
采购场景推荐 品类趋势分析、仪表盘 高度规范化的主数据管理(如供应商层级)
采购实践建议:对于品类分类趋势分析,强烈推荐使用星型模型。将品类层级(如“电子设备 > 计算机 > 笔记本电脑”)直接作为品类维度表的列,可以大幅简化SQL查询,提升BI报表的响应速度。
星型模型 vs 雪花模型结构对比 星型模型 采购事实表 金额、数量、外键 时间维度 品类维度 供应商维度 雪花模型 采购事实表 金额、数量、外键 品类子维度 品类主维度 供应商维度

2.3 缓慢变化维度(SCD)类型

维度表中的属性(如品类名称、供应商评级)会随时间发生变化。SCD策略定义了如何处理这些历史变化,以确保分析报表的准确性。在采购支出分析中,品类重分类和供应商合并是典型的SCD场景。

SCD类型 处理方式 适用场景 采购示例
类型1 直接覆盖旧值,不保留历史 错误修正、不重要的属性 修正品类描述中的拼写错误
类型2 新增一条记录,使用代理键和生效/失效日期 需要保留历史分析(最常用) 品类从“办公用品”重分类为“IT耗材”,需保留历史采购归属
类型3 增加新列存储“当前值”和“原始值” 仅需跟踪有限的历史版本 供应商评级从“A”变为“B”,同时保留“上一评级”列
常见陷阱:在品类分类趋势分析中,如果使用类型1处理品类重分类,会导致历史数据被错误地归入新品类,使得“去年电子设备支出”与“今年电子设备支出”口径不一致,趋势分析完全失效。必须使用类型2来保证时间序列的准确性。
SCD 类型 2:品类重分类处理流程 源系统变更 品类ID: C001 新名称: IT耗材 ETL 检测变化 名称 vs 维度表 发现不一致 维度表操作(类型2) 1. 旧记录: 失效日期 = 昨天 2. 新记录: 生效日期 = 今天 新名称 = "IT耗材" 类型2 核心机制:双记录并行 • 旧记录(失效):历史采购订单通过外键关联到旧品类记录,历史报表保持不变。 • 新记录(生效):新采购订单关联到新品类记录,当前报表反映最新分类。 • 分析时通过 WHERE 生效日期 <= 订单日期 AND 失效日期 > 订单日期 实现时间切片。

2.4 本章小结:采购场景下的模型选择

  • 模型选择:采购支出分析优先采用星型模型,将品类层级扁平化存储,提升查询效率。
  • 维度设计:品类维度表应包含代理键(用于SCD)、品类代码、多级分类名称(大类/中类/小类)、生效日期、失效日期、当前标志。
  • SCD策略:对于品类重分类、供应商合并等关键属性变化,强制使用SCD类型2,确保历史趋势分析的可追溯性。
  • ETL落地:在ETL的“维度处理”步骤中,必须实现SCD类型2的检测与更新逻辑,这是保证数据仓库数据质量的生命线。