Estrazione dati SAP per Purchase-to-Pay (P2P)
Estrazione dati da SAP per il Process Mining Purchase-to-Pay (P2P)
Per analizzare il processo Purchase-to-Pay con il Process Mining, devi estrarre un event log di alta qualità da SAP. Qui trovi i passi principali e le strutture coinvolte.
1. Definisci l’ambito del processo P2P
Prima di estrarre i dati, chiarisci quali step del processo vuoi includere. Un processo P2P standard comprende:
- Purchase Requisition
- Purchase Order
- Goods Receipt
- Invoice Receipt
- Payment
2. Identifica le principali tabelle SAP
Solitamente i dati vengono estratti da queste tabelle:
Step del processo | Tabella SAP | Descrizione |
---|---|---|
Purchase Requisition | EBAN | Testata richiesta d’acquisto |
Purchase Order | EKKO / EKPO | Testata (EKKO) e righe ordine (EKPO) |
Goods Receipt | MKPF / MSEG | Testata documento materiale e righe |
Invoice Receipt | BKPF / BSEG | Testata e righe documento contabile |
Payment | PAYR / REGUH | Tabelle pagamento |
3. Identifica i campi necessari per l’Event Log
I seguenti campi sono generalmente richiesti per il process mining. Puoi adattarli alle tue esigenze.
Case ID | Numero ordine / Numero documento | Raggruppa tutti gli event in un unico processo |
---|---|---|
Activity | Derivato (es. “PO Created”) | Nome dello step di processo |
Timestamp | AEDAT, BUDAT, CPUDT | Quando lo step è avvenuto |
User/Agent | ERNAM, USNAM, ecc. | Chi ha eseguito l’azione |
Amount | WRBTR, DMBTR | Valore associato allo step |
Vendor / Material | LIFNR, MATNR | Info su partner o materiale |
4. Estrai i dati grezzi
SAP ECC (ABAP stack)
- Usa report ABAP per estrarre i dati direttamente dalle tabelle rilevanti.
- Oppure sviluppa programmi ABAP custom per unire, filtrare ed esportare gli event rilevanti.
- Puoi esportare il risultato come file CSV o flat file.
SAP S/4HANA (HANA stack)
- Usa CDS Views (Core Data Services) per definire modelli logici ed estrarre dati.
- In alternativa, usa SAP Fiori, HANA Studio o script SQL.
- Per una maggiore automazione usa ODATA API, SAP Datasphere o SAP Data Intelligence.
5. Costruisci l’Event Log
Colonne minime necessarie per il process mining
Colonna | Esempio | Esempio |
---|---|---|
Case ID | Identificativo unico dell’istanza di processo | Purchase Order ID |
Activity | Nome dello step di processo | ”Create PO”, “Post Invoice” |
Timestamp | Data e ora dell’event | 2025-04-17 10:22:12 |
Colonne opzionali per arricchire l’event log
Nome campo | Descrizione |
---|---|
User | Utente che ha effettuato l’azione |
Amount | Valore monetario dell’event |
Vendor / Material | Vendor o materiale coinvolto |
Company Code | Codice azienda associato all’event |
Currency | Valuta della transazione |
Document Type | Tipo di documento (es. PO, GR, Invoice) |
Other Fields | Amount, Vendor, Currency, ecc |
tip
Se necessario, esegui unpivot dei dati per trasformare più campi data in una riga per ogni activity.
6. Trasforma e pulisci i dati
Una volta ottenuti i dati grezzi, sarà necessario trasformarli in un formato adatto al process mining. Questa fase in genere comprende:
- Normalizzazione dei timestamp (es. conversione in UTC)
- Etichettatura delle activity (es. “PO Created” invece del codice MIGO)
- Assicurarsi che ci sia una riga per ogni event (long format)
- Pulizia da valori NULL e duplicati
- Case ID consistenti (unici per istanza)
Strumenti utili:
- Script SQL per pulizia e trasformazione
- Excel o Power Query
- Python + Pandas
- KNIME, Alteryx o strumenti ETL
La data cleaning e la preparazione dei dati sono passaggi fondamentali nell’analisi. Aiutano a identificare e correggere errori, incoerenze e imprecisioni nei dati per garantirne qualità e affidabilità.
Esempio di codice ABAP per estrazione dati
" Esempio di codice ABAP per estrarre dati event log 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. Estrai creazione ordine di acquisto
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. Estrai 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. Estrai 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. Esporta risultati su file (opzionale, se permesso)
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 esportato con successo.'.
Note sul codice ABAP
Sezione | Scopo |
---|---|
ekko | Tabella intestazione per creazione PO |
mseg + mkpf | Per le registrazioni Goods Receipt (GR) |
rseg + rbkp | Per le registrazioni Invoice Receipt (IR) |
OPEN DATASET | Scrive l’event log come CSV sul server (verificare permessi) |
bwart = ‘101’ | Filtro per tipi movimento GR |
Esempi di query SQL per comprendere l’estrazione dati
Puoi utilizzare query SQL per estrarre dati dalle tabelle rilevanti. Ecco alcuni esempi per ogni step del processo P2P. Modifica le query in base alle tue esigenze e versione SAP.
Ecco un esempio semplice
-- Creazione ordine di acquisto
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 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'; -- 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 unica event log table per il process mining:
-- Combina gli 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.