2. 采购业务建模:核心业务实体关系分析
采购支出数据仓库的基石是对采购到付款(Procure-to-Pay, P2P)全链路业务实体的准确建模。本章将深入分析采购订单、收货单、发票、供应商主数据四大核心实体及其之间的业务关系,为后续维度建模与ETL校验规则奠定基础。
2.1 四大核心业务实体定义
在采购业务中,每个实体都承载着特定的业务语义与数据属性。下表归纳了各实体的核心定位与关键字段:
| 实体名称 | 业务定位 | 关键标识字段 | 状态生命周期 |
|---|---|---|---|
| 采购订单(PO) | 采购需求的正式下达,包含物料、数量、单价、交货日期 | PO编号、PO行号、物料编码、采购组织 | 已创建 → 已审批 → 已发货 → 已收货 → 已结算 |
| 收货单(GR) | 实物入库的确认凭证,记录实际到货数量与质量 | 收货单号、收货行号、PO参考号、库位 | 待检 → 已质检 → 已入库 → 已退货 |
| 发票(IV) | 供应商开具的付款凭证,记录应付金额与税额 | 发票号、发票行号、PO参考号、GR参考号 | 已录入 → 已校验 → 已过账 → 已付款 |
| 供应商主数据(Vendor) | 供应商基础信息与资质档案 | 供应商编码、税号、银行账户、付款条款 | 潜在 → 合格 → 黑名单 → 冻结 |
建模要点: 采购订单行(PO Line)是事实表的最小粒度,而非订单头。因为同一订单可能包含不同物料、不同交货日期,行级分析才能准确反映采购支出明细。
2.2 实体间核心业务关系
四大实体通过“采购到付款”流程形成网状关联。理解这些关系是设计数据仓库事实表与维度表关联键的前提。
- PO → GR(1:N): 一张采购订单允许分多次收货,每次收货生成独立的收货单。关键关联字段为PO编号+PO行号。
- GR → IV(1:1 或 N:1): 收货单与发票的匹配是“三单匹配”的核心。理想情况下,一张收货单对应一张发票行;但实务中常出现合并开票(多张GR对应一张IV)或拆分开票(一张GR对应多张IV)。
- PO → IV(N:M): 发票可以直接引用PO,也可以引用GR后间接关联PO。在数据仓库中,需要同时保留PO与IV的直接关联和间接关联路径。
- Vendor → PO/IV: 供应商是采购订单和发票的公共维度,通过供应商编码关联。供应商主数据的变更(如付款条款调整)会直接影响应付账款计算。
三单匹配校验规则: 数据仓库在ETL阶段必须校验PO数量 ≥ GR数量 ≥ IV数量,且PO单价与IV单价的偏差不得超过预设阈值(如±5%)。这是价格方差校验的核心逻辑。
2.3 实体关系图(SVG)
下图展示了采购核心实体之间的关联关系与数据流向,箭头方向代表业务驱动顺序:
2.4 实体关系矩阵与业务约束
为了在数据仓库中准确还原业务关系,需要定义实体间的关联矩阵与关键业务约束:
| 源实体 | 目标实体 | 关联基数 | 关联键 | 业务约束 |
|---|---|---|---|---|
| 采购订单(PO) | 收货单(GR) | 1:N | PO编号 + PO行号 | GR累计收货数量 ≤ PO订购数量 |
| 收货单(GR) | 发票(IV) | 1:1 或 N:1 | GR编号 | IV开票数量 ≤ GR收货数量 |
| 采购订单(PO) | 发票(IV) | N:M | PO编号(间接) | IV含税总金额 ≤ PO含税总金额(含容差) |
| 供应商(Vendor) | 采购订单(PO) | 1:N | 供应商编码 | PO供应商状态必须为“合格” |
| 供应商(Vendor) | 发票(IV) | 1:N | 供应商编码 | IV供应商税号与主数据一致 |
常见建模陷阱: 不要直接将ERP中的采购订单头作为事实表粒度。同一订单头下不同行号的物料、单价、交货期可能完全不同,行级建模才能支持准确的支出分析与价格校验。此外,供应商主数据中的付款条款变更属于缓慢变化维度(SCD Type 2),需要在事实表中记录生效日期。
2.5 业务实体到数据仓库的映射策略
将上述业务实体映射到数据仓库模型时,遵循以下策略:
- 采购订单维度: 以PO行号为自然键,包含物料、数量、单价、交货日期等属性。PO头信息(如采购组织、采购组)作为退化维度或桥接表处理。
- 收货事实表: 以GR行号为粒度,记录实际收货数量、质检结果、入库时间。关联PO行键与供应商键。
- 发票事实表: 以IV行号为粒度,记录开票数量、含税金额、税额、付款到期日。关联GR行键与PO行键。
- 采购支出事实表: 以PO行+GR行+IV行的组合为粒度,支持三单匹配校验。包含价格方差、数量差异、金额差异等度量值。
- 供应商维度: 采用SCD Type 2,记录供应商名称、税号、银行账户、付款条款、资质等级、生效日期与失效日期。
ETL校验前置条件: 在加载采购支出事实表之前,必须完成以下校验:
① PO行号在采购订单维度中存在且状态为“已审批”;
② GR行号对应的PO行号存在且收货数量未超订购数量;
③ IV行号对应的GR行号存在且开票数量未超收货数量;
④ 供应商编码在供应商维度中存在且状态为“合格”。
① PO行号在采购订单维度中存在且状态为“已审批”;
② GR行号对应的PO行号存在且收货数量未超订购数量;
③ IV行号对应的GR行号存在且开票数量未超收货数量;
④ 供应商编码在供应商维度中存在且状态为“合格”。
通过上述实体关系分析与建模策略,采购支出数据仓库能够准确还原P2P全链路业务,为后续的价格方差校验、供应商绩效分析、采购支出洞察提供坚实的数据基础。