ドキュメント一覧
このページの内容

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

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

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

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

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

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

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

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

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

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

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

Case IDPO番号 / ドキュメント番号1つのプロセス内のイベントをグループ化
Activity派生値(例: “PO Created”)プロセスステップ名
TimestampAEDAT, BUDAT, CPUDTステップ実施日時
User/AgentERNAM, 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. イベントログの作成

Process Miningに必須な最小カラム:

カラム名説明
Case IDプロセスインスタンスの一意識別子Purchase Order 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など)
Other FieldsAmount, Vendor, Currency など

tip

必要に応じて、複数の日付フィールドを1アクティビティ1行にUnpivot(列→行変換)しましょう。

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

生データを取得したら、Process Mining用の形式に整形します。主な作業は:

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

活用できる主なツール:

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

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

データ抽出用ABAPコード例

" 購買から支払いイベントログ抽出のABAPサンプルコード
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. 発注書作成の抽出
  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ドキュメントタイプ
    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: / 'イベントログのエクスポートが完了しました。'.

ABAPコードの補足

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

データ抽出用SQLクエリ例

各P2Pプロセスステップごとに、下記のSQLサンプルクエリでデータを抽出できます。要件や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'; -- 標準発注タイプ
-- 入荷受付
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'; -- 請求書タイプ

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

-- 各イベントログの結合(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

プロのヒント

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