Veri modeliniz çok büyük transaction (fact) veya boyut tabloları içeriyorsa, modeli kurarken sadece değişen verileri nasıl çekeceğinizi baştan tasarlamakta fayda var. Bir kaç milyon satırlık tabloların güncellenmesi genelde sorun yaratmaz, modelin buluta basılmasından sonra "refresh" edilmesi 2-3 dakika sürer. Fakat 10 milyon satır ve üzeri birden fazla tablonuz varsa modelde, güncelleme "makul" süreleri aşabilir.
Power Query'de henüz formal bir "incremental refresh" , yani sadece değişen verilerin çekilmesi gibi bir mekanizma yok. Uzun süredir istenilen ve beklenilen bir özellikti, geliştirilmesine nihayet başlanmış. En kısa sürede gelmesini ve kullanışlı olmasını umuyorum.
Mevcut durumda "incremental refresh" etkisi yaratmak için kullanılabilecek yöntemlerden biri , PQ tarafında "fact" tablosuna iki kez bağlantı yaparak, değişmeyen verilerin sorgusundaki "Include in report refresh" tikini kaldırmak, değişen verilerin sorgusunu "refresh" edecek şekilde işaretlemek ve iki sorguyu PBI tarafına aktardıktan sonra UNION komutu ile birleştirmek.
Ekteki örnekte, "Faturalar" tablosuna iki kez bağlanıldı, ilki 2016 öncesini, diğeri 2016 sonrasını alacak şekilde iki farklı sorgu oluşturuldu.
Değişmeyen verilerin bulunduğu sorgunun "refresh et" işareti kaldırıldı, diğeri ise "refresh" etmek üzere işaretli.
Her iki sorguyu da PBI tarafına aktardıktan sonra, "New Table" 'dan UNION komutu ile iki tabloyu birleştirelim.
Birleştirilen tabloları rapor oluştururken gözükmemesi için ilişkiler bölümünde gizleyelim. (Hide in report view)
Modeli "Refresh" ettiğimizde, sadece 2016 ve sonrası verileri içeren tablo güncellenecek, diğeri güncellenmeyecektir.
Çok kusursuz bir çözüm değil, çünkü tabloları gizlemek sadece kozmetik bir etki yaratır, gizlenen veriler hala modelin içindedir ve hafızada yer işgal eder. Üstelik yeni bir tablo yaratarak mevcut verileri bir kez daha oluşturduk, yani dosya büyüklüğünü de arttırmış olduk.
* Power Query tarafında sorguları "Append" ile birleştirsek aynı "incremental refresh" etkisini yaratmış olmazmıydık sorusunun cevabı malesef hayır. "Include in report refresh" tiki, tablo tek başına kullanıldığında ve yüklendiğinde (Enable Load) sorunsuz çalışıyor. Fakat tabloyu PQ tarafında bir başka sorguda "refere ettiğinizde" – bir başka sorguyla "Append" etmek gibi – verisini güncellemeye devam ediyor. Etmemesini bekliyorsunuz doğal olarak fakat ediyor. Bu yüzden -daha önce benim de düştüğüm- bu potansiyel tuzağa dikkat!
Bu özelliğin Power BI'a nasıl ekleneceğini bekleyip görmek gerekecek. Aynı konu on-prem veya bulut Analysis Service'te "partition" lar kullanılarak yapılıyor. Basitçe tariflemek gerekirse, büyük tabloyu bölümlere (partition'lara) ayırıyoruz, değişmeyen bölümler "process" edilmezken, değişen bölüm her seferinde "process" edilmeye devam ediyor.
Gelecek ayki güncellemede bu özelliği görebilirsek süper olacak!