"Yenileme 4 Saat Sürüyor!" — En Yaygın Şikayet

Power BI forumlarında binlerce görüntülenme alan konu: _"Dataset yenilemem saatler sürüyor, zaman aşımına uğruyor."_ 100 milyon satırlık bir fact tablosunu her gece tamamen yenilemek hem kaynak veritabanını zorlar hem de Power BI Service'te zaman aşımı hatası alırsınız.

Incremental Refresh, bu sorunu temelden çözer: Sadece değişen verileri yeniler, gerisine dokunmaz.

Nasıl Çalışır?

Incremental Refresh, tablonuzda bir tarih/zaman kolonu kullanarak veriyi zaman dilimlerine böler:

| Dilim | Davranış | Örnek |

|---|---|---|

| Refresh period | Her yenilemede güncellenir | Son 7 gün |

| Store period | Saklı kalır, yenilenmez | Son 3 yıl |

| Archive | Silinir veya arşivlenir | 3 yıldan eski |

Adım Adım Kurulum

1. RangeStart ve RangeEnd Parametreleri

Power BI Desktop'ta iki DateTime parametresi oluşturun:

Power Query M
// Parameters (tam olarak bu isimlerle oluşturun)
RangeStart = #datetime(2024, 1, 1, 0, 0, 0)  // type datetime
RangeEnd = #datetime(2024, 12, 31, 0, 0, 0)   // type datetime
⚠️Forum Hatası #1: Parametre isimleri RangeStart ve RangeEnd olarak tam bu şekilde yazılmalıdır — büyük/küçük harf dahil. Farklı yazarsanız incremental refresh çalışmaz.

2. Power Query Filtreleme

Fact tablonuzun tarih kolonunu bu parametrelerle filtreleyin:

Power Query M
// Power Query - Tarih filtresi
let
    Kaynak = Sql.Database("sunucu", "VeriAmbari"),
    Tablo = Kaynak{[Schema="dbo", Item="FactSatis"]}[Data],
    // Bu filtre ZORUNLU — incremental refresh buna bakıyor
    Filtre = Table.SelectRows(Tablo, each 
        [SatisTarihi] >= RangeStart and 
        [SatisTarihi] < RangeEnd
    )
in
    Filtre
⚠️Forum Hatası #2: >= ve < operatörlerini kullanın, <= değil. Aksi halde veri çakışması yaşarsınız.

3. Incremental Refresh Politikası

Power BI Desktop'ta tablo üzerine sağ tıklayın → "Incremental refresh and real-time data":

TEXT
Ayarlar:
- Incrementally refresh this table: ✅ Açık
- Archive data starting: 3 Years before refresh date
- Incrementally refresh data starting: 7 Days before refresh date
- Get the latest data in real time with DirectQuery: İsteğe bağlı
- Only refresh complete days: ✅ Önerilir

4. Query Folding Kontrolü

En kritik adım: Filtrelerin kaynak veritabanına pushdown edildiğinden emin olun.

Kontrol yöntemi: Power Query editöründe filtre adımına sağ tıklayın → "View Native Query". SQL görüyorsanız query folding çalışıyordur.

Yaygın Hatalar ve Çözümleri

Hata 1: "Expressions that are evaluated to return the value for the column can't be folded"

Power Query'de query folding'i kıran bir adım var. Yaygın nedenler:

  • Table.AddColumn ile eklenen hesaplanmış kolonlar
  • Table.Buffer kullanımı
  • M fonksiyonlarıyla yapılan dönüşümler

Çözüm: Tüm dönüşümleri filtreden SONRA ekleyin. Filtre adımı kaynağa en yakın olmalı.

Hata 2: "RangeStart/RangeEnd parametreleri Desktop'ta çalışıyor ama Service'te hata veriyor"

Parametrelerin türü datetime olmalı, date veya text değil. Power Query editöründe parametre tipini kontrol edin.

Hata 3: Yenileme sonrası veri eksik

Only refresh complete days seçeneğini kontrol edin. Açıksa, bugünün verisi bir sonraki güne kadar yenilenmez. Gün içi veri gerekiyorsa bu seçeneği kapatın veya DirectQuery modunu etkinleştirin.

Incremental Refresh Zaman Çizelgesi
KaynaklarERP, CRM, APIStagingHam VeriVeri AmbarıStar SchemaRaporlamaPower BIUçtan Uca Veri Pipeline Mimarisi

Premium/Fabric'te XMLA ile Gelişmiş Kontrol

Premium veya Fabric kapasitesinde XMLA endpoint üzerinden partition'ları manuel yönetebilirsiniz:

JSON
// XMLA ile partition bilgisi (SSMS veya Tabular Editor)
// Her zaman dilimi ayrı bir partition olarak saklanır
// Partition listesi:
// - FactSatis_2024_01
// - FactSatis_2024_02
// - ...
// - FactSatis_Current (refresh period)

Tabular Editor ile:

  • Partition'ları görüntüleyin
  • Tek bir partition'ı manuel yenileyin
  • Partition stratejisini özelleştirin

Performans Karşılaştırma

| Metrik | Tam Yenileme | Incremental Refresh |

|---|---|---|

| Yenileme süresi (100M satır) | ~4 saat | ~10 dakika |

| Kaynak DB yükü | Çok yüksek | Düşük |

| Ağ trafiği | ~50 GB | ~500 MB |

| Zaman aşımı riski | Yüksek | Düşük |

| Pro lisansda | ❌ Sınırlı | ✅ Temel destek |

| Premium/Fabric | ✅ | ✅ Gelişmiş (XMLA) |

Sonuç

Incremental Refresh, büyük veri setlerinde Power BI'ın olmazsa olmazıdır. RangeStart/RangeEnd parametrelerini doğru tanımlayın, query folding'i doğrulayın ve zaman dilimlerini iş ihtiyacınıza göre ayarlayın. 100 milyon satırlık yenilemeyi 4 saatten 10 dakikaya düşürebilirsiniz.