Como extrair dados do SAP para Purchase-to-Pay (P2P)
Extração de dados do SAP para Process Mining de Purchase-to-Pay (P2P)
Para analisar o processo de Purchase-to-Pay com Process Mining, é preciso extrair um event log de alta qualidade do SAP. Veja os passos e estruturas principais abaixo.
1. Defina o Escopo do Processo P2P
Antes de extrair os dados, defina claramente as etapas do processo que deseja incluir. Um processo P2P padrão inclui:
- Purchase Requisition
- Purchase Order
- Goods Receipt
- Invoice Receipt
- Payment
2. Identifique as Principais Tabelas do SAP
Geralmente, você vai extrair dados das seguintes tabelas:
Etapa do Processo | SAP Table | Descrição |
---|---|---|
Purchase Requisition | EBAN | Cabeçalho da Purchase Requisition |
Purchase Order | EKKO / EKPO | Cabeçalho do PO (EKKO) & Itens (EKPO) |
Goods Receipt | MKPF / MSEG | Cabeçalho do Documento de Material & Itens |
Invoice Receipt | BKPF / BSEG | Cabeçalho de Documento Contábil & Itens |
Payment | PAYR / REGUH | Tabelas de Documentos de Pagamento |
3. Identificar Campos Necessários para Event Log
Os campos abaixo são normalmente obrigatórios para Process Mining. Ajuste conforme sua necessidade.
Case ID | PO Number / Document No. | Agrupa todos os events em um único processo |
---|---|---|
Activity | Derivado (ex: “PO Created”) | Nome da etapa do processo |
Timestamp | AEDAT, BUDAT, CPUDT | Quando a etapa ocorreu |
User/Agent | ERNAM, USNAM, etc. | Quem executou a ação |
Amount | WRBTR, DMBTR | Valor da etapa |
Vendor / Material | LIFNR, MATNR | Informações de parceiro ou material |
4. Extrair os Dados Brutos
SAP ECC (ABAP stack)
- Use ABAP Reports para extrair os dados diretamente das tabelas relevantes.
- Ou crie programas ABAP customizados para unir, filtrar e exportar os dados de events.
- Você pode exportar o resultado como arquivo CSV ou arquivo texto.
SAP S/4HANA (HANA stack)
- Utilize CDS Views (Core Data Services) para criar modelos lógicos e extrair os dados.
- Ou utilize aplicativos SAP Fiori ou HANA Studio para executar scripts SQL.
- Utilize ODATA API, SAP Datasphere ou SAP Data Intelligence para melhor automação.
5. Montar o Event Log
Colunas mínimas necessárias para Process Mining
Coluna | Exemplo | Exemplo |
---|---|---|
Case ID | Identificador único da instância do processo | Purchase Order ID |
Activity | Nome da etapa do processo | ”Create PO”, “Post Invoice” |
Timestamp | Data e hora do event | 2025-04-17 10:22:12 |
Colunas opcionais para enriquecer o event log
Nome da Coluna | Descrição |
---|---|
User | Usuário responsável pela ação |
Amount | Valor relacionado ao event |
Vendor / Material | Parceiro ou material envolvido no event |
Company Code | Código da empresa associado ao event |
Currency | Moeda da transação |
Document Type | Tipo de documento (ex: PO, GR, Invoice) |
Other Fields | Amount, Vendor, Currency, etc |
tip
Faça unpivot nos dados para transformar vários campos de datas em uma linha por activity, se necessário.
6. Transformar e Limpar Dados
Depois de obter os dados brutos, pode ser preciso transformá-los para uso em Process Mining. Normalmente isso envolve:
- Normalizar timestamps (ex: conversão para UTC)
- Rotular activities (ex: “PO Created” em vez do código MIGO)
- Garantir uma linha por event (formato long)
- Remover valores NULL e duplicados
- Garantir Case IDs únicos e consistentes
Ferramentas recomendadas:
- Scripts SQL para limpar e transformar
- Excel ou Power Query
- Python + Pandas
- KNIME, Alteryx ou ferramentas ETL
A limpeza e preparação dos dados é essencial na análise de dados, identificando e corrigindo erros e inconsistências para garantir qualidade dos dados.
Exemplo de código ABAP para extração de dados
" Exemplo de código ABAP para extrair dados de 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. Extração da criação do 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. Extração do 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. Extração do 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 para arquivo (opcional)
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 com sucesso.'.
Notas sobre o código ABAP
Seção | Propósito |
---|---|
ekko | Tabela de cabeçalho para criação de PO |
mseg + mkpf | Para entradas de Goods Receipt (GR) |
rseg + rbkp | Para entradas de Invoice Receipt (IR) |
OPEN DATASET | Salva o event log como arquivo CSV no servidor (verifique permissões) |
bwart = ‘101’ | Filtro para tipos de movimento de GR |
Exemplos de SQL para entender a extração de dados
Você pode usar queries SQL para extrair informações das tabelas relevantes. Abaixo estão exemplos para cada etapa do fluxo P2P. Ajuste para seus requisitos e versão do SAP.
Exemplo simples:
-- Criação 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 padrão 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 invoice
Você pode unificar estes logs em uma única tabela de event log para Process Mining:
-- Unificação dos 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
Depois de estruturar seus dados unificados contendo pelo menos: • Case ID • Activity • Timestamp
Dica Profissional
• Normalize os timestamps para o mesmo fuso horário. • Garanta que os Case IDs sejam consistentes em todos os events. • Limpe os dados removendo documentos de teste ou cancelados. • Use filtros como company code, document type ou fiscal year para limitar o escopo.