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.