Documentenlijst
Op deze pagina

SAP P2P Data Extractie voor Process Mining

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

Voor analyse van het Purchase-to-Pay-proces met Process Mining heb je een kwalitatieve event log uit SAP nodig. Hieronder vind je de gebruikelijke stappen en datastructuren.

1. Bepaal de Scope van je P2P-proces

Voordat je data uit SAP haalt, bepaal welke stappen je wilt meenemen. Een standaard P2P-proces bestaat uit:

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

2. Bepaal de Belangrijkste SAP-tabellen

Je haalt meestal data uit de volgende tabellen:

Process-stapSAP TableBeschrijving
Purchase RequisitionEBANHeader van Purchase Requisition
Purchase OrderEKKO / EKPOPO Header (EKKO) & Items (EKPO)
Goods ReceiptMKPF / MSEGMateriaal document header & items
Invoice ReceiptBKPF / BSEGAccounting document header & items
PaymentPAYR / REGUHBetalingsdocument tabellen

3. Benodigde Velden voor Event Log

De volgende velden zijn meestal vereist voor Process Mining. Pas aan waar nodig voor jouw situatie.

Case IDPO Number / Document No.Alle events binnen één proces instance
ActivityAfgeleid (bijv. “PO Created”)Naam van processtap
TimestampAEDAT, BUDAT, CPUDTWanneer de stap is uitgevoerd
User/AgentERNAM, USNAM, etc.Wie de actie heeft uitgevoerd
AmountWRBTR, DMBTRBedrag gekoppeld aan de stap
Vendor / MaterialLIFNR, MATNRLeverancier of materiaal info

4. Exporteer de Ruwe Data

SAP ECC (ABAP stack)

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

SAP S/4HANA (HANA stack)

  • Maak gebruik van CDS Views (Core Data Services) voor logische datamodellen en extracties.
  • Of gebruik SAP Fiori apps of HANA Studio voor SQL scripts.
  • Gebruik ODATA API, SAP Datasphere of SAP Data Intelligence voor automatisering.

5. Bouw de Event Log

Minimaal benodigde kolommen voor Process Mining

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

Optioneel om de event log te verrijken

KolomnaamBeschrijving
UserMedewerker die de actie heeft uitgevoerd
AmountFinanciële waarde aan het event
Vendor / MaterialLeverancier of materiaal betrokken bij het event
Company CodeBedrijfscode gekoppeld aan het event
CurrencyValuta van de transactie
Document TypeDocumenttype (bijv. PO, GR, Invoice)
Other FieldsAmount, Vendor, Currency, etc

tip

Unpivot je data om meerdere datumvelden om te zetten naar één regel per activiteit indien nodig.

6. Transformeer en Schoon je Data op

Zodra je de ruwe data hebt, moet je deze vaak nog geschikt maken voor Process Mining. Denk aan:

  • Timestamps normaliseren (bijv. naar UTC)
  • Activiteitennamen labelen (bijv. “PO Created” i.p.v. MIGO-code)
  • Eén regel per event (long-format)
  • Verwijderen van NULL-waarden en duplicaten
  • Case IDs consistent uniek maken per instance

Tools die je kunt gebruiken:

  • SQL scripts voor data cleaning en transformatie
  • Excel of Power Query
  • Python + Pandas
  • KNIME, Alteryx of ETL-tools
Data cleaning and Preparation

Data cleaning en voorbereiding is een belangrijke stap in data analyse. Hierbij worden fouten en inconsistenties in de data opgespoord en hersteld voor betere kwaliteit en betrouwbaarheid.

ABAP Voorbeeldcode Template voor Data Extractie

" Voorbeeld ABAP-code om Purchase-to-Pay event log data te exporteren
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 ophalen
  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) ophalen
  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) ophalen
  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 rechten aanwezig)
  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.'.

Toelichting op de ABAP-code

SectieDoel
ekkoHeader tabel voor PO creatie
mseg + mkpfVoor Goods Receipt (GR) entries
rseg + rbkpVoor Invoice Receipt (IR) entries
OPEN DATASETSchrijft de event log als CSV-bestand op de server (controleer rechten)
bwart = ‘101’Filter op GR movement types

Voorbeelden SQL-queries voor Data Extractie

Met SQL-queries kun je gegevens uit de relevante tabellen halen. Hieronder enkele voorbeelden voor iedere P2P-stap. Pas de queries aan op jouw SAP-omgeving en wensen.

Een 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

Deze logs kun je samenvoegen tot één event log 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.