2. 数据源分析:常见采购数据源与格式差异
采购支出数据仓库的ETL管道面临的首要挑战是数据源的多样性。不同企业、不同业务阶段所采用的采购系统各不相同,导致源数据的结构、语义和质量参差不齐。本章将系统分析三类最常见的采购数据源——ERP、SRM和供应商门户,并深入探讨它们的数据格式差异与字段映射策略。
2.1 常见采购数据源概览
根据企业采购数字化成熟度,数据源通常分为以下三个层级:
| 数据源类型 | 典型系统 | 数据主导方 | 数据质量特征 | ETL接入难度 |
|---|---|---|---|---|
| ERP | SAP ECC/S4HANA、Oracle EBS、用友NC | 企业内部财务/供应链 | 结构化强,主数据较规范,但价格字段常被财务逻辑干扰 | 中 |
| SRM | SAP Ariba、Coupa、甄云、企企通 | 采购部门/供应商协同 | 包含谈判价、合同价、报价单,但版本管理复杂 | 中高 |
| 供应商门户 | 供应商自建Portal、EDI平台、邮件附件 | 供应商 | 格式最不统一,字段命名随意,价格单位常出错 | 高 |
关键洞察: 价格方差清洗的核心难点并非单一系统的内部数据,而是跨系统间同一采购订单的价格字段语义不一致。例如,ERP中的"净价"可能已扣除折扣,而SRM中的"单价"可能是含税毛价。
2.2 数据格式差异与解析策略
不同数据源输出的文件格式差异巨大,直接影响ETL管线的解析逻辑与容错设计。以下是三种主流格式的对比:
| 格式 | 典型场景 | 优点 | 缺点 | ETL解析要点 |
|---|---|---|---|---|
| CSV | ERP定期导出、供应商邮件附件 | 人类可读,体积小,通用性强 | 无Schema约束,编码混乱,分隔符冲突 | 需检测分隔符、处理引号转义、统一UTF-8编码 |
| XML | SRM系统接口、EDI标准报文 | 结构清晰,支持嵌套,Schema可验证 | 冗余标签多,解析性能较低 | 使用XPath提取价格节点,注意命名空间 |
| API JSON | 云SRM实时接口、供应商门户RESTful API | 轻量,易于程序处理,支持分页 | 字段命名风格各异,嵌套深度不可控 | 需处理分页、限流、字段驼峰/下划线转换 |
实践建议: 对于CSV文件,建议在ETL首阶段执行"格式探测"——自动识别分隔符、引号字符和行尾符,避免因文件格式微变导致整个管道断裂。
2.3 源系统字段映射:从业务语义到技术字段
字段映射是数据对齐的基础。同一个业务概念(如"采购单价")在不同系统中可能拥有完全不同的字段名、数据类型和业务含义。以下是一个典型的字段映射表示例:
| 目标字段(数据仓库) | ERP源字段 | SRM源字段 | 供应商门户字段 | 映射规则/转换逻辑 |
|---|---|---|---|---|
po_number |
EBELN | PurchaseOrderID | PO_No | 统一转为字符串,去除前导零 |
unit_price |
NETPR | UnitPrice | 单价 | 统一转为Decimal(18,4),去除货币符号 |
currency |
WAERS | CurrencyCode | 币种 | 统一转为ISO 4217三字母代码 |
tax_code |
MWSKZ | TaxIndicator | 税率 | 映射为标准化税率代码表 |
price_unit |
PEINH | PriceUnit | 单位 | 统一转为基准单位(如EA、KG) |
常见陷阱: 供应商门户中的"单价"字段经常出现单位不一致问题。例如,某供应商以"每百件"报价,而ERP以"每件"记录。若ETL未做单位归一化,价格方差计算将产生数量级错误。
2.4 数据源集成架构图
下图展示了从多源采购系统到数据仓库的ETL集成架构,重点标注了价格字段在各个环节的流转与对齐点:
2.5 数据源质量评估矩阵
在ETL设计阶段,建议对每个数据源进行质量预评估,以便为价格方差清洗设置合理的阈值与异常处理策略:
| 评估维度 | ERP | SRM | 供应商门户 | 对价格方差的影响 |
|---|---|---|---|---|
| 字段完整性 | 高(>95%) | 中高(85-95%) | 低(60-80%) | 缺失价格字段将导致方差计算跳过该记录 |
| 单位一致性 | 高 | 中 | 低 | 单位不一致是价格方差的最大噪声源 |
| 时间戳精度 | 高(到秒) | 中(到日) | 低(到月或无) | 影响价格有效期的对齐精度 |
| 货币标准化 | 高 | 高 | 低(常缺失) | 货币缺失时需使用默认值或上下文推断 |
ETL设计原则: 针对供应商门户数据源,建议在管道中增加"数据源可信度标签"字段。当价格方差超出阈值时,可优先排查低可信度数据源,快速定位问题根因。