Extraction des données SAP pour le Purchase-to-Pay (P2P)
Extraction de données SAP pour le Process Mining 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 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 :
- Purchase Requisition
- Purchase Order
- Goods Receipt
- Invoice Receipt
- Payment
2. Identifier les tables SAP clés
Vous extrayez généralement les données depuis les tables suivantes :
| Étape du processus | Table SAP | Description |
|---|---|---|
| Purchase Requisition | EBAN | En-tête de la demande d’achat |
| Purchase Order | EKKO / EKPO | En-tête (EKKO) & lignes (EKPO) des commandes |
| Goods Receipt | MKPF / MSEG | En-tête du document et lignes de mouvement de stock |
| Invoice Receipt | BKPF / BSEG | En-tête document comptable & lignes |
| Payment | PAYR / REGUH | Tables de paiement |
3. Identifier les champs requis pour l’Event Log
Pour le process mining, ces champs sont généralement obligatoires. Adaptez-les si besoin.
| Case ID | PO Number / Document No. | Regroupe tous les events d’un même processus |
|---|---|---|
| Activity | Dérivé (ex : “PO Created”) | Nom de l’étape |
| Timestamp | AEDAT, BUDAT, CPUDT | Quand l’étape a eu lieu |
| User/Agent | ERNAM, USNAM, etc. | Auteur de l’action |
| Amount | WRBTR, DMBTR | Valeur associée à l’étape |
| Vendor / Material | LIFNR, MATNR | Fournisseur 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 event 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 exploitez 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’Event Log
Colonnes minimales nécessaires pour le process mining
| Colonne | Exemple | Exemple |
|---|---|---|
| Case ID | Identifiant unique de l’instance | Purchase Order ID |
| Activity | Nom de l’étape du processus | ”Create PO”, “Post Invoice” |
| Timestamp | Date et heure de l’event | 2025-04-17 10:22:12 |
Colonnes optionnelles pour enrichir l’event log
| Nom de la colonne | Description |
|---|---|
| User | Utilisateur ayant effectué l’action |
| Amount | Montant associé à l’event |
| Vendor / Material | Fournisseur ou matériel concerné |
| Company Code | Code société relatif à l’event |
| Currency | Devise de la transaction |
| Document Type | Type de document (ex : PO, GR, Invoice) |
| Other Fields | Montant, Vendor, Currency, … |
tip
Faites un 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 timestamps (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 Case IDs homogènes (un par processus)
Outils utilisables :
- Scripts SQL pour nettoyer et transformer
- Excel ou Power Query
- Python + Pandas
- KNIME, Alteryx ou outils ETL
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
" Exemple de code ABAP pour extraire les event logs 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 de la création de la commande
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 du 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'. " Type document GR
event_log-activity = 'Goods Receipt'.
APPEND event_log.
ENDSELECT.
" 3. Extraction de la saisie de la 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 résultats dans un fichier (si droits OK)
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: / 'Export de l’event log réussi.'
Remarques sur le code ABAP
| Section | Usage |
|---|---|
| ekko | Table en-tête pour la création PO |
| mseg + mkpf | Pour les entrées Goods Receipt (GR) |
| rseg + rbkp | Pour les entrées Invoice Receipt (IR) |
| OPEN DATASET | Écrit le log event 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 :
-- Création d'une Purchase Order
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
-- 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'; -- Type de réception
-- 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'; -- Type facture
Vous pouvez regrouper ces logs dans une seule table event log pour le process mining :
-- Fusionner les event 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.