Extraer data de SAP para Purchase-to-Pay (P2P)
Extracción de data de SAP para Process Mining de Purchase-to-Pay (P2P)
Para analizar el proceso Purchase-to-Pay con Process Mining, necesitas extraer un event log de alta calidad desde SAP. A continuación, se presentan los pasos y estructuras habituales involucrados.
1. Define el alcance de tu proceso P2P
Antes de extraer data, aclara los pasos de proceso que quieres incluir. Un proceso estándar de Purchase-to-Pay incluye:
- Purchase Requisition
- Purchase Order
- Goods Receipt
- Invoice Receipt
- Payment
2. Identifica las tablas clave de SAP
Normalmente, extraerás data de las siguientes tablas:
| Paso de Proceso | Tabla SAP | Descripción |
|---|---|---|
| Purchase Requisition | EBAN | Cabecera de solicitud de compra |
| Purchase Order | EKKO / EKPO | Cabecera de orden de compra (EKKO) y posiciones (EKPO) |
| Goods Receipt | MKPF / MSEG | Cabecera de documento de material y líneas |
| Invoice Receipt | BKPF / BSEG | Cabecera y líneas de documento contable |
| Payment | PAYR / REGUH | Tablas de documento de pago |
3. Identifica los campos requeridos para el event log
Los siguientes campos suelen ser requeridos para process mining. Puedes ajustar según tus necesidades.
| Case ID | PO Number / Document No. | Agrupa todos los eventos de un mismo proceso |
|---|---|---|
| Activity | Derivado (ej: “PO Created”) | Nombre del paso del proceso |
| Timestamp | AEDAT, BUDAT, CPUDT | Cuándo ocurrió el paso |
| User/Agent | ERNAM, USNAM, etc. | Quién realizó la acción |
| Amount | WRBTR, DMBTR | Valor asociado al paso |
| Vendor / Material | LIFNR, MATNR | Información de partner o material |
4. Extrae la data base
SAP ECC (ABAP stack)
- Utiliza ABAP Reports para extraer data directamente de las tablas relevantes.
- O crea programas ABAP personalizados para unir, filtrar y exportar los datos relevantes del event log.
- Puedes exportar el resultado como un archivo CSV o flat file.
SAP S/4HANA (HANA stack)
- Usa CDS Views (Core Data Services) para definir modelos lógicos y extraer la data.
- También puedes utilizar SAP Fiori Apps o HANA Studio para ejecutar scripts SQL.
- Utiliza ODATA API, SAP Datasphere o SAP Data Intelligence para una mayor automatización.
5. Construye el event log
Columnas mínimas necesarias para process mining
| Columna | Ejemplo | Ejemplo |
|---|---|---|
| Case ID | Identificador único del caso | Purchase Order ID |
| Activity | Nombre del paso del proceso | ”Create PO”, “Post Invoice” |
| Timestamp | Fecha y hora del evento | 2025-04-17 10:22:12 |
Columnas opcionales para enriquecer el event log
| Nombre de columna | Descripción |
|---|---|
| User | Usuario que realizó la acción |
| Amount | Valor monetario asociado al evento |
| Vendor / Material | Vendor o material involucrado en el evento |
| Company Code | Código de la empresa asociado al evento |
| Currency | Moneda de la transacción |
| Document Type | Tipo de documento (ej: PO, GR, Invoice) |
| Other Fields | Amount, Vendor, Currency, etc |
tip
Haz un unpivot de tu data para convertir varios campos de fecha en una fila por actividad si es necesario.
6. Transforma y limpia la data
Una vez que tienes la data bruta, probablemente necesites transformarla a un formato adecuado para process mining. Esto suele incluir:
- Normalizar los timestamps (por ejemplo, convertir a UTC)
- Etiquetar actividades (por ejemplo, ‘PO Created’ en vez de código MIGO)
- Asegurar una fila por evento (formato long)
- Eliminar valores NULL y duplicados
- Case IDs consistentes (uno único por instancia)
Herramientas recomendadas:
- SQL scripts para limpiar y transformar la data
- Excel o Power Query
- Python + Pandas
- KNIME, Alteryx o herramientas ETL
La limpieza y preparación de data es un paso clave en el análisis de procesos. Consiste en identificar y corregir errores, inconsistencias e imprecisiones para asegurar la calidad y confiabilidad de la información.
Plantilla de código ABAP para extracción de data
" Example ABAP code to extract Purchase-to-Pay event log data
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. Extract Purchase Order creation
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. Extract 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. Extract 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. Export results to file (optional, if permissions allow)
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 exported successfully.'. Nota sobre el código ABAP
| Sección | Propósito |
|---|---|
| ekko | Tabla cabecera para creación de PO |
| mseg + mkpf | Para los registros de Goods Receipt (GR) |
| rseg + rbkp | Para los registros de Invoice Receipt (IR) |
| OPEN DATASET | Escribe el event log como un archivo CSV en el servidor (verifica permisos) |
| bwart = ‘101’ | Filtro para tipos de movimiento GR |
Ejemplos de queries SQL para extracción
Puedes utilizar consultas SQL para extraer data de las tablas relevantes. A continuación algunos ejemplos para cada paso del proceso P2P. Ajusta según tu versión de SAP y requisitos.
Ejemplo básico:
-- Purchase Order creation
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'; -- Standard PO type -- 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'; -- Receipt type -- 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'; -- Invoice type Puedes unificar estos logs en una sola tabla event log para process mining:
-- Combine event logs (simplified UNION)
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. Exportar como Event Log
Cuando tengas una estructura unificada con al menos: • Case ID • Activity • Timestamp
Pro Tip
• Normaliza los timestamps al mismo huso horario. • Asegúrate de que los Case IDs sean consistentes en todos los events. • Limpia los datos para quitar documentos de prueba o cancelados. • Usa filtros como company code, document type o año fiscal para acotar el alcance.