- Artımlı yenileme neyi değiştirir?
- Çalışma mantığı: RangeStart, RangeEnd ve kayan pencere
- Adım adım kurulum
- En kritik detay: filtrenin iki ucundan yalnızca birinde eşit
- Query folding olmadan artımlı yenileme anlamsızdır
- İsteğe bağlı ayarlar: tam gün, değişiklik algılama, gerçek zamanlı
- Sık hatalar ve ilk yenileme
- Bu beceriyi Mindset programlarında nerede çalışırsınız?
- Sık sorulan sorular
Incremental Refresh ile Büyük Power BI Modelini Hızlı Yenilemek
Power BI'da artımlı yenileme kurulumu: RangeStart ve RangeEnd parametreleri, filtre, politika ayarları, query folding ve sık yapılan hatalar.
Artımlı yenileme neyi değiştirir?
Yayımladığınız bir Power BI modelinde her tablo tek bir bölümden (partition) oluşur ve yenileme her seferinde o tablonun tamamını yeniden yükler. Küçük tablolarda sorun yoktur; ama çok sayıda satırlık bir satış ya da hareket tablosunda tam yenileme uzun sürer, kaynak sistemi yorar ve yarıda kesilen bağlantılarda başarısız olur. Oysa geçmiş yılların faturaları artık değişmez; yalnızca son günlerin verisi hareket eder.
Artımlı yenileme (incremental refresh), Microsoft'un tanımıyla zamanlanmış yenilemeyi genişletir: sık yeni ve güncel veri alan tablolar için bölümleri otomatik oluşturur ve yönetir. Geçmiş dönem bir kez yüklenir, her yenilemede yalnızca yenileme penceresindeki bölümler yeniden çekilir. Belgenin saydığı kazançlar: daha az yenileme döngüsü, daha hızlı ve daha güvenilir yenileme, daha az bellek ve kaynak tüketimi ve milyarlarca satıra çıkabilen büyük modeller.
Bu, tüm modeli değil, genellikle zamana bağlı büyüyen olay (fact) tablosunu hedefler. Boyut tabloları genelde küçüktür ve tam yenilenmeye devam eder.
Çalışma mantığı: RangeStart, RangeEnd ve kayan pencere
Mekanizma iki Power Query parametresine dayanır: RangeStart ve RangeEnd. Adları büyük küçük harfe duyarlıdır, veri tipleri tarih/saat olmalıdır. Desktop'ta bu parametreler, tabloya yüklenecek veriyi küçük bir yakın döneme sınırlamak için kullanılır; böylece geliştirme sırasında yalnızca az veri taşırsınız.
Yayımlayıp ilk yenilemeyi yaptığınızda hizmet, politikanıza göre geçmiş (historical) bölümleri, yenileme (incremental) bölümlerini ve isteğe bağlı olarak gerçek zamanlı DirectQuery bölümünü oluşturur ve parametre değerlerini her bölüm için kendisi ezer. Sonraki yenilemelerde yalnızca yenileme penceresindeki bölümler güncellenir; pencere her seferinde ileri kayar. Pencerenin dışına çıkan dönem geçmiş bölüme dönüşür, eski geçmiş bölümler birleştirilip daha az ayrıntılı hale gelir ve politikanın geçmiş süresini aşan bölümler modelden tamamen silinir. Belge bu davranışa kayan pencere (rolling window) deseni adını verir.
Önemli bir ayrıntı: Bölümler hizmette görünmez; yönetimi tamamen politikaya bırakırsınız. Gelişmiş bölüm senaryoları için Premium kapasitelerde XMLA uç noktası vardır.
Adım adım kurulum
Belgedeki sıra şöyledir:
- Power Query'de parametre oluşturun. Transform data ile Power Query'yi açın, Manage Parameters > New Parameter yolunu izleyin. İlk parametre RangeStart, ikincisi RangeEnd; ikisi de Date/Time tipinde. Güncel değerlere yalnızca yakın bir dönem yazın, çünkü bunlar yalnızca Desktop'ta yüklenen veriyi sınırlar.
- Tabloyu filtreleyin. Tarih sütununda Date Filters > Custom Filter'ı açın, ilk koşul "is after or equal to" ile RangeStart, ikincisi "is before" ile RangeEnd olsun.
- Close & Apply ile verileri yükleyin.
- Veri bölmesinde tabloya sağ tıklayıp Incremental refresh seçin. Tabloyu doğrulayın, Incrementally refresh this table'ı açın.
- Archive data starting ile geçmişte ne kadar veri tutulacağını, Incrementally refresh data starting ile hangi dönemin her yenilemede güncelleneceğini belirleyin.
- Apply ile politikayı kaydedin; bu adım veri yüklemez.
- Modeli yayımlayın ve hizmette ilk yenilemeyi çalıştırın. Model büyükse ilk yenilemeden önce büyük model depolama biçimini etkinleştirin.
Politika yalnızca yayımlandıktan sonra hizmette ve bir yenileme çalışınca uygulanır; Desktop'ta bölüm görmezsiniz.
En kritik detay: filtrenin iki ucundan yalnızca birinde eşit
Belgenin vurguladığı hata, iki koşulun ikisinde de eşitlik koymaktır. Şu filtre tehlikelidir:
Table.SelectRows ( Veri, each [SiparisTarihi] >= RangeStart and [SiparisTarihi] <= RangeEnd )
Sınır anına denk gelen bir satır iki ayrı bölümün koşulunu da sağlar ve modelde mükerrer veri oluşur. Doğrusu, eşitliği yalnızca bir uca koymaktır:
Table.SelectRows ( Veri, each [SiparisTarihi] >= RangeStart and [SiparisTarihi] < RangeEnd )
Tarih sütunu yıl-ay-gün biçiminde tam sayı vekil anahtar olarak tutuluyorsa (kaynakta sık görülür), RangeStart ve RangeEnd değerlerini bu tam sayı biçimine çeviren bir işlev yazıp karşılaştırmayı onunla yaparsınız; belge bunun için "Convert DateTime to integer" bölümünü gösterir.
Aynı zamanda filtre sütununun Date/Time tipinde olmasına dikkat edin. Slider (Incrementally refresh this table) pasif görünüyorsa neden çoğunlukla budur: Power Query ifadesinde RangeStart ve RangeEnd filtresi yoktur ya da tipler uyumsuzdur.
Query folding olmadan artımlı yenileme anlamsızdır
Artımlı yenilemenin amacı kaynaktan daha az veri çekmektir. Bu da filtrenin kaynağa SQL olarak gitmesine bağlıdır; buna query folding denir. Belge bunu net söyler: Filtre ilk kaynak sorgudan sonraki bir adımdaysa, kaynak sorgu ile filtre adımlarını birleştiren folding çalışmalıdır. SQL Server gibi kaynaklarda kaynak adımından hemen sonra gelen Table.SelectRows folding yapar.
Folding yoksa ve politika yalnızca içe aktarma (Import) kullanıyorsa, Power Query motoru filtreyi yerelde uygulayabilir. Bu durumda tablonun tüm satırları kaynaktan alınır, yenileme yavaşlar ve hizmette ya da şirket içi ağ geçidinde kaynak tükenebilir; yani artımlı yenilemenin amacı boşa gider. Gerçek zamanlı DirectQuery bölümü eklediğinizde ise folding olmayan dönüşümler hiç kullanılamaz.
Kontrol yöntemi: Power Query Düzenleyicisi'nde adıma sağ tıklayıp View Native Query etkinse folding var demektir; etkin değilse adım folding'i kırıyordur. Desktop politika penceresinde de, doğrulayamazsa bir uyarı gösterir. SQL tabanlı kaynaklarda (SQL Database, Azure Synapse, Oracle, Teradata) bu doğrulama güvenilirdir; diğer kaynaklarda izleme ya da Power Query tanılama gerekebilir.
İsteğe bağlı ayarlar: tam gün, değişiklik algılama, gerçek zamanlı
Politika penceresinde şu isteğe bağlı ayarlar bulunur:
Only refresh complete days: Yalnızca tamamlanmış günleri yeniler. Gün henüz bitmediyse o günün satırları yenilenmez. Gerçek zamanlı DirectQuery seçildiğinde otomatik olarak etkinleşir.
Detect data changes: Kaynakta bir tarih/saat sütunu (çoğunlukla denetim amaçlı "güncellenme zamanı") varsa, her dönem için bu sütunun en büyük değeri son yenilemeyle karşılaştırılır; değişmeyen dönem yenilenmez. Bu sütun, bölümleme için kullanılan sütunla aynı olmamalıdır. Belge önemli bir sınırı belirtir: Silinen satırlar bu yolla algılanmaz, yalnızca yumuşak silme (satır kalır, silindi işaretlenir ve tarihi güncellenir) algılanır. Power BI yalnızca silindi olarak işaretlenmemiş satırları yükler. Kaynaktan satır fiziksel olarak siliniyorsa geçmiş bölüm tam yenilemeyle düzeltilmelidir.
Get the latest data in real time with DirectQuery (Premium only): Yenileme döneminden sonra kaynakta gerçekleşen değişiklikleri sorgu anında almak için tabloya bir DirectQuery bölümü ekler. Belgeye göre gerçek zamanlı DirectQuery yalnızca Premium, Premium per user ve Embedded modellerde desteklenir; artımlı yenilemenin kendisi ise Pro modellerinde de desteklenir. Bu tablo karma (hybrid) tablo olur.
Sık hatalar ve ilk yenileme
İlk yenileme beklediğinizden uzun sürer; çünkü hizmet tüm geçmiş dönemi bir kez yükler. Sonraki yenilemeler çok daha hızlıdır. İlk yenilemeyi kaynağın yoğun olmadığı bir zamana koyun.
Sık hatalar: • Parametre adlarını farklı yazmak (RangeStart ve RangeEnd büyük küçük harfe duyarlıdır). • İki uca da eşitlik koyarak mükerrer kayıt üretmek. • Filtreyi folding kıran bir adımdan sonra uygulamak. • Detect data changes için bölümleme sütununun kendisini seçmek. • Fiziksel silinen satırların geçmiş bölümlerden temizlenmesini beklemek. • Politikayı Desktop'ta deneyip bölüm aramak; politika hizmette ilk yenilemeyle uygulanır. • Yenileme penceresini çok dar tutup kaynaktaki geriye dönük düzeltmeleri kaçırmak.
Planlama sırasında da şu soru sorulmalıdır: Kaynakta geçmişe dönük düzeltme ne kadar geriye gidebilir? Yenileme penceresi, bu düzeltme sınırını kapsamalıdır.
Bu beceriyi Mindset programlarında nerede çalışırsınız?
Artımlı yenileme, büyük hacimli satış, finans ya da operasyon verisiyle çalışan BI ve veri modelleme ekiplerinin, yenileme penceresi sınırlı ortamlardaki problemidir.
Power BI Veri Modelleme programında "ETL Tasarımı ve Power Query Mimarisi" ile "İleri Model Mimarisi ve Ölçeklendirme" başlıkları ve "Power BI Premium ve Kurumsal Dağıtım" modülü, artımlı yenileme ve Premium özelliklerinin bağlamını verir. Power BI İleri Düzey ve DAX programındaki "Performans Optimizasyonu" modülü ise yenileme sonrası model ve rapor hızını ele alır.
İlgili Mindset programı
Power BI Veri Modelleme
Sık sorulan sorular
Artımlı yenileme için Premium lisans şart mı?
Hayır. Microsoft belgesine göre artımlı yenileme Pro, Premium, Premium per user ve Embedded modellerinde desteklenir. Yalnızca kaynaktaki en güncel veriyi sorgu anında getiren gerçek zamanlı DirectQuery bölümü Premium, Premium per user ve Embedded için sınırlıdır.
Artımlı yenilemede kaynakta silinen satırlar ne olur?
Veri değişikliği algılama fiziksel silmeyi göremez; yalnızca yumuşak silme algılanır, yani satır kaynakta kalır ve silindi işaretlenir. Satırlar kaynaktan fiziksel olarak siliniyorsa geçmiş bölümlerde kalmaya devam eder. Bu durumda ilgili dönem için tam yenileme ya da kaynak tasarımında yumuşak silme gerekir.
RangeStart ve RangeEnd parametrelerinin değerleri neden önemsiz?
Desktop'ta yalnızca yüklenen veriyi sınırlamak için kullanılırlar. Yayımlayıp yenilemeyi çalıştırdığınızda hizmet bu değerleri her bölüm için kendisi ezer. Bu yüzden Desktop'a yalnızca küçük bir yakın dönem alıp geliştirmeyi hızlı tutmak, ancak parametre adlarını ve tiplerini doğru yazmak gerekir.
Artımlı yenileme çalıştı ama yenileme hâlâ yavaş, neden?
En sık neden query folding'in çalışmamasıdır. Filtre kaynağa gitmeyip yerelde uygulanıyorsa tablonun tüm satırları çekilir. Power Query'de adıma sağ tıklayıp View Native Query etkin mi bakın. Etkin değilse filtreyi kaynak adımından hemen sonra uygulayın ya da kaynak sorguya filtreyi doğrudan yazın.
İlgili rehberler
İlgili eğitimler
Kategori: Veri Analitiği ve İş Zekası