Elenco Documenti
In Questa Pagina

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:

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

2. Identifica le principali tabelle SAP

Solitamente i dati vengono estratti da queste tabelle:

Step del processoTabella SAPDescrizione
Purchase RequisitionEBANTestata richiesta d’acquisto
Purchase OrderEKKO / EKPOTestata (EKKO) e righe ordine (EKPO)
Goods ReceiptMKPF / MSEGTestata documento materiale e righe
Invoice ReceiptBKPF / BSEGTestata e righe documento contabile
PaymentPAYR / REGUHTabelle 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 IDNumero ordine / Numero documentoRaggruppa tutti gli event in un unico processo
ActivityDerivato (es. “PO Created”)Nome dello step di processo
TimestampAEDAT, BUDAT, CPUDTQuando lo step è avvenuto
User/AgentERNAM, USNAM, ecc.Chi ha eseguito l’azione
AmountWRBTR, DMBTRValore associato allo step
Vendor / MaterialLIFNR, MATNRInfo 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

ColonnaEsempioEsempio
Case IDIdentificativo unico dell’istanza di processoPurchase Order ID
ActivityNome dello step di processo”Create PO”, “Post Invoice”
TimestampData e ora dell’event2025-04-17 10:22:12

Colonne opzionali per arricchire l’event log

Nome campoDescrizione
UserUtente che ha effettuato l’azione
AmountValore monetario dell’event
Vendor / MaterialVendor o materiale coinvolto
Company CodeCodice azienda associato all’event
CurrencyValuta della transazione
Document TypeTipo di documento (es. PO, GR, Invoice)
Other FieldsAmount, 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
Data cleaning and Preparation

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
SezioneScopo
ekkoTabella intestazione per creazione PO
mseg + mkpfPer le registrazioni Goods Receipt (GR)
rseg + rbkpPer le registrazioni Invoice Receipt (IR)
OPEN DATASETScrive 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.