Fact iş anahtarıyla değil, vekil anahtarla bağlanır
Kaynak S01 diyor. Fact ise sube_key tutar, çünkü aynı şubenin birden çok sürümü olabilir. Bu derste S01 Haziran sonuna kadar Ankara'da, Temmuzdan beri Bursa'da. Mart hareketi Ankara sürümüne, Kasım hareketi Bursa sürümüne bağlanmalı.
etl_ tabloları hayali bir gece yüklemesi için elle kuruldu. Gerçek bir sistemden alınmadı; bozuk satırlar bilerek kondu.SELECT h.kaynak_no, h.sube_kodu, h.islem_tarihi, d.sube_key, d.sehir FROM etl_stg_hareket h JOIN etl_dim_sube d ON d.sube_kodu = h.sube_kodu AND TRY_CONVERT(DATE, h.islem_tarihi) BETWEEN d.gecerli_bas AND d.gecerli_bit WHERE h.sube_kodu = 'S01' ORDER BY h.stg_id;
guncel = 1 ile eşlemek bütün geçmiş hareketleri bugünkü sürüme yazar. Rapor "Mart'ta Bursa'da hareket" gösterir ve kimse fark etmez, çünkü toplam tutar değişmez.Boyutta olmayan şube: geç gelen boyut
Hareket gelmiş ama şube S99 henüz boyutta yok. JOIN bu satırı sessizce atar, toplam eksik çıkar. İki yaygın çözüm:
| Yol | Nasıl | Bedel |
|---|---|---|
| Bilinmeyen üye | LEFT JOIN, eşleşmezse -1 | Sonra şube gelince fact güncellemesi gerekir |
| Tahmini üye (inferred) | Boyuta iskelet satır ekle, gerçek veri gelince tamamla | Boyutta eksik alanlı satır olur |
SCD 2: önce kapat, sonra aç
Sıra önemli. Önce değişen güncel satır kapatılır, sonra güncel sürümü kalmayan her şube için yeni satır açılır. Böylece hem değişen hem tamamen yeni şube aynı INSERT ile açılır.
UPDATE d SET d.gecerli_bit = '2024-11-11', d.guncel = 0 FROM etl_dim_sube d JOIN etl_stg_sube s ON s.sube_kodu = d.sube_kodu WHERE d.guncel = 1 AND (s.sube_adi <> d.sube_adi OR s.sehir <> d.sehir); INSERT INTO etl_dim_sube (sube_kodu, sube_adi, sehir, gecerli_bas, gecerli_bit, guncel) SELECT s.sube_kodu, s.sube_adi, s.sehir, '2024-11-12', '9999-12-31', 1 FROM etl_stg_sube s LEFT JOIN etl_dim_sube d ON d.sube_kodu = s.sube_kodu AND d.guncel = 1 WHERE d.sube_key IS NULL; SELECT sube_key, sube_kodu, sehir, gecerli_bas, gecerli_bit, guncel FROM etl_dim_sube ORDER BY sube_kodu, gecerli_bas;
s.sehir <> d.sehir, alanlardan biri NULL ise doğru dönmez ve değişiklik kaçar. Gerçek yüklemede NULL olabilen sütunları ayrıca karşılaştır.Sıralama
Boyutlar önce, fact sonra yüklenir. Tersi olursa yeni gelen şube fact yüklemesinde bilinmeyen sayılır.