SAPからP2Pデータを抽出する方法ガイド
SAPからPurchase-to-Pay (P2P)データを抽出してプロセスマイニングを行うポイント
プロセスマイニングでPurchase-to-Payプロセスを調査するには、SAPから高品質なevent logを抽出する必要があります。以下はその一般的な手順と構造です。
1. P2Pプロセスの対象範囲を定義
データ抽出前に、含めたいプロセスステップを明確にしましょう。標準的なP2Pプロセスは以下です:
- Purchase Requisition(購買依頼)
- Purchase Order(発注)
- Goods Receipt(入庫)
- Invoice Receipt(請求書受領)
- Payment(支払)
2. 主なSAPテーブルの特定
通常、次のテーブルからデータを取得します:
プロセスステップ | SAPテーブル | 説明 |
---|---|---|
Purchase Requisition | EBAN | Purchase Requisition Header |
Purchase Order | EKKO / EKPO | PO Header (EKKO) & Items (EKPO) |
Goods Receipt | MKPF / MSEG | Material Document Header & Line Items |
Invoice Receipt | BKPF / BSEG | Accounting Document Header & Line Items |
Payment | PAYR / REGUH | Payment Document Tables |
3. イベントログに必要なフィールドの特定
Process Mining でよく使われるフィールドは以下です。必要に応じて調整してください。
Case ID | PO番号 / ドキュメントNo. | 1つのプロセスの event をグループ化 |
---|---|---|
Activity | 派生値(例:“PO Created”) | プロセスステップ名 |
Timestamp | AEDAT, BUDAT, CPUDT | ステップ発生日時 |
User/Agent | ERNAM, USNAM など | アクション実行者 |
Amount | WRBTR, DMBTR | ステップの金額 |
Vendor / Material | LIFNR, 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 に必要な最小のカラム
Column | Example | Example |
---|---|---|
Case ID | プロセスインスタンスの一意ID | 購買注文ID |
Activity | プロセスステップ名 | ”Create PO”, “Post Invoice” |
Timestamp | event の日時 | 2025-04-17 10:22:12 |
イベントログを充実させるオプションカラム
カラム名 | 説明 |
---|---|
User | アクション実行ユーザー |
Amount | event の金額 |
Vendor / Material | event の取引先やマテリアル |
Company Code | event の会社コード |
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 に一貫性があるか確認します。 • テストやキャンセル済みドキュメントはクリーンアップします。 • 会社コード・ドキュメントタイプ・会計年度などでフィルタできます。