2. 数据仓库基础概念回顾:星型模型、雪花模型、事实表与维度表、缓慢变化维度(SCD)类型
在深入采购支出数据仓库设计之前,必须牢固掌握数据仓库的四大核心概念:星型模型、雪花模型、事实表与维度表以及缓慢变化维度(SCD)。这些概念是构建高效、可扩展分析系统的基石,直接影响ETL流程的设计与品类分类趋势分析的准确性。
2.1 事实表与维度表:数据仓库的“动词”与“名词”
数据仓库的建模通常采用维度建模方法,其核心是将业务度量与描述性上下文分离,形成两种核心表:
| 表类型 | 核心作用 | 特征 | 采购支出示例 |
|---|---|---|---|
| 事实表 | 记录业务过程的度量(“发生了什么”) | 行数巨大、可追加、包含外键和数值度量 | 采购订单事实表:包含订单金额、数量、折扣、外键(时间、供应商、品类、部门) |
| 维度表 | 描述业务过程的上下文(“谁、什么、何时、何地”) | 行数相对较小、宽表、包含文本描述和层次属性 | 品类维度表:包含品类ID、品类名称、品类层级(大类/中类/小类)、采购经理 |
关键原则:事实表负责“胖”(行数多),维度表负责“宽”(列数多)。在采购分析中,品类维度表是趋势分析的核心驱动表,其质量直接决定分析深度。
2.2 星型模型 vs. 雪花模型
这两种模型是维度建模中最常见的两种架构,主要区别在于维度表的规范化程度。
| 对比维度 | 星型模型 | 雪花模型 |
|---|---|---|
| 维度表结构 | 非规范化,一张宽表包含所有层级属性 | 规范化,将层级拆分为多个子维度表 |
| 查询性能 | 高(减少JOIN次数) | 较低(需要多次JOIN) |
| 数据冗余 | 高(存在重复描述) | 低(数据一致性更好) |
| ETL复杂度 | 简单 | 较复杂 |
| 易用性 | 高(业务用户容易理解) | 较低(表关系复杂) |
| 采购场景推荐 | 品类趋势分析、仪表盘 | 高度规范化的主数据管理(如供应商层级) |
采购实践建议:对于品类分类趋势分析,强烈推荐使用星型模型。将品类层级(如“电子设备 > 计算机 > 笔记本电脑”)直接作为品类维度表的列,可以大幅简化SQL查询,提升BI报表的响应速度。
2.3 缓慢变化维度(SCD)类型
维度表中的属性(如品类名称、供应商评级)会随时间发生变化。SCD策略定义了如何处理这些历史变化,以确保分析报表的准确性。在采购支出分析中,品类重分类和供应商合并是典型的SCD场景。
| SCD类型 | 处理方式 | 适用场景 | 采购示例 |
|---|---|---|---|
| 类型1 | 直接覆盖旧值,不保留历史 | 错误修正、不重要的属性 | 修正品类描述中的拼写错误 |
| 类型2 | 新增一条记录,使用代理键和生效/失效日期 | 需要保留历史分析(最常用) | 品类从“办公用品”重分类为“IT耗材”,需保留历史采购归属 |
| 类型3 | 增加新列存储“当前值”和“原始值” | 仅需跟踪有限的历史版本 | 供应商评级从“A”变为“B”,同时保留“上一评级”列 |
常见陷阱:在品类分类趋势分析中,如果使用类型1处理品类重分类,会导致历史数据被错误地归入新品类,使得“去年电子设备支出”与“今年电子设备支出”口径不一致,趋势分析完全失效。必须使用类型2来保证时间序列的准确性。
2.4 本章小结:采购场景下的模型选择
- 模型选择:采购支出分析优先采用星型模型,将品类层级扁平化存储,提升查询效率。
- 维度设计:品类维度表应包含代理键(用于SCD)、品类代码、多级分类名称(大类/中类/小类)、生效日期、失效日期、当前标志。
- SCD策略:对于品类重分类、供应商合并等关键属性变化,强制使用SCD类型2,确保历史趋势分析的可追溯性。
- ETL落地:在ETL的“维度处理”步骤中,必须实现SCD类型2的检测与更新逻辑,这是保证数据仓库数据质量的生命线。