SAP'ten P2P Verisi Çıkartma: Adım Adım Kılavuz
SAP’tan Purchase-to-Pay (P2P) Process Mining için Veri Çıkarma
Purchase-to-Pay sürecini Process Mining ile analiz etmek için, SAP’ten yüksek kaliteli event log çıkartmanız gerekmektedir. Aşağıda, bu süreçteki yaygın adımları ve yapılandırmaları bulabilirsiniz.
1. P2P Süreç Kapsamınızı Belirleyin
Veri çıkartmadan önce, sürece dahil etmek istediğiniz adımları netleştirin. Standart bir P2P süreci genellikle şunları içerir:
- Purchase Requisition
- Purchase Order
- Goods Receipt
- Invoice Receipt
- Payment
2. Temel SAP Tablolarını Belirleyin
Genellikle aşağıdaki tablolardan veri çekersiniz:
| Süreç Adımı | SAP Tablosu | Açıklama |
|---|---|---|
| Purchase Requisition | EBAN | Purchase Requisition Header |
| Purchase Order | EKKO / EKPO | PO Header (EKKO) & Items (EKPO) |
| Goods Receipt | MKPF / MSEG | Material Document Header & Line Items |
| Invoice Receipt | BKPF / BSEG | Accounting Document Header & Line Items |
| Payment | PAYR / REGUH | Payment Document Tables |
3. Event Log için Gerekli Alanları Belirleyin
Process Mining analizi için genellikle aşağıdaki alanlar gereklidir. Kendi ihtiyacınıza göre alanları ekleyebilirsiniz.
| Case ID | PO Numarası / Doküman No | Bir sürecin tüm event’larını gruplar |
|---|---|---|
| Activity | Türetilmiş (örn: “PO Created”) | Süreç adımının adı |
| Timestamp | AEDAT, BUDAT, CPUDT | Adımın gerçekleştiği zaman |
| User/Agent | ERNAM, USNAM, vb. | Eylemi gerçekleştiren kişi |
| Amount | WRBTR, DMBTR | Adımla ilişkili tutar |
| Vendor / Material | LIFNR, MATNR | Partner ya da malzeme bilgisi |
4. Ham Veriyi Çıkartın
SAP ECC (ABAP stack)
- ABAP Report’ları kullanarak doğrudan ilgili tablolardan veri çekebilirsiniz.
- Ya da ilgili event verilerini birleştiren, filtreleyen ve dışa aktaran özel ABAP programları yazabilirsiniz.
- Sonuçları CSV veya flat file olarak dışa aktarabilirsiniz.
SAP S/4HANA (HANA stack)
- CDS Views (Core Data Services) ile mantıksal modeller tanımlayıp veri çekebilirsiniz.
- Ya da SAP Fiori uygulamaları veya HANA Studio kullanarak SQL script çalıştırabilirsiniz.
- Daha iyi otomasyon için ODATA API, SAP Datasphere veya SAP Data Intelligence kullanılabilir.
5. Event Log’u Oluşturun
Process Mining için zorunlu minimum kolonlar
| Kolon | Açıklama | Örnek |
|---|---|---|
| Case ID | Süreç örneği için benzersiz kimlik | Purchase Order ID |
| Activity | Süreç adımının adı | ”Create PO”, “Post Invoice” |
| Timestamp | Event’ın tarih ve saati | 2025-04-17 10:22:12 |
Event log’u zenginleştirmek için isteğe bağlı kolonlar
| Kolon Adı | Açıklama |
|---|---|
| User | İşlemi yapan kullanıcı |
| Amount | Event ile ilişkili para değeri |
| Vendor / Material | Event’a dahil olan vendor veya malzeme |
| Company Code | Event ile ilişkili şirket kodu |
| Currency | İşlemdeki para birimi |
| Document Type | Doküman türü (örn. PO, GR, Invoice) |
| Other Fields | Amount, Vendor, Currency, vb. |
tip
Eğer gerekiyorsa, birden fazla tarih alanını tek aktiviteye ve satıra dönüştürmek için datanızı “unpivot” yapın.
6. Veriyi Dönüştürme ve Temizleme
Ham verileri aldıktan sonra, Process Mining için uygun bir formata dönüştürmeniz gerekebilir. Genellikle şu işlemler yapılır:
- Timestamp normalizasyonu (örn: UTC’ye çevirme)
- Aktivite etiketi ekleme (örn: “PO Created” yerine MIGO kodu değil)
- Her event için tek satır olacak şekilde uzun format
- NULL değerlerin ve dublelerin temizlenmesi
- Tutarlı Case ID kullanımı (her örneğe özel)
Kullanabileceğiniz araçlar:
- SQL script’leri ile veri temizleme/dönüştürme
- Excel veya Power Query
- Python + Pandas
- KNIME, Alteryx veya ETL araçları
Veri temizliği ve hazırlığı, veri analizi sürecinde kritik bir adımdır. Kalite ve doğruluk için datadaki hata, tutarsızlık ve eksikliklerin belirlenip düzeltilmesini kapsar.
Veri Çıkarmak için ABAP Kod Şablonu Örneği
" Purchase-to-Pay event log verisi çıkarmak 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şturma kaydı çıkart
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) kaydı çıkart
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 doküman tipi
event_log-activity = 'Goods Receipt'.
APPEND event_log.
ENDSELECT.
" 3. Invoice Posting (MIRO) kaydı çıkart
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 aktar (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 Kod Hakkında Notlar
| Bölüm | Amaç |
|---|---|
| ekko | PO oluşturmanın 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 (yetki kontrolü gerekir) |
| bwart = ‘101’ | GR hareket tipleri için filtre |
Veri Çıkarmak için SQL Sorgusu Örnekleri
İlgili tablolardan veri çıkartmak için SQL sorguları kullanabilirsiniz. Her P2P adımına uygun sorgular aşağıda yer almaktadır. Kendi SAP versiyonunuza veya ihtiyacınıza göre düzenleyebilirsiniz.
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'; -- Alım 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 log’ları, process mining için tek bir event log tablosunda birleştirebilirsiniz:
-- Event log'ları birleştir (UNION ile basitleştirilmiş)
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.