Liste des Documents
Sur Cette Page

Extraction des data SAP pour le Purchase-to-Pay (P2P)

Extraction des données SAP pour le Process Mining du Purchase-to-Pay (P2P)

Pour analyser le processus Purchase-to-Pay avec le Process Mining, il faut extraire un event log de haute qualité depuis SAP. Voici les étapes et structures courantes à suivre.

1. Définir la portée du process P2P

Avant d’extraire les données, précisez les étapes du process à inclure. Un process P2P standard inclut :

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

2. Identifier les tables SAP clés

Vous extrayez en général les données des tables suivantes :

Étape du processTable SAPDescription
Purchase RequisitionEBANHeader de Purchase Requisition
Purchase OrderEKKO / EKPOHeader de PO (EKKO) & Items (EKPO)
Goods ReceiptMKPF / MSEGHeader et lignes du doc matériel
Invoice ReceiptBKPF / BSEGHeader et lignes doc comptable
PaymentPAYR / REGUHTables de paiement

3. Identifier les champs nécessaires pour l’Event Log

Les champs suivants sont généralement requis pour le process mining. Vous pouvez les adapter selon vos besoins spécifiques.

Case IDN° de commande / N° de documentRegroupe tous les events dans un même process
ActivityDérivé (ex : “PO Created”)Nom de l’étape du process
TimestampAEDAT, BUDAT, CPUDTDate et heure de l’étape
User/AgentERNAM, USNAM, etc.Qui a exécuté l’action
AmountWRBTR, DMBTRMontant associé à l’étape
Vendor / MaterialLIFNR, MATNRInformations partenaire ou matériel

4. Extraire les données brutes

SAP ECC (ABAP stack)

  • Utilisez des ABAP Reports pour extraire les data directement des tables concernées.
  • Ou créez des programmes ABAP personnalisés pour joindre, filtrer et exporter les event data.
  • Vous pouvez exporter le résultat au format CSV ou fichier plat.

SAP S/4HANA (HANA stack)

  • Utilisez les CDS Views (Core Data Services) pour définir des modèles logiques et extraire les data.
  • Ou utilisez les apps SAP Fiori ou HANA Studio pour exécuter des scripts SQL.
  • Utilisez ODATA API, SAP Datasphere ou SAP Data Intelligence pour plus d’automatisation.

5. Construire l’Event Log

Colonnes minimales pour le process mining

ColonneExempleExemple
Case IDIdentifiant unique de l’instance processID de commande
ActivityNom de l’étape du process”Create PO”, “Post Invoice”
TimestampDate et heure de l’event2025-04-17 10:22:12

Colonnes optionnelles pour enrichir l’event log

Nom colonneDescription
UserUtilisateur ayant effectué l’action
AmountValeur monétaire liée à l’event
Vendor / MaterialPartenaire ou matériel concerné
Company CodeCode société lié à l’event
CurrencyDevise de la transaction
Document TypeType de document (ex : PO, GR, Invoice)
Other FieldsAmount, Vendor, Currency, etc

tip

Dépivotez vos data pour transformer plusieurs champs date en une ligne par activité si besoin.

6. Transformer et nettoyer les data

Une fois les data brutes extraites, il peut être utile de les transformer dans un format adapté au process mining. Cela implique souvent :

  • Normaliser les timestamps (ex : convertir en UTC)
  • Libeller les activités (ex : « PO Created » au lieu d’un code MIGO)
  • Garantir une ligne par event (format long)
  • Nettoyer les valeurs NULL et doublons
  • Des Case ID cohérents (unique par instance)

Outils possibles :

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

Le nettoyage et la préparation des data est une étape clé pour garantir la qualité et la fiabilité de vos analyses.

Exemple de template code ABAP pour extraction des data
" Exemple de code ABAP pour extraire les event log data Purchase-to-Pay
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. Extraction création de commande d’achat
  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. Extraction Réception de Marchandises (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'. " Type GR
    event_log-activity = 'Goods Receipt'.
    APPEND event_log.
  ENDSELECT.

  " 3. Extraction Comptabilisation de Facture (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 des résultats dans un fichier (optionnel selon droits)
  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 exporté avec succès.'.
Note sur le code ABAP
SectionFonction
ekkoTable principale pour la création de commande d’achat (PO)
mseg + mkpfUtilisé pour les enregistrements de Goods Receipt (GR)
rseg + rbkpUtilisé pour les enregistrements de réception de facture (Invoice Receipt, IR)
OPEN DATASETExporte l’event log en CSV sur le serveur (vérifiez les droits)
bwart = ‘101’Filtre pour type de mouvement GR
Exemples de requêtes SQL pour l’extraction des data

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

Exemple simple :

-- Création commande d’achat
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'; -- Type PO standard
-- Réception de marchandises
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'; -- Type réception
-- Réception de facture
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'; -- Type facture

Vous pouvez fusionner ces logs dans une seule table event log pour le process mining :

-- Combiner les logs (UNION simplifié)
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’Event Log

Lorsque vous avez une structure unifiée comprenant au moins : • Case ID • Activity • Timestamp

Astuce d’expert

• Normalisez les timestamps dans le même fuseau horaire. • Vérifiez que vos Case ID sont cohérents sur tous les events. • Nettoyez les data 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.