SAP'ten P2P için Veri Çıkarma Rehberi
Purchase-to-Pay (P2P) Süreç Madenciliği için SAP’den Veri Çıkarma
Purchase-to-Pay sürecinizi Process Mining ile analiz etmek için SAP’den kaliteli bir event log çıkarmanız gerekir. Aşağıda genel adımlar ve kullanılan yapılar bulabilirsiniz.
1. P2P Süreç Kapsamınızı Belirleyin
Veri çıkarmadan önce dahil etmek istediğiniz süreç adımlarını netleştirin. Standart bir P2P süreci şu adımlardan oluşur:
- Purchase Requisition
- Purchase Order
- Goods Receipt
- Invoice Receipt
- Payment
2. Temel SAP Tablolarını Belirleyin
Genellikle şu ana SAP tablolarından veri çekersiniz:
Süreç Adımı | SAP Tablosu | Açıklama |
---|---|---|
Purchase Requisition | EBAN | Purchase Requisition Header |
Purchase Order | EKKO / EKPO | PO Header (EKKO) ve Items (EKPO) |
Goods Receipt | MKPF / MSEG | Material Document Header ve Line Items |
Invoice Receipt | BKPF / BSEG | Accounting Document Header ve Line Items |
Payment | PAYR / REGUH | Payment Document Tables |
3. Event Log için Gerekli Alanları Belirleyin
Process Mining için genelde aşağıdaki alanlar gerekir. İhtiyacınıza göre uyarlayabilirsiniz.
Case ID | PO Number / Document No. | Tüm eventları tek bir process altında toplar |
---|---|---|
Activity | Türevlenmiş (örn. “PO Created”) | Process adımının adı |
Timestamp | AEDAT, BUDAT, CPUDT | Adımın zamanı |
User/Agent | ERNAM, USNAM, vb. | İşlemi yapan kişi |
Amount | WRBTR, DMBTR | Adımla ilişkili değer |
Vendor / Material | LIFNR, MATNR | Tedarikçi veya materyal bilgisi |
4. Ham Veriyi Çıkarın
SAP ECC (ABAP stack)
- Verileri doğrudan ilgili tablolardan almak için ABAP Reports kullanın.
- Ya da özel ABAP programları yazarak ilgili event verilerini birleştirin, filtreleyin ve dışa aktarın.
- Sonuçları CSV ya da flat dosya olarak export edebilirsiniz.
SAP S/4HANA (HANA stack)
- Mantıksal modelleri tanımlamak ve veri çıkarmak için CDS Views (Core Data Services) kullanın.
- Ayrıca SAP Fiori uygulamaları veya HANA Studio ile SQL scriptler çalıştırabilirsiniz.
- Daha fazla otomasyon için ODATA API, SAP Datasphere veya SAP Data Intelligence kullanın.
5. Event Log’u Oluşturun
Process mining için minimum gereken kolonlar:
Kolon | Örnek | Örnek |
---|---|---|
Case ID | Process instance için benzersiz tanımlayıcı | Purchase Order ID |
Activity | Process adımının adı | ”Create PO”, “Post Invoice” |
Timestamp | Event’in tarih ve zamanı | 2025-04-17 10:22:12 |
Opsiyonel kolonlar ile event log’u zenginleştirebilirsiniz:
Kolon Adı | Açıklama |
---|---|
User | İşlemi yapan kullanıcı |
Amount | Event’e ait parasal değer |
Vendor / Material | Event’te yer alan tedarikçi veya materyal |
Company Code | Event ile ilişkili şirket kodu |
Currency | İşlemin para birimi |
Document Type | Belge türü (örn. PO, GR, Invoice) |
Other Fields | Amount, Vendor, Currency, vb. |
tip
Gerekirse, çoklu tarih kolonunu tek bir activity satırına çevirmek için verinizi unpivot edin.
6. Veriyi Dönüştür ve Temizle
Ham veriyi aldıktan sonra, process mining için uygun formata dönüştürmeniz gerekebilir. Genellikle şunları içerir:
- Timestamp’leri normalize etmek (örn. UTC’ye çevirmek)
- Activity adlarını etiketlemek (örn. MIGO kodu yerine “PO Created”)
- Her event için tek satır (long format) olması
- NULL değerler ve tekrarları temizleme
- Case ID’lerin (her bir instance için benzersiz) tutarlılığı
Kullanabileceğiniz araçlar:
- Veriyi temizlemek ve dönüştürmek için SQL scriptleri
- Excel veya Power Query
- Python + Pandas
- KNIME, Alteryx veya ETL araçları
Veri temizleme ve hazırlık, data analizi sürecinin çok önemli bir adımıdır. Hataları ve tutarsızlıkları tespit edip düzelterek veri kalitesi ve güvenilirliği sağlanır.
ABAP ile Veri Çekme için Örnek Kod Şablonu
" Purchase-to-Pay event log verisi için örnek ABAP kodu
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. Purchase Order oluşturmanın çekilmesi
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. Goods Receipt (MIGO) verisinin çekilmesi
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. Invoice Posting (MIRO) verisinin çekilmesi
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. Sonuçları dosyaya aktarma (opsiyonel, yetkiniz varsa)
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 başarıyla dışa aktarıldı.'.
ABAP Kodu Hakkında Notlar
Bölüm | Amaç |
---|---|
ekko | PO oluşturma için header tablosu |
mseg + mkpf | Goods Receipt (GR) kayıtları için |
rseg + rbkp | Invoice Receipt (IR) kayıtları için |
OPEN DATASET | Event log’u sunucuya CSV olarak yazar (izinleri kontrol edin) |
bwart = ‘101’ | GR hareket türü filtresi |
Veri Çıkarma Sürecine Yönelik Örnek SQL Sorguları
İlgili tablolardan veri çekmek için SQL sorguları kullanabilirsiniz. Aşağıda, P2P sürecinin her adımı için örnekler var. Sorguları SAP versiyonunuza ve ihtiyacınıza göre uyarlayın.
Basit bir örnek:
-- Purchase Order oluşturma
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'; -- Standart PO tipi
-- 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'; -- Receipt tipi
-- 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'; -- Fatura tipi
Bu logları process mining için tek bir event log tablosunda birleştirebilirsiniz:
-- Event logları birleştirme (basit UNION)
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. Event Log Olarak Dışa Aktar
En azından aşağıdaki alanlara sahip birleşik bir yapınız olduğunda: • Case ID • Activity • Timestamp
Profesyonel İpucu
• Timestamp’leri aynı saat dilimine normalize edin. • Case ID’lerinizin tüm eventlar arasında tutarlı olduğundan emin olun. • Verilerinizi test veya iptal edilen belgelerden arındırın. • Kapsamı daraltmak için company code, document type veya mali yıl gibi filtreler kullanın.