Ana içeriğe geç
Kesit Power BI
İleri · Veri Hazırlama

Sorgu katlama, Table.Buffer, performans, Value.NativeQuery

Tam, kısmi ve hiç katlama; katlamayı bozan adımlar; Table.Buffer ve List.Buffer ne zaman; Sorgu tanılaması; Value.NativeQuery ile parametreli SQL ve riskleri.

Uygulamada aç, 10 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Bu dersin sınırıYorumlayıcı kaynağa bağlanmadığı için katlama burada gözlenemez. Bu ders kavram ve karar öğretir. Kod blokları salt okunurdur ya da sonucu değil söz dizimini gösterir. Gerçek sınama için Power BI Desktop ve bir SQL kaynağı gerekir.

Sorgu katlama

Learn: Sorgu katlama, Power Query’nin dönüşümleri tek bir kaynak sorgusuna (örneğin tek bir SELECT) çevirmesidir. DirectQuery ve Dual tablolarda zorunludur. Import’ta en iyi yenileme performansını verir. Üç sonuç vardır: tam katlama, kısmi katlama (bir noktaya kadar kaynak, sonrası motor), katlama yok.

let
    Kaynak = Sql.Database("srv", "AnadoluMarket"),
    Satis = Kaynak{[Schema = "dbo", Item = "Satislar"]}[Data],
    Filtre = Table.SelectRows(Satis, each [Tarih] >= #date(2024, 1, 1)),   // katlanır
    Sutun = Table.SelectColumns(Filtre, {"Tarih", "Tutar"}),               // katlanır
    Grup = Table.Group(Sutun, {"Tarih"}, {{"T", each List.Sum([Tutar])}}), // katlanır
    Dizin = Table.AddIndexColumn(Grup, "Sıra", 1, 1)                       // çoğu kaynakta katlanmaz
in
    Dizin

Nasıl anlarsın?

Katlamayı koruyan düzen

  1. Filtre ve sütun seçimini en başa al. Learn: akış işlemleri önce, pahalı işlemler sona.
  2. Katlanmayan adımı bul, sonrasındaki adımları önüne alabiliyorsan al.
  3. Özel M fonksiyonu, Text.Proper gibi kaynakta karşılığı olmayan işlevler, farklı kaynakları birleştirmek, Dizin ve Table.Buffer katlamayı genellikle bozar.
  4. Bir SELECT ile yapılabilecek işi görünüm olarak veri tabanına taşı.
  5. Artımlı yenileme filtre katlanmazsa anlamını yitirir; önce katlamayı doğrula.

Table.Buffer ve List.Buffer

Table.Buffer tabloyu belleğe alır, değerlendirme sırasında dış değişikliklerden yalıtır. Learn’ün uyarısı açık: hızlandırmayabilir; hepsini okuyup bellekte tutmak yavaşlatabilir ve sonraki adımların katlanmasını engeller. Yalnız katlamayı durdurmak istiyorsan Table.StopFolding var. Buffer sığdır: hücredeki kayıt, liste ve tablo içeriklerini zorlamaz.

DurumBuffer?
Sıralı sonucu sabitleyip sonra Distinct ya da gruplamaEvet, sonuç sırası kritikse
Bir sorguyu satır fonksiyonunda defalarca okuyorsunEvet: List.Buffer ya da Table.Buffer ile tek okuma
“Yavaş” diye rastgele her adımaHayır: bellek artar, katlama bozulur
Veri kaynağı katlıyor, filtre sonra gelecekHayır: tüm satırları çeker

Sorgu tanılaması

Araçlar → Start Diagnostics, yenile, Stop Diagnostics. İki sorgu gelir: özet ve ayrıntılı. Exclusive duration (%) nerede vakit geçtiğini gösterir; yalnız aynı Id içinde toplanır. Power Query filtre listeleri ve üst veri için de sorgu çalıştırdığından tekrarlar görürsün.

Value.NativeQuery

Elle SQL gerektiğinde Learn’ün önerdiği yol budur: değerleri metne eklemek yerine parametre olarak geçirir.

let
    Source = Sql.Database("server", "database"),
    Result = Value.NativeQuery(
        Source,
        "SELECT * FROM Sales WHERE SalesYear = @year",
        [year = 2024]
    )
in
    Result
Lab’de deneValue.NativeQuery burada “bu alt kümede çalışmaz” der. Bunu M editöründe görebilirsin.

Kısa performans listesi

Alıştırmalara geç (10)