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

List, Text, Date: List.Accumulate, List.Generate, Text.Split

Liste işlevleri ile döngü yerine katlama, List.Generate ile adım adım üretim, metin bölme ve ayıklama, tarih aritmetiği, takvim tablosu.

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

M’de döngü yok, liste işlevi var

M’de for ya da while yoktur. Yerine dört kalıp kullanırsın:

İşİşlevÖrnek
Her öğeyi dönüştürList.TransformList.Transform({1, 2}, each _ * 2)
SüzList.SelectList.Select(x, each _ > 0)
Tek değere indirList.AccumulateBir toplam, birleşik metin, ardışık uygulama
Önceki değerden yenisini üretList.GenerateSayfalı API, ardışık tarihler

List.Accumulate

Üç bağımsız değişken: liste, başlangıç durumu, (durum, öğe) => yeni durum. Durum yalnız sayı değildir: tablo olabilir. Bir sözlükteki tüm değişimleri sırayla bir sütuna uygulamak bunun klasik kullanımıdır.

let
    Degisim = {{"ist", "İstanbul"}, {"ank", "Ankara"}},
    Metin = "ist ve ank",
    Sonuc = List.Accumulate(Degisim, Metin, (durum, d) => Text.Replace(durum, d{0}, d{1}))
in
    Sonuc

List.Generate

Dört bağımsız değişken: başlangıç (fonksiyon), devam koşulu, sonraki değer, isteğe bağlı seçici. Hepsi fonksiyondur; ilki bile () => ister. Koşul hiç yanlış olmazsa sorgu bitmez: burada durdurulur, gerçek motorda takılır.

List.Generate(() => 1, each _ <= 100, each _ * 2)
List.Generate(
    () => [Sayfa = 1, Toplam = 10],
    each [Sayfa] <= 3,
    each [Sayfa = [Sayfa] + 1, Toplam = [Toplam] + 10],
    each [Toplam]
)

Metin

Text.Split liste döndürür, {0} ile parçaya erişilir. Text.BeforeDelimiter, Text.AfterDelimiter, Text.Start, Text.Middle, Text.Replace, Text.Contains en sık kullanılanlar. Büyük küçük harf için üçüncü bağımsız değişken: Comparer.OrdinalIgnoreCase. Türkçede Text.Upper(x, "tr-TR") kültürünü ver; yoksa sonuç bilgisayarın diline bağlıdır, İngilizce ortamda i harfi I olur.

let
    Kod = "PTY-CM1090-LAX",
    P = Text.Split(Kod, "-")
in
    [Kalkis = P{0}, Sirket = Text.Start(P{1}, 2), Ucus = Text.End(P{1}, 4), Varis = P{2}]

Tarih

Tarih aritmetiği süre (duration) ile yapılır: #date(2024, 3, 1) - #date(2024, 2, 1) 29 günlük süre verir. Gün eklemek için Date.AddDays. Takvim tablosu üretmek klasik bir M işidir; rapor için bir kez kurulur.

let
    Baslangic = #date(2024, 1, 1),
    Gunler = List.Dates(Baslangic, 5, #duration(1, 0, 0, 0)),
    T = Table.FromList(Gunler, Splitter.SplitByNothing(), {"Tarih"}),
    Tipli = Table.TransformColumnTypes(T, {{"Tarih", type date}}),
    Ay = Table.AddColumn(Tipli, "Ay Adı", each Date.MonthName([Tarih], "tr-TR"), type text)
in
    Ay

List.Buffer

List.Buffer listeyi bellekte sabitler. Filtrede List.Contains her satır için listeyi yeniden üretiyorsa bir kez arabelleğe almak ciddi hız kazandırabilir. Sonucu değiştirmez, yalnız değerlendirme davranışını değiştirir; bu yüzden Lab’de fark görünmez.

Alıştırmalara geç (14)