Lista de documentos
En esta página

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:

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

2. Identifica las tablas clave de SAP

Normalmente, extraerás data de las siguientes tablas:

Paso de ProcesoTabla SAPDescripción
Purchase RequisitionEBANCabecera de solicitud de compra
Purchase OrderEKKO / EKPOCabecera de orden de compra (EKKO) y posiciones (EKPO)
Goods ReceiptMKPF / MSEGCabecera de documento de material y líneas
Invoice ReceiptBKPF / BSEGCabecera y líneas de documento contable
PaymentPAYR / REGUHTablas 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 IDPO Number / Document No.Agrupa todos los eventos de un mismo proceso
ActivityDerivado (ej: “PO Created”)Nombre del paso del proceso
TimestampAEDAT, BUDAT, CPUDTCuándo ocurrió el paso
User/AgentERNAM, USNAM, etc.Quién realizó la acción
AmountWRBTR, DMBTRValor asociado al paso
Vendor / MaterialLIFNR, MATNRInformació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

ColumnaEjemploEjemplo
Case IDIdentificador único del casoPurchase Order ID
ActivityNombre del paso del proceso”Create PO”, “Post Invoice”
TimestampFecha y hora del evento2025-04-17 10:22:12

Columnas opcionales para enriquecer el event log

Nombre de columnaDescripción
UserUsuario que realizó la acción
AmountValor monetario asociado al evento
Vendor / MaterialVendor o material involucrado en el evento
Company CodeCódigo de la empresa asociado al evento
CurrencyMoneda de la transacción
Document TypeTipo de documento (ej: PO, GR, Invoice)
Other FieldsAmount, 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
Limpieza y preparación de data

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ónPropósito
ekkoTabla cabecera para creación de PO
mseg + mkpfPara los registros de Goods Receipt (GR)
rseg + rbkpPara los registros de Invoice Receipt (IR)
OPEN DATASETEscribe 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.