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-tabelOmschrijving
Purchase RequisitionEBANHeader van Purchase Requisition
Purchase OrderEKKO / EKPOPO Header (EKKO) & Items (EKPO)
Goods ReceiptMKPF / MSEGHeader en items van materiaaldocument
Invoice ReceiptBKPF / BSEGHeader en items van boekhouddocument
PaymentPAYR / REGUHBetalingsdocumenttabellen

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 / documentnr.Alle gebeurtenissen binnen één procesinstantie
ActiviteitAfgeleid (bijv. “PO Created”)Naam van processtap
TimestampAEDAT, BUDAT, CPUDTWanneer de stap is uitgevoerd
Gebruiker/AgentERNAM, USNAM, etc.Wie de actie heeft uitgevoerd
BedragWRBTR, DMBTRBedrag gekoppeld aan de stap
Vendor / MaterialLIFNR, MATNRLeverancier of materiaal Informatie

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)

  • Gebruik 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 procesinstantiePurchase Order ID
ActiviteitNaam van de processtap”Create PO”, “Post Invoice”
TimestampDatum en tijd van het gebeurtenis2025-04-17 10:22:12

Optioneel om de event log te verrijken

KolomnaamOmschrijving
GebruikerMedewerker die de actie heeft uitgevoerd
BedragFinanciële waarde aan het gebeurtenis
Vendor / MaterialLeverancier of materiaal betrokken bij het gebeurtenis
Company CodeBedrijfscode gekoppeld aan het gebeurtenis
ValutaValuta van de transactie
Document TypeDocumenttype (bijv. PO, GR, Invoice)
Overige veldenBedrag, Vendor, Valuta, 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 gebeurtenis (long-format)
  • Verwijderen van NULL-waarden en duplicaten
  • Case-IDs consistent uniek maken per instantie

Tools die je kunt gebruiken:

  • SQL scripts voor datacleaning 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 gebeurtenislog-data te exporteren
REPORT z_p2p_gebeurtenis_log_export.

TABLES: ekko, ekpo, mseg, mkpf, rbkp, rseg.

DATA: BEGIN OF gebeurtenis_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 gebeurtenis_log.

START-OF-SELECTION.

  " 1. Purchase Order aanmaken ophalen
  SELECT ebeln aedat ernam netwr
    INTO (gebeurtenis_log-case_id, gebeurtenis_log-timestamp, gebeurtenis_log-username, gebeurtenis_log-amount)
    FROM ekko
    WHERE aedat >= '20240101'.
    gebeurtenis_log-activity = 'Create Purchase Order'.
    APPEND gebeurtenis_log.
  ENDSELECT.

  " 2. Goods Receipt (MIGO) ophalen
  SELECT mblnr budat usnam ebeln
    INTO (gebeurtenis_log-case_id, gebeurtenis_log-timestamp, gebeurtenis_log-username, gebeurtenis_log-amount)
    FROM mseg
    INNER JOIN mkpf ON mseg~mblnr = mkpf~mblnr
    WHERE bwart = '101' AND budat >= '20240101'. " GR document type
    gebeurtenis_log-activity = 'Goods Receipt'.
    APPEND gebeurtenis_log.
  ENDSELECT.

  " 3. Invoice Posting (MIRO) ophalen
  SELECT ebeln bldat usnam wrbtr
    INTO (gebeurtenis_log-case_id, gebeurtenis_log-timestamp, gebeurtenis_log-username, gebeurtenis_log-amount)
    FROM rseg
    INNER JOIN rbkp ON rseg~belnr = rbkp~belnr
    WHERE bldat >= '20240101'.
    gebeurtenis_log-activity = 'Invoice Posted'.
    APPEND gebeurtenis_log.
  ENDSELECT.

  " 4. Resultaten exporteren naar bestand (optioneel, indien rechten aanwezig)
  DATA: filename TYPE string VALUE '/usr/sap/tmp/p2p_gebeurtenis_log.csv',
        file TYPE string,
        rc TYPE i.

  OPEN DATASET filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
  LOOP AT gebeurtenis_log.
    CONCATENATE gebeurtenis_log-case_id
                gebeurtenis_log-activity
                gebeurtenis_log-timestamp
                gebeurtenis_log-username
                gebeurtenis_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 Activiteit,
  EKKO.AEDAT AS Timestamp,
  EKKO.ERNAM AS Gebruiker,
  EKKO.LIFNR AS Vendor,
  EKKO.WAERS AS Valuta,
  EKKO.BUKRS AS CompanyCode
FROM EKKO
WHERE EKKO.BSART = 'NB'; -- Standaard PO type
-- Goods Receipt
SELECT
  MSEG.EBELN AS CaseID,
  'Goods Receipt' AS Activiteit,
  MKPF.BUDAT AS Timestamp,
  MKPF.USNAM AS Gebruiker,
  MSEG.MATNR AS Material,
  MSEG.MENGE AS Aantal
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 Activiteit,
  BKPF.BUDAT AS Timestamp,
  BKPF.USNAM AS Gebruiker,
  BSEG.WRBTR AS Bedrag
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 Activiteit, 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 • Activiteit • Timestamp

Slimme Tip

• Normaaliseer tijdstempels 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.