3. 供应商报价数据结构:字段定义与数据质量要求
供应商报价数据是报价偏离度分析的基础。如果底层数据定义不清晰、质量不可控,后续所有偏离度计算、排名、预警都将失去意义。本章从字段定义和数据质量两个维度,建立报价数据的标准化规范。
3.1 核心字段定义
报价比较场景下,每条报价记录至少应包含以下 7 个核心字段。字段类型与约束直接影响后续 SQL 聚合与偏离度计算逻辑。
| 字段名 | 数据类型 | 约束 | 业务说明 |
|---|---|---|---|
| 物料号 | VARCHAR(20) | NOT NULL, 唯一索引 | 企业物料主数据编码,关联物料分类、规格、单位 |
| 供应商名 | VARCHAR(100) | NOT NULL | 供应商全称或统一社会信用代码对应名称 |
| 报价金额 | DECIMAL(18,2) | NOT NULL, > 0 | 含税或不含税需统一约定,偏离度计算以该值为准 |
| 报价日期 | DATE | NOT NULL | 供应商提交报价的日期,用于时间窗口筛选 |
| 交货期 | INT | NOT NULL, > 0 | 以天为单位,从下单到交货的承诺天数 |
| 报价币种 | VARCHAR(3) | NOT NULL, 默认 CNY | 用于汇率统一转换,避免金额直接比较偏差 |
| 报价版本 | INT | NOT NULL, 默认 1 | 同一供应商对同一物料多次报价时区分版本 |
实践建议:报价金额字段建议统一为“不含税到厂价”,并在字段备注中注明价格条件(FOB/CIF/DDP)。偏离度分析前,所有报价必须按同一价格基准做归一化处理。
3.2 数据质量六大要求
数据质量是报价偏离度分析的“地基”。根据采购管理平台的实际落地经验,以下六项要求必须通过系统校验规则强制执行:
- 完整性:物料号、供应商名、报价金额、报价日期四个字段不允许为空。缺失任意一项,该条报价记录应被标记为“无效报价”,不参与偏离度计算。
- 唯一性:同一物料号 + 同一供应商名 + 同一报价版本 的组合必须唯一。重复记录应通过“报价日期最新优先”规则去重。
- 一致性:物料号必须在企业物料主数据中存在;供应商名必须在供应商主数据中已注册。系统应做外键校验。
- 准确性:报价金额必须大于 0,且不能超过该物料历史平均价格的 10 倍或低于 0.1 倍(可配置阈值)。超出范围触发人工审核。
- 时效性:报价日期必须在当前日期 180 天以内(可配置)。超过 180 天的报价视为过期,不纳入偏离度分析。
- 规范性:币种统一使用 ISO 4217 三位字母码;交货期必须为正整数;报价版本从 1 开始递增。
常见陷阱:很多企业只关注报价金额本身,忽略了“报价日期”和“报价版本”字段。当同一供应商在两周内两次报价时,如果没有版本控制,系统会错误地用旧报价计算偏离度,导致预警误报。
3.3 数据质量校验流程
下图展示了报价数据从录入到进入偏离度分析引擎前的质量校验流程。每个环节的失败记录都会被写入“数据质量日志”,供采购员追溯修正。
3.4 数据质量评分卡
为了量化评估报价数据质量,建议引入“数据质量评分卡”机制。每月对报价数据质量进行打分,低于 90 分的物料组应暂停偏离度分析,优先完成数据治理。
| 质量维度 | 权重 | 计算方式 | 达标阈值 |
|---|---|---|---|
| 完整性 | 25% | 非空字段数 / 应填字段总数 × 100 | ≥ 98% |
| 唯一性 | 20% | 1 - (重复记录数 / 总记录数) × 100 | ≥ 99% |
| 一致性 | 20% | 通过外键校验的记录数 / 总记录数 × 100 | ≥ 95% |
| 准确性 | 20% | 金额在合理范围内的记录数 / 总记录数 × 100 | ≥ 97% |
| 时效性 | 15% | 报价日期在有效期内的记录数 / 总记录数 × 100 | ≥ 90% |
落地要点:数据质量评分卡应嵌入采购管理平台的“数据看板”模块,每天自动刷新。当某个物料组的完整性得分低于 90% 时,系统自动向该物料组采购员发送治理工单,并锁定该组报价偏离度分析功能,直到数据质量恢复。
3.5 数据模型示例(DDL)
以下为供应商报价表的 DDL 定义,包含字段约束和索引设计,可直接用于 MySQL / PostgreSQL 数据库建表。
CREATE TABLE supplier_quote (
quote_id BIGINT AUTO_INCREMENT PRIMARY KEY,
material_code VARCHAR(20) NOT NULL COMMENT '物料号',
supplier_name VARCHAR(100) NOT NULL COMMENT '供应商名',
quote_amount DECIMAL(18,2) NOT NULL COMMENT '报价金额',
quote_date DATE NOT NULL COMMENT '报价日期',
delivery_days INT NOT NULL COMMENT '交货期(天)',
currency_code VARCHAR(3) NOT NULL DEFAULT 'CNY' COMMENT '币种',
quote_version INT NOT NULL DEFAULT 1 COMMENT '报价版本',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-- 唯一约束:同一物料+供应商+版本唯一
UNIQUE KEY uk_material_supplier_version (material_code, supplier_name, quote_version),
-- 索引:按物料和报价日期快速检索
INDEX idx_material_date (material_code, quote_date),
-- 外键约束(需先建立物料主表和供应商主表)
CONSTRAINT fk_material FOREIGN KEY (material_code) REFERENCES material_master(material_code),
CONSTRAINT fk_supplier FOREIGN KEY (supplier_name) REFERENCES supplier_master(supplier_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商报价表';