• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Soru Power Query "Table.Buffer" Fonksiyonunun İç İçe Döngülerde (Nested Joins) Doğru Kullanımı ve Katlanma (Folding) Kaybı

avcibahar

Yeni Üye
Aktivite

0%

Katılım
31 Ağu 2026
Mesajlar
3
Aldığı beğeni
0
Konu Sahibi
Windows 10 Google Chrome 152
Selamlar,
Power Query kullanarak ham veri tablolarımı işlerken çok garip bir performans sorunu yaşıyorum. Birbirine bağlı 3 farklı sorguyu (Sorgu1, Sorgu2, Sorgu3) satır bazında satır satır eşleştirmek için Table.NestedJoin veya özel sütun ekleyerek satır içi filtreleme yapıyorum.İnternetteki yabancı kaynaklarda, alt sorguların sürekli yeniden hesaplanmasını önlemek ve veriyi RAM'e sabitlemek için Table.Buffer fonksiyonunun kullanılması gerektiği yazıyor. Ancak bu fonksiyonu sorgunun tam olarak hangi adımına yerleştirmeliyim? Bazı denemelerimde Table.Buffer ekledikten sonra sorgu katlanması (Query Folding) devre dışı kaldı ve veri tabanından veriyi çekme süresi daha da uzadı.Büyük veri dönüşümlerinde Table.Buffer kullanırken Query Folding mekanizmasını bozmadan hızı artırmanın formülü nedir? Adım bazında mantığı açıklayabilirseniz çok sevinirim.
 

Ekli dosyalar

Windows 10 Google Chrome 152
Merhaba,
Çok hassas ve Power Query performans mimarisinin en kritik noktalarından birine değinmişsiniz. Table.Buffer fonksiyonu, veriyi RAM'e sabitleyerek alt sorguların (Nested Joins) satır bazında tekrar tekrar tetiklenmesini engeller. Ancak yanlış adımda kullanıldığında dediğiniz gibi Query Folding (Sorgu Katlanması) mekanizmasını tamamen kırar.
Bu mekanizmayı bozmadan hızı artırmak için şu altın kuralı uygulayabilirsiniz:
  1. Ana Sorguda Değil, Alt Sorguda Kullanın: Table.Buffer işlemini veriyi çektiğiniz ana büyük sorguya değil, birleştirmek (Join) istediğiniz küçük/yardımcı alt sorguların son adımına uygulamalısınız.
  2. Katlanmayı (Folding) Koruma Sıralaması: Alt sorgunuzda veri tabanından filtreleme, sütun seçme gibi tüm Folding destekleyen adımları tamamlayın. Bu adımların bittiği en son satıra gelip gelişmiş düzenleyicide (M Dili) şu şekilde buffer uygulayın:
    TamamlananAdim_Buffer = Table.Buffer(SonFiltreliAdim)
  3. Ana Sorguda Çağırma: Ana sorgunuzda Table.NestedJoin yaparken kaynak tablo olarak bu buffer'lanmış alt sorguyu gösterdiğinizde, veri tabanı katlanması ana sorguda devam ederken alt sorgu RAM'den beslenir ve performans tavan yapar.
Sizin ekli dosyada durum tam olarak nasıl kurgulandı? Gelişmiş düzenleyicideki M kodlarınızı paylaşırsanız, Table.Buffer satırını tam olarak hangi adıma koymanız gerektiğini netleştirebiliriz. Ustalarımızın da bu konuda farklı bir optimizasyon önerisi varsa öğrenmek isterim.

Galapagos hocamın alanı diye hatırlıyorum ama yanlışta hatırlıyor olabilirim.
 
Geri
Üst