文档列表
本页内容

从SAP提取采购到付款(P2P)数据方法指南

SAP采购到付款(P2P)流程数据提取方案

如需用Process Mining分析P2P流程,需从SAP导出高质量event log。以下为常见步骤和结构说明。

1. 明确P2P流程范围

在数据提取前,先明确要分析的流程节点。标准P2P流程包括:

  1. 采购申请(Purchase Requisition)
  2. 采购订单(Purchase Order)
  3. 收货(Goods Receipt)
  4. 发票接收(Invoice Receipt)
  5. 付款(Payment)

2. 确定主要SAP表

通常从以下SAP表提取数据:

流程步骤SAP表说明
Purchase RequisitionEBAN采购申请头
Purchase OrderEKKO / EKPO采购订单头(EKKO)、明细(EKPO)
Goods ReceiptMKPF / MSEG物料凭证头及明细
Invoice ReceiptBKPF / BSEG会计凭证头及明细
PaymentPAYR / REGUH付款单相关表

3. 确定 Event Log 必须字段

以下字段通常为 Process Mining 所需。可根据实际需要调整。

Case ID采购单号 / 文档编号将所有 event 分组到同一流程实例
Activity派生值(如“PO Created”)流程步骤名称
TimestampAEDAT, BUDAT, CPUDT步骤发生时间
User/AgentERNAM, USNAM 等执行动作的人
AmountWRBTR, DMBTR步骤关联金额
Vendor / MaterialLIFNR, MATNR供应商或物料信息

4. 提取原始数据

SAP ECC(ABAP 平台)

  • 用 ABAP 报表直接从相关表提取数据。
  • 或编写自定义 ABAP 程序做多表 join、筛选,导出相关 event 数据。
  • 结果可导出为 CSV 或平面文件。

SAP S/4HANA(HANA 平台)

  • 用 CDS View(Core Data Services)定义逻辑模型并提取数据。
  • 或使用 SAP Fiori 应用、HANA Studio 运行 SQL 脚本。
  • 推荐用 ODATA API、SAP Datasphere、SAP Data Intelligence 做自动化。

5. 构建 Event Log

Process Mining 最少字段:

列名示例说明
Case ID流程实例唯一标识采购订单编号
Activity流程步骤名称”Create PO”, “Post Invoice”
TimestampEvent 日期和时间2025-04-17 10:22:12

可选字段(丰富 Event Log):

字段名说明
User执行动作的用户
AmountEvent 关联金额
Vendor / MaterialEvent 相关供应商或物料
Company CodeEvent 所属公司代码
Currency交易币种
Document Type文档类型(如 PO、GR、Invoice)
Other Fields其他指标(Amount、Vendor、Currency 等)

tip

如存在多个日期字段,可用 unpivot 转为每个 activity 一行,便于分析。

6. 转换与清洗数据

获取原始数据后,需转换为适合 process mining 的结构,通常包含:

  • 统一时间戳(如转为 UTC)
  • 步骤命名清晰(如用“PO Created”代替系统代码)
  • 长格式,每个 event 一行
  • 清理 NULL 值和重复数据
  • Case ID 唯一

常用工具:

  • SQL 脚本清洗与转换
  • Excel 或 Power Query
  • Python + Pandas
  • KNIME、Alteryx、ETL 工具
数据清洗与准备

数据清洗与准备是数据分析流程的关键环节,主要包括识别并修正数据错误、不一致性和不准确性,确保数据可靠。

ABAP 数据提取代码模板示例
" ABAP 示例代码:用于提取 Purchase-to-Pay Event Log 数据
REPORT z_p2p_event_log_export.

TABLES: ekko, ekpo, mseg, mkpf, rbkp, rseg.

DATA: BEGIN OF event_log OCCURS 0,
        case_id        TYPE ekko-ebeln,
        activity       TYPE char40,
        timestamp      TYPE sy-datum,
        username       TYPE sy-uname,
        amount         TYPE ekpo-netwr,
      END OF event_log.

START-OF-SELECTION.

  " 1. 提取采购订单(PO)创建
  SELECT ebeln aedat ernam netwr
    INTO (event_log-case_id, event_log-timestamp, event_log-username, event_log-amount)
    FROM ekko
    WHERE aedat >= '20240101'.
    event_log-activity = 'Create Purchase Order'.
    APPEND event_log.
  ENDSELECT.

  " 2. 提取收货(MIGO)
  SELECT mblnr budat usnam ebeln
    INTO (event_log-case_id, event_log-timestamp, event_log-username, event_log-amount)
    FROM mseg
    INNER JOIN mkpf ON mseg~mblnr = mkpf~mblnr
    WHERE bwart = '101' AND budat >= '20240101'. " GR document type
    event_log-activity = 'Goods Receipt'.
    APPEND event_log.
  ENDSELECT.

  " 3. 提取发票过账(MIRO)
  SELECT ebeln bldat usnam wrbtr
    INTO (event_log-case_id, event_log-timestamp, event_log-username, event_log-amount)
    FROM rseg
    INNER JOIN rbkp ON rseg~belnr = rbkp~belnr
    WHERE bldat >= '20240101'.
    event_log-activity = 'Invoice Posted'.
    APPEND event_log.
  ENDSELECT.

  " 4. 导出结果到文件(根据权限, 可选)
  DATA: filename TYPE string VALUE '/usr/sap/tmp/p2p_event_log.csv',
        file TYPE string,
        rc TYPE i.

  OPEN DATASET filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
  LOOP AT event_log.
    CONCATENATE event_log-case_id
                event_log-activity
                event_log-timestamp
                event_log-username
                event_log-amount
                INTO file SEPARATED BY ';'.
    TRANSFER file TO filename.
  ENDLOOP.
  CLOSE DATASET filename.

  WRITE: / 'Event log exported successfully.'.
ABAP 代码说明
模块作用
ekkoPO 创建表头数据
mseg + mkpf用于收货(GR)记录
rseg + rbkp用于发票(IR)记录
OPEN DATASET将 Event Log 以 CSV 格式写入服务器(需检查权限)
bwart = ‘101’过滤 GR 相关类型
SQL 查询示例:帮助理解数据提取过程

可通过 SQL 查询从相关表中提取。以下为 P2P 流程各步骤示例,可根据项目和 SAP 版本自行调整。

简单示例:

-- 创建采购订单
SELECT
  EKKO.EBELN AS CaseID,
  'PO Created' AS Activity,
  EKKO.AEDAT AS Timestamp,
  EKKO.ERNAM AS User,
  EKKO.LIFNR AS Vendor,
  EKKO.WAERS AS Currency,
  EKKO.BUKRS AS CompanyCode
FROM EKKO
WHERE EKKO.BSART = 'NB'; -- 标准 PO 类型
-- 收货记录
SELECT
  MSEG.EBELN AS CaseID,
  'Goods Receipt' AS Activity,
  MKPF.BUDAT AS Timestamp,
  MKPF.USNAM AS User,
  MSEG.MATNR AS Material,
  MSEG.MENGE AS Quantity
FROM MSEG
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR
WHERE MSEG.BEWTP = 'R'; -- 收货类型
-- 发票过账
SELECT
  BSEG.BELNR AS CaseID,
  'Invoice Posted' AS Activity,
  BKPF.BUDAT AS Timestamp,
  BKPF.USNAM AS User,
  BSEG.WRBTR AS Amount
FROM BSEG
JOIN BKPF ON BSEG.BELNR = BKPF.BELNR
WHERE BKPF.BLART = 'RE'; -- 发票类型

可将上述 logs 合并为统一 Event Log 表用于 process mining:

-- 合并 Event Log(简化 UNION)
SELECT * FROM (
  SELECT 'PO Created' AS Activity, EBELN AS CaseID, AEDAT AS Timestamp FROM EKKO
  UNION
  SELECT 'Goods Receipt', EBELN, BUDAT FROM MSEG JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR
  UNION
  SELECT 'Invoice Posted', BELNR, BUDAT FROM BKPF
) AS EventLog
ORDER BY CaseID, Timestamp;

7. 导出为 Event Log

当你的结构已经统一,至少包含: • Case ID • Activity • Timestamp

专业提示

• 将所有 timestamp 规范为同一时区。 • 确保你的 Case ID 在所有 event 中一致。 • 清理测试或已取消的文档数据。 • 可用公司代码、文档类型、财年等 filter 缩小数据范围。