Extraer datos SAP para Purchase-to-Pay (P2P)
Extracción de datos de SAP para Process Mining de Purchase-to-Pay (P2P)
Para analizar el proceso Purchase-to-Pay usando Process Mining, necesitas extraer un event log de alta calidad desde SAP. A continuación se muestran los pasos y estructuras habituales.
1. Define el alcance de tu proceso P2P
Antes de extraer datos, aclara las etapas del proceso que deseas incluir. Un proceso P2P estándar incluye:
- Purchase Requisition
- Purchase Order
- Goods Receipt
- Invoice Receipt
- Payment
2. Identifica las tablas clave de SAP
Normalmente extraerás datos de estas tablas:
Etapa del proceso | Tabla SAP | Descripción |
---|---|---|
Purchase Requisition | EBAN | Cabecera de la solicitud de compra |
Purchase Order | EKKO / EKPO | Cabecera (EKKO) e ítems (EKPO) de la orden de compra |
Goods Receipt | MKPF / MSEG | Cabecera de documento de material e ítems |
Invoice Receipt | BKPF / BSEG | Cabecera y posiciones de documento contable |
Payment | PAYR / REGUH | Tablas de documentos de pago |
3. Identificar campos requeridos para el Event Log
Los siguientes campos normalmente son necesarios para process mining. Puedes ajustarlos según tus necesidades.
Case ID | PO Number / Document No. | Agrupa todos los events en un solo 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 ejecutó la acción |
Amount | WRBTR, DMBTR | Valor asociado al paso |
Vendor / Material | LIFNR, MATNR | Info de partner o material |
4. Extraer los datos en bruto
SAP ECC (ABAP stack)
- Usa ABAP Reports para extraer data directamente de las tablas relevantes.
- O crea programas ABAP propios para unir, filtrar y exportar los events relevantes.
- Puedes exportar el resultado como archivo CSV o plano.
SAP S/4HANA (HANA stack)
- Usa CDS Views (Core Data Services) para definir modelos lógicos y extraer data.
- O usa apps SAP Fiori o HANA Studio para ejecutar scripts SQL.
- Usa ODATA API, SAP Datasphere o SAP Data Intelligence para automatizar.
5. Construir el Event Log
Columnas mínimas para process mining
Columna | Ejemplo | Ejemplo |
---|---|---|
Case ID | Identificador único por instancia de proceso | Purchase Order ID |
Activity | Nombre del paso de proceso | ”Create PO”, “Post Invoice” |
Timestamp | Fecha y hora del event | 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 del event |
Vendor / Material | Vendor o material involucrado en el event |
Company Code | Company code asociado al event |
Currency | Moneda de la transacción |
Document Type | Tipo de documento (ej. PO, GR, Invoice) |
Other Fields | Amount, Vendor, Currency, etc |
tip
Unpivot tu data para convertir varios campos de fecha en una fila por activity si lo necesitas.
6. Transformar y limpiar data
Una vez tengas los datos en bruto, posiblemente debas transformarlos a un formato adecuado para process mining. Esto suele incluir:
- Normalizar los timestamps (por ejemplo, convertir a UTC)
- Etiquetar las activities (ej: “PO Created” en vez de código MIGO)
- Una fila por event (formato largo)
- Limpiar valores NULL y duplicados
- Case IDs consistentes (único por instancia)
Herramientas útiles:
- Scripts SQL para limpiar y transformar la data
- Excel o Power Query
- Python + Pandas
- KNIME, Alteryx u otras ETL tools
La limpieza y preparación de data es un paso clave en el análisis de datos. Consiste en detectar y corregir errores, inconsistencias e inexactitudes para asegurar su calidad y fiabilidad.
Plantilla de código ABAP de ejemplo para extraer datos
" Código ABAP de ejemplo para extraer el 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 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. Exportar resultados a archivo (opcional, si los permisos lo permiten)
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 exportado con éxito.'.
Nota sobre el código ABAP
Sección | Propósito |
---|---|
ekko | Tabla principal para creación de PO |
mseg + mkpf | Para registros de Goods Receipt (GR) |
rseg + rbkp | Para registros de Invoice Receipt (IR) |
OPEN DATASET | Guarda el event log como archivo CSV en el servidor (verifica permisos) |
bwart = ‘101’ | Filtro para tipos de movimiento GR |
Ejemplos de consultas SQL para entender el proceso de extracción de datos
Puedes usar SQL para extraer datos de las tablas relevantes. Aquí tienes consultas ejemplo para cada paso del proceso P2P. Ajusta según lo que necesites y tu versión SAP.
Aquí tienes un ejemplo sencillo
-- 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 juntar estos logs en una tabla única de event log para process mining:
-- Unir 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.