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
" Ejemplo de código ABAP para extraer event log de 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. Extraer creación de 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. Extraer 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. Extraer registro de Invoice (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. Exportar resultados a archivo (opcional, si la seguridad lo permite)
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:
-- Creación de 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 estándar de 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 de receipt
-- 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 de invoice
Puedes unificar estos logs en una sola tabla event log para process mining:
-- Combinar event logs (UNION simplificado)
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.