このページの内容

SAPからP2Pデータ抽出方法とプロセスマイニング

購買から支払い(P2P)プロセス向けSAPデータ抽出ガイド

プロセスマイニングで購買から支払い(P2P)プロセスを分析するには、SAPから高品質なイベントログを抽出する必要があります。以下は一般的な手順とデータ構造です。

1. P2Pプロセスのスコープ定義

データ抽出前に、対象となるプロセスステップを明確にしましょう。標準的なP2Pプロセスは以下で構成されます:

  1. Purchase Requisition(購買依頼)
  2. 購買発注(購買発注)
  3. Goods Receipt(入荷受付)
  4. Invoice Receipt(請求書受領)
  5. Payment(支払い)

2. 主要なSAPテーブルの特定

通常は下記のテーブルからデータを抽出します:

プロセスステップSAPテーブル説明
Purchase RequisitionEBAN購買依頼ヘッダー
購買発注EKKO / EKPO発注書ヘッダー(EKKO)&明細(EKPO)
Goods ReceiptMKPF / MSEG物品移動ヘッダー&明細
Invoice ReceiptBKPF / BSEG会計伝票ヘッダー&明細
PaymentPAYR / REGUH支払伝票

3. イベントログに必要なフィールドの特定

プロセスマイニング用のイベントログには以下のフィールドが必要です。用途に応じて調整してください。

Case IDPO番号 / ドキュメント番号1つのプロセス内のイベントをグループ化
Activity派生値(例: “PO Created”)プロセスステップ名
TimestampAEDAT, BUDAT, CPUDTステップ実施日時
ユーザー/担当者ERNAM, USNAM など実行者
AmountWRBTR, DMBTRステップに関連した金額
Vendor / MaterialLIFNR, MATNR取引先または品目情報

4. 生データの抽出

SAP ECC(ABAPスタック)

  • 関連テーブルからABAPレポートで直接データを抽出
  • またはカスタムABAPプログラムでイベントデータを結合・フィルタ・エクスポート
  • 結果はCSVやフラットファイルで出力可能

SAP S/4HANA(HANAスタック)

  • CDS View(Core Data Services)で論理モデルを定義しデータ抽出
  • SAP FioriアプリやHANA StudioでSQLスクリプトを実行
  • ODATA API、SAP Datasphere、SAP Data Intelligenceと連携し自動化も可能

5. イベントログの作成

プロセスマイニングに必要な最小限のカラム

カラム
ケースIDプロセスインスタンスの一意識別子購買発注 ID
Activityプロセスステップの名前”Create PO”, “Post Invoice”
Timestampイベント発生日時2025-04-17 10:22:12

イベントログを充実させるためのオプションカラム

カラム名説明
User操作を実行したユーザー
Amountイベントに関連する金額
Vendor / Materialイベントに関わるベンダーやマテリアル
Company Codeイベントに紐づく会社コード
Currency取引通貨
Document Typeドキュメントタイプ (例: PO, GR, Invoice)
その他のフィールド金額、ベンダー、通貨など

tip

必要に応じてデータをアンピボットし、複数の日付フィールドを1アクティビティにつき1行にまとめましょう。

6. データの変換とクレンジング

生データを取得したら、プロセスマイニング用の形式に整形します。主な作業は:

  • タイムスタンプの正規化(例:UTC変換)
  • 活動名の分かりやすいラベル付け(例:MIGOコード→“PO Created”)
  • 1イベント1行(ロング形式)での整形
  • NULL値や重複データをクレンジング
  • Case IDの一貫性(インスタンスごとに一意)

活用できる主なツール:

  • SQLスクリプト
  • ExcelやPower Query
  • Python(Pandas)
  • KNIME、AlteryxなどETLツール
データクレンジングと準備

データ分析プロセスにおいて、データクレンジングと準備は重要なステップです。データ品質と信頼性を高めるために、エラーや不整合、誤りを特定し修正します。

データ抽出用ABAPコード例

" Example ABAP code to extract Purchase-to-Pay event log data
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. Extract Purchase Order creation
  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. Extract Goods Receipt (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. Extract Invoice Posting (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. Export results to file (optional, if permissions allow)
  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コードの補足

セクション目的
ekko発注書作成ヘッダテーブル
mseg + mkpf入荷受付(GR)の明細・ヘッダー
rseg + rbkp請求書受領(IR)の明細・ヘッダー
OPEN DATASETイベントログをサーバのCSVファイルとして出力(要権限)
bwart = ‘101’入荷受付用ムーブメントタイプのフィルタ

データ抽出用SQLクエリ例

各P2Pプロセスステップごとに、下記のSQLサンプルクエリでデータを抽出できます。要件やSAPバージョンにあわせて調整してください。

シンプルなサンプル:

-- Purchase Order creation
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'; -- Standard PO type
-- Goods Receipt
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'; -- Receipt type
-- Invoice Receipt
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'; -- Invoice type

これらのログを1つのイベントログテーブルに統合してプロセスマイニングに活用できます:

-- Combine event logs (simplified 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. イベントログとしてエクスポート

最低限、以下を含む統一データ構造が準備できたら: • Case ID • Activity • Timestamp

プロのヒント

• タイムスタンプ を同一タイムゾーンに正規化しましょう。 • すべての event で Case ID に一貫性があるか確認します。 • テストやキャンセル済みドキュメントはクリーンアップします。 • 会社コード・ドキュメントタイプ・会計年度などでフィルタできます。