Documenten Lijst
Op Deze Pagina

Data uit SAP extraheren voor Purchase-to-Pay (P2P)

Data halen uit SAP voor Purchase-to-Pay (P2P) Process Mining

Voor het analyseren van het Purchase-to-Pay-proces met Process Mining heb je een goede event log uit SAP nodig. Hieronder lees je de standaardstappen en structuur.

1. Bepaal de Scope van je P2P-proces

Bepaal voor het extraheren van data welke processtappen je wilt meenemen. Een standaard P2P-proces bestaat uit:

  1. Purchase Requisition
  2. Purchase Order
  3. Goods Receipt
  4. Invoice Receipt
  5. Payment

2. Belangrijke SAP Tabellen

Meestal haal je data uit deze tabellen:

Process StepSAP TableOmschrijving
Purchase RequisitionEBANKopregel Purchase Requisition
Purchase OrderEKKO / EKPOPO Kop (EKKO) & Items (EKPO)
Goods ReceiptMKPF / MSEGMateriaal document kop & regels
Invoice ReceiptBKPF / BSEGBoekhoud document kop & regels
PaymentPAYR / REGUHPayment document tabellen

3. Vereiste velden voor Event Log bepalen

De volgende velden heb je meestal nodig voor process mining. Pas ze aan op jouw situatie.

Case IDPO Number / Document No.Groepeert alle events binnen één proces
ActivityAfgeleid (bijv. “PO Created”)Naam van processtap
TimestampAEDAT, BUDAT, CPUDTWanneer de stap plaatsvond
User/AgentERNAM, USNAM, etc.Wie de actie uitvoerde
AmountWRBTR, DMBTRWaarde bij de stap
Vendor / MaterialLIFNR, MATNRPartner- of materiaalinfo

4. Ruwe data extraheren

SAP ECC (ABAP stack)

  • Gebruik ABAP Reports om direct data uit relevante tabellen te halen.
  • Of maak custom ABAP-programma’s om data te koppelen, filteren en exporteren.
  • Exporteer het resultaat als CSV of flat file.

SAP S/4HANA (HANA stack)

  • Gebruik CDS Views (Core Data Services) om logische modellen te maken en data te extraheren.
  • Of gebruik SAP Fiori-apps of HANA Studio voor SQL-scripts.
  • Gebruik ODATA API, SAP Datasphere of SAP Data Intelligence voor automatisering.

5. Event Log samenstellen

Minimale kolommen voor process mining

KolomVoorbeeldVoorbeeld
Case IDUnieke identifier voor het procesPurchase Order ID
ActivityNaam van de processtap”Create PO”, “Post Invoice” 
TimestampDatum en tijd van het event2025-04-17 10:22:12

Optionele kolommen om de event log te verrijken

KolomnaamBeschrijving
UserUser die de actie uitvoerde
AmountGeldbedrag bij het event
Vendor / MaterialVendor of materiaal bij het event
Company CodeCompany code bij het event
CurrencyValuta van de transactie
Document TypeType document (bijv. PO, GR, Invoice)
Other FieldsAmount, Vendor, Currency, etc

tip

Unpivot je data zodat meerdere datumvelden samenkomen in één regel per activiteit als dat nodig is.

6. Data transformeren en opschonen

Met ruwe data moet je deze vaak omzetten naar een geschikt format voor process mining. Dit houdt meestal in:

  • Timestamps normaliseren (zoals omzetten naar UTC)
  • Activiteiten labelen (bijv. “PO Created” in plaats van MIGO-code)
  • Eén regel per event garanderen (long format)
  • NULL-waarden en doublures verwijderen
  • Consistente Case IDs (uniek per instance)

Tools die je kunt gebruiken:

  • SQL-scripts om data te transformeren en op te schonen
  • Excel of Power Query
  • Python + Pandas
  • KNIME, Alteryx of ETL-tools
Data cleaning and Preparation

Data cleaning en preparation is een onmisbare stap in data-analyse. Je spoort hiermee fouten, inconsistenties en onnauwkeurigheden op en corrigeert ze, zodat de data van hoge kwaliteit en betrouwbaar is.

Voorbeeld ABAP code template voor data-extractie
" Voorbeeld ABAP-code voor het extraheren van 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. Purchase Order aanmaken
  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. Goods Receipt (MIGO) extraheren
  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. Invoice Posting (MIRO) extraheren
  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. Resultaten exporteren naar bestand (optioneel, indien toegestaan)
  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 succesvol geëxporteerd.'.
Opmerking bij de ABAP code
SectieDoel
ekkoTabelkop voor PO-aanmaak
mseg + mkpfVoor Goods Receipt (GR) regels
rseg + rbkpVoor Invoice Receipt (IR) regels
OPEN DATASETSchrijft de event log als CSV-bestand op de server (check permissies)
bwart = ‘101’Filter voor GR bewegingstypes
Voorbeeld SQL-queries voor data-extractie

Je kunt SQL-queries gebruiken om data uit relevante tabellen te halen. Hieronder staan voorbeeldqueries per stap van het P2P-proces. Pas de queries aan op je eigen SAP-versie en wensen.

Eenvoudig voorbeeld:

-- Purchase Order aanmaken
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'; -- Standaard 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

Je kunt deze logs samenvoegen tot één event log tabel voor process mining:

-- Combineer event logs (vereenvoudigde 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. Exporteren als Event Log

Zodra je een uniforme structuur hebt met minimaal: • Case ID • Activity • Timestamp

Pro Tip

• Normaliseer timestamps naar dezelfde tijdzone. • Zorg dat Case IDs overal consistent zijn. • Maak de data schoon door test- of geannuleerde documenten te verwijderen. • Gebruik filters zoals company code, document type of fiscaal jaar om de scope te beperken.