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

Özel fonksiyon ve parametre: tekrar eden işi tek yere toplamak

Fonksiyon söz dizimi, isteğe bağlı parametre, tür denetimi, tablo alan fonksiyon, Invoke Custom Function, @ ile özyineleme, Manage Parameters, Create Function.

Uygulamada aç, 12 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ç.

Fonksiyon bir değerdir

Parametreler parantezde, gövde => sonrasında. Tür yazmak isteğe bağlıdır ama hatayı erken yakalar. optional parametre verilmezse null olur, ?? ile varsayılan verilir.

let
    KdvEkle = (tutar as number, optional oran as nullable number) as number =>
        tutar * (1 + (oran ?? 0.2))
in
    [Varsayilan = KdvEkle(100), Yuzde10 = KdvEkle(100, 0.1)]

Sütunda çağırmak: Invoke Custom Function

Şeritte Sütun ekle → Genel → Invoke Custom Function. Ürettiği kod:

let
    Sinif = (t as nullable number) as text =>
        if t = null then "Bilinmiyor" else if t > 1000 then "Büyük" else "Küçük",
    Sonuc = Table.AddColumn(Satislar, "Sınıf", each Sinif([Tutar]), type text)
in
    Sonuc

Power BI’da fonksiyonu ayrı bir sorgu olarak tutarsın, adı fnSinif gibi olur, her sorgudan çağrılır. Lab’de tek kod kutusu olduğu için let içinde tanımlıyoruz.

Tablo alan fonksiyon

Fonksiyon tablo alıp tablo döndürebilir. Sütun adını parametre yapmak için Table.Column ya da Record.Field gerekir:

let
    Ozet = (t as table, kirilim as text, deger as text) as table =>
        Table.Group(t, {kirilim}, {{"Toplam", each List.Sum(Table.Column(_, deger)), type number}})
in
    Ozet(Satislar, "Kategori", "Tutar")

Özyineleme: @

Fonksiyon kendine @ ile başvurur. Learn’deki örnek faktöriyeldir. Sonsuz özyineleme burada durdurulur.

let
    fact = (num) => if num = 0 then 1 else num * @fact(num - 1)
in
    fact(5)

Parametreler

Giriş → Manage Parameters ad, tür ve geçerli değer ister. Arkada parametre sıradan bir sorgudur:

let
    EsikTutar = 1000 meta [IsParameterQuery = true, Type = "Number", IsParameterQueryRequired = true],
    Sonuc = Table.SelectRows(Satislar, each [Tutar] > EsikTutar)
in
    Sonuc

Power BI’da EsikTutar ayrı sorgudur; burada aynı kutuya yazdık. meta kısmı değeri değiştirmez, arayüze “bu bir parametredir” der. Service’te anlam modeli ayarlarından değiştirilebilir, bu da geliştirme ve canlı sunucu arasında geçişi çözer.

Şeritten fonksiyon üretmek

Learn’ün önerdiği yol: Bir parametre, ona başvuran örnek sorgu, sonra sorguya sağ tık Create Function. Örnek sorguda yaptığın değişiklik fonksiyona yansır. Fonksiyonun kodunu elle değiştirirsen bu bağ kopar; düzenleyici de uyarır. Fonksiyona sonradan parametre eklersen çağıran adım hata verir: adımı yeniden aç, değeri gir.

Performans ve katlamaBir satır için fonksiyon çağırmak, özellikle fonksiyon kaynağa sorgu gönderiyorsa, kaynağa satır sayısı kadar istek demektir. Fonksiyon adımından sonraki adımlar da genellikle katlanmaz.
Alıştırmalara geç (12)