Sur cette page

Extraction des données SAP pour le Achat-Paiement (P2P)

Extraction de données SAP pour le Process Mining Achat-Paiement (P2P)

Pour analyser le processus Purchase-to-Pay avec le Process Mining, il faut extraire un journal d’événements (journal d’événements) de haute qualité depuis SAP. Voici les étapes et structures types à suivre.

1. Définir le périmètre de votre processus P2P

Avant d’extraire les données, précisez les étapes du processus à inclure. Un processus P2P type comprend :

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

2. Identifier les tables SAP clés

Vous extrayez généralement les données depuis les tables suivantes :

Étape du processusTable SAPDescriptionn
Purchase RequisitionEBANEn-tête de la demande d’achat
Purchase OrderEKKO / EKPOEn-tête (EKKO) & lignes (EKPO) des commandes
Goods ReceiptMKPF / MSEGEn-tête du document et lignes de mouvement de stock
Invoice ReceiptBKPF / BSEGEn-tête document comptable & lignes
PaymentPAYR / REGUHTables de paiement

3. Identifier les champs requis pour l’Journal d’événements

Pour le process mining, ces champs sont généralement obligatoires. Adaptez-les si besoin.

ID du casPO Number / Document No.Regroupe tous les événements d’un même processus
ActivityDérivé (ex : “PO Created”)Nom de l’étape
HorodatageAEDAT, BUDAT, CPUDTQuand l’étape a eu lieu
User/AgentERNAM, USNAM, etc.Auteur de l’action
AmountWRBTR, DMBTRValeur associée à l’étape
Vendor / MaterialLIFNR, MATNRFournisseur ou référence du matériel

4. Extraire les données brutes

SAP ECC (ABAP stack)

  • Utilisez des rapports ABAP pour extraire directement les données des tables clés.
  • Ou développez des programmes ABAP pour joindre, filtrer et exporter les données d’événements pertinentes.
  • Le résultat peut être exporté en format CSV ou fichier plat.

SAP S/4HANA (HANA stack)

  • Utilisez CDS Views (Core Data Services) pour modéliser et extraire les données.
  • Ou utilisez SAP Fiori ou HANA Studio pour exécuter des requêtes SQL.
  • Utilisez l’API ODATA, SAP Datasphere ou SAP Data Intelligence pour plus d’automatisation.

5. Construire l’Journal d’événements

Colonnes minimales nécessaires pour le process mining

ColonneExempleExemple
ID du casIdentifiant unique de l’instancePurchase Order ID
ActivityNom de l’étape du processus”Create PO”, “Post Invoice”
HorodatageDate et heure de l’événement2025-04-17 10:22:12

Colonnes optionnelles pour enrichir l’événement log

Nom de la colonneDescriptionn
UserUtilisateur ayant effectué l’action
AmountMontant associé à l’événement
Vendor / MaterialFournisseur ou matériel concerné
Company CodeCode société relatif à l’événement
CurrencyDevise de la transaction
Document TypeType de document (ex : PO, GR, Invoice)
Other FieldsMontant, Vendor, Currency, …

tip

Effectuez une transposition (unpivot) de vos données pour transformer plusieurs colonnes de dates en une seule ligne par activité si besoin.

6. Transformer et nettoyer les données

Une fois les données brutes extraites, il est souvent nécessaire de les transformer pour le process mining. Il faut généralement :

  • Normaliser les horodatages (ex : conversion en UTC)
  • Libeller les activités (ex : “PO Created” au lieu d’un code MIGO)
  • Assurer une ligne par event (format long)
  • Nettoyer les valeurs NULL et doublons
  • Garantir des ID du cass homogènes (un par processus)

Outils utilisables :

  • Scripts SQL pour nettoyer et transformer
  • Excel ou Power Query
  • Python + Pandas
  • KNIME, Alteryx ou outils ETL
Nettoyage et préparation des données

Le nettoyage et la préparation des données sont essentiels pour toute analyse. Cette étape permet d’identifier et de corriger les erreurs et incohérences pour garantir la qualité des données.

Exemple de code ABAP pour extraire les données

" Example ABAP code to extract 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. Extract Purchase Order creation
  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. Extract Goods Receipt (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'. " GR document type
    event_log-activity = 'Goods Receipt'.
    APPEND event_log.
  ENDSELECT.

  " 3. Extract Invoice Posting (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. Export results to file (optional, if permissions allow)
  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 exported successfully.'.

Remarques sur le code ABAP

SectionUsage
ekkoTable en-tête pour la création PO
mseg + mkpfPour les entrées Goods Receipt (GR)
rseg + rbkpPour les entrées Invoice Receipt (IR)
OPEN DATASETÉcrit le journal d’événements en CSV sur le serveur (vérifier les droits d’écriture)
bwart = ‘101’Filtre les types de mouvement GR

Exemples de requêtes SQL pour l’extraction

Vous pouvez utiliser des requêtes SQL pour extraire les données des tables SAP. Voici des exemples pour chaque étape du P2P. Adaptez selon vos besoins et votre version SAP.

Exemple simple :

-- Purchase Order creation
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'; -- Standard 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

Vous pouvez regrouper ces logs dans une seule table journal d’événements pour le process mining :

-- Combine event logs (simplified 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. Exporter sous forme d’Journal d’événements

Lorsque vous avez une structure unifiée comprenant au moins : • ID du cas • Activity • Horodatage

Astuce d’expert

• Normalisez les horodatages dans le même fuseau horaire. • Vérifiez que vos ID du cas sont cohérents sur tous les événements. • Nettoyez les données pour retirer les documents de test ou annulés. • Utilisez des filtres comme code société, type de document ou exercice fiscal pour cibler l’analyse.