Estrazione dati SAP per Purchase-to-Pay (P2P)
Estrazione dati SAP per il Process Mining Purchase-to-Pay (P2P)
Per analizzare il processo Purchase-to-Pay con il process mining, è necessario estrarre un event log di alta qualità da SAP. Di seguito trovi i passaggi e le strutture più comuni.
1. Definisci il perimetro del processo P2P
Prima di estrarre i dati, chiarisci quali fasi di processo vuoi includere. Un processo P2P standard comprende:
- Purchase Requisition
- Purchase Order
- Goods Receipt
- Invoice Receipt
- Payment
2. Identifica le principali tabelle SAP
Generalmente, puoi recuperare i dati dalle seguenti tabelle:
| Fase di processo | Tabella SAP | Descrizione |
|---|---|---|
| Purchase Requisition | EBAN | Header della Purchase Requisition |
| Purchase Order | EKKO / EKPO | Header e item della Purchase Order (EKKO/EKPO) |
| Goods Receipt | MKPF / MSEG | Header e righe documenti di materiale |
| Invoice Receipt | BKPF / BSEG | Header e righe documenti contabili |
| Payment | PAYR / REGUH | Tabelle documenti di pagamento |
3. Identifica i campi necessari per l’event log
I seguenti campi sono normalmente richiesti nel process mining. Puoi adattarli alle tue specifiche esigenze.
| Case ID | Numero PO / Numero documento | Raggruppa tutti gli eventi per processo |
|---|---|---|
| Activity | Derivato (es. “PO Created”) | Nome della fase di processo |
| Timestamp | AEDAT, BUDAT, CPUDT | Quando si è verificata la fase |
| User/Agent | ERNAM, USNAM, ecc. | Chi ha eseguito l’azione |
| Amount | WRBTR, DMBTR | Valore collegato alla fase |
| Vendor / Material | LIFNR, MATNR | Informazioni su fornitore o materiale |
4. Estrai i dati grezzi
SAP ECC (ABAP stack)
- Utilizza report ABAP per estrarre dati direttamente dalle tabelle.
- Oppure crea programmi ABAP custom per join, filtri ed esportazione degli eventi.
- Puoi esportare i risultati in formato CSV o flat file.
SAP S/4HANA (HANA stack)
- Usa le CDS Views (Core Data Services) per definire modelli logici ed estrarre dati.
- Oppure usa le app SAP Fiori o HANA Studio per eseguire SQL script.
- Per una maggiore automazione, usa ODATA API, SAP Datasphere o SAP Data Intelligence.
5. Crea l’event log
Colonne minime necessarie per il process mining
| Colonna | Esempio | Esempio |
|---|---|---|
| Case ID | Identificativo univoco dell’istanza di processo | Purchase Order ID |
| Activity | Nome della fase di processo | ”Create PO”, “Post Invoice” |
| Timestamp | Data e ora dell’evento | 2025-04-17 10:22:12 |
Colonne opzionali per arricchire l’event log
| Nome colonna | Descrizione |
|---|---|
| User | Utente che ha eseguito l’azione |
| Amount | Valore monetario collegato all’evento |
| Vendor / Material | Fornitore o materiale nell’evento |
| Company Code | Company code collegato all’evento |
| Currency | Valuta della transazione |
| Document Type | Tipo documento (es. PO, GR, Invoice) |
| Other Fields | Amount, Vendor, Currency, ecc |
tip
Se necessario, usa unpivot per trasformare più campi data in una riga per attività.
6. Trasforma e pulisci i dati
Dopo aver estratto i dati grezzi, puoi doverli trasformare in un formato adatto al process mining. Tipicamente occorre:
- Normalizzare i timestamp (es. convertire in UTC)
- Etichettare le attività (es. “PO Created” anziché codice MIGO)
- Garantire una riga per ogni evento (formato long)
- Eliminare valori NULL e duplicati
- Case ID coerenti (univoci per istanza)
Strumenti utili:
- Script SQL per clean & transform
- Excel o Power Query
- Python + Pandas
- KNIME, Alteryx o tool ETL
La data cleaning e preparazione sono step essenziali nell’analisi dati. Consiste nell’identificare e correggere errori, incoerenze e imprecisioni nei dati, per garantirne qualità e affidabilità.
Esempio di template ABAP per estrazione dati
" Esempio di codice ABAP per estrarre event log P2P
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. Estrazione creazione Purchase Order
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. Estrazione 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'. " Tipo documento GR
event_log-activity = 'Goods Receipt'.
APPEND event_log.
ENDSELECT.
" 3. Estrazione registrazione fattura (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. Esportazione risultati su file (opzionale, se permessi abilitati)
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 completato con successo.'.
Note sul codice ABAP
| Sezione | Scopo |
|---|---|
| ekko | Tabella header per la creazione PO |
| mseg + mkpf | Per registrazioni di Goods Receipt (GR) |
| rseg + rbkp | Per registrazioni di Invoice Receipt (IR) |
| OPEN DATASET | Scrive l’event log come CSV sul server (verifica permessi) |
| bwart = ‘101’ | Filtro per tipi di movimento GR |
Esempi di query SQL per l’estrazione dati
Puoi usare query SQL per estrarre dati dalle tabelle rilevanti. Di seguito alcuni esempi per ogni fase del processo P2P. Adatta le query alle tue esigenze e versione SAP.
Esempio semplice:
-- Creazione 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'; -- Tipo standard PO
-- 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'; -- Tipo ricezione
-- 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'; -- Tipo fattura
Puoi unificare questi log in una sola tabella event log per il process mining:
-- Unione dei diversi event log (UNION semplificata)
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. Esporta come Event Log
Assicurati di avere una struttura unificata che includa almeno: • Case ID • Activity • Timestamp
Consiglio professionale
• Normalizza i timestamp nello stesso fuso orario. • Verifica che i Case ID siano coerenti in tutti gli event. • Pulisci i dati rimuovendo documenti di test o annullati. • Applica filtri come codice azienda, tipo documento o anno fiscale per restringere il perimetro.