Lista de Documentos
En Esta Página

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:

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

2. Identifica las tablas clave de SAP

Normalmente extraerás datos de estas tablas:

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

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

Columnas opcionales para enriquecer el event log

Nombre de columnaDescripción
UserUsuario que realizó la acción
AmountValor monetario del event
Vendor / MaterialVendor o material involucrado en el event
Company CodeCompany code asociado al event
CurrencyMoneda de la transacción
Document TypeTipo de documento (ej. PO, GR, Invoice)
Other FieldsAmount, 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
Data cleaning and Preparation

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