"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:
// 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 datetimeRangeStart 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 - 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>= 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":
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: ✅ Önerilir4. 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.AddColumnile eklenen hesaplanmış kolonlarTable.Bufferkullanı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.
Premium/Fabric'te XMLA ile Gelişmiş Kontrol
Premium veya Fabric kapasitesinde XMLA endpoint üzerinden partition'ları manuel yönetebilirsiniz:
// 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.
