ドキュメントリスト
このページにある項目

SAPからP2Pデータを抽出する方法ガイド

SAPからPurchase-to-Pay (P2P)データを抽出してプロセスマイニングを行うポイント

プロセスマイニングでPurchase-to-Payプロセスを調査するには、SAPから高品質なevent logを抽出する必要があります。以下はその一般的な手順と構造です。

1. P2Pプロセスの対象範囲を定義

データ抽出前に、含めたいプロセスステップを明確にしましょう。標準的なP2Pプロセスは以下です:

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

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

通常、次のテーブルからデータを取得します:

プロセスステップSAPテーブル説明
Purchase RequisitionEBANPurchase Requisition Header
Purchase OrderEKKO / EKPOPO Header (EKKO) & Items (EKPO)
Goods ReceiptMKPF / MSEGMaterial Document Header & Line Items
Invoice ReceiptBKPF / BSEGAccounting Document Header & Line Items
PaymentPAYR / REGUHPayment Document Tables

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

Process Mining でよく使われるフィールドは以下です。必要に応じて調整してください。

Case IDPO番号 / ドキュメントNo.1つのプロセスの event をグループ化
Activity派生値(例:“PO Created”)プロセスステップ名
TimestampAEDAT, BUDAT, CPUDTステップ発生日時
User/AgentERNAM, USNAM などアクション実行者
AmountWRBTR, DMBTRステップの金額
Vendor / MaterialLIFNR, MATNR取引先やマテリアル情報

4. 生データの抽出

SAP ECC (ABAPスタック)

  • ABAPレポートで対象テーブルから直接 data を抽出します。
  • またはカスタム ABAP プログラムで join ・フィルタ・エクスポートができます。
  • 結果は CSV やフラットファイルでエクスポートできます。

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

  • CDS View (Core Data Services) で論理モデルを定義し data を抽出。
  • SAP Fioriアプリや HANA Studio でSQLスクリプトを利用可能。
  • ODATA API、SAP Datasphere、SAP Data Intelligence で自動化が可能です。

5. イベントログの作成

Process Mining に必要な最小のカラム

ColumnExampleExample
Case IDプロセスインスタンスの一意ID購買注文ID
Activityプロセスステップ名”Create PO”, “Post Invoice”
Timestampevent の日時2025-04-17 10:22:12

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

カラム名説明
Userアクション実行ユーザー
Amountevent の金額
Vendor / Materialevent の取引先やマテリアル
Company Codeevent の会社コード
Currency取引通貨
Document Typeドキュメント種別(例:PO, GR, Invoice)
その他項目Amount, Vendor, Currency など

tip

複数の日時フィールドは1行1アクティビティに unpivot すると分析しやすくなります。

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

生データを取得したら Process Mining 用に変換しましょう。主な作業は:

  • timestamp の正規化(例: UTC変換)
  • アクティビティ名の付与(例: MIGOコードを”PO Created” へ)
  • 1 event =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'. " 受領ドキュメントタイプ
    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購買注文作成(PO)のヘッダテーブル
mseg + mkpf商品受領(GR)用のエントリ
rseg + rbkp請求書受領(IR)用のエントリ
OPEN DATASETイベントログをサーバーへCSV出力(権限要確認)
bwart = ‘101’GRトランザクションタイプのフィルタ
データ抽出プロセス理解のためのSQLクエリ例

関連テーブルから data を抽出するために 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'; -- 請求書タイプ

これらのログをまとめて、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 に一貫性があるか確認します。 • テストやキャンセル済みドキュメントはクリーンアップします。 • 会社コード・ドキュメントタイプ・会計年度などでフィルタできます。