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

M kodu yazmaya başla: değerler, let, each, if, tür sistemi

Gelişmiş Düzenleyici’de elle yazmak: değer türleri, let ve in, tembel değerlendirme, each ve alt çizgi, if, null kuralları, is ve as.

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ç.

M dili dersi arkadaki kodu okumayı öğretti. Bu derste kodu sen yazıyorsun.

Burada çalışan ne?Alıştırmalar ve Çalıştır düğmeleri, uygulamanın içindeki küçük bir M alt kümesi yorumlayıcısında çalışır. Gerçek Power Query motoru değildir: kaynağa bağlanmaz, sorgu katlamaz. Desteklenmeyen işlevde sonuç uydurmaz, “bu alt kümede yok” der. Hazır sorgular: Satislar, Aylik_Satis, Bayi_Subat, Sehir_Bolge, Hedefler, Urun_Listesi, Musteri_Ham, Bayi_Ocak.

Her şey bir değer, her ifade bir sonuç

M bir formül dilidir: komut sırası çalıştırmaz, tek bir ifadeyi değerlendirir. Değer türleri: null, logical, number, text, date, datetime, duration, binary, list, record, table, function, type.

let
    Tutar = 1000,
    Oran = 0.2,
    KDV = Tutar * Oran
in
    Tutar + KDV

let ara adlar tanımlar, in sonucu söyler. Uygulanan adımlar listesindeki her satır, let içindeki bir addır. Son adımdan sonra virgül olmaz; bu, elle yazarken en sık hatadır.

Tembel değerlendirme

M, gereken değeri hesaplar. Sonuçta kullanılmayan adım çalışmaz. Aşağıdaki kod hata vermez, çünkü Kotu hiç istenmiyor:

let
    Kotu = error "çalışsaydı patlardı",
    Iyi = 5
in
    Iyi

Sıra da bağlayıcı değildir: adımlar birbirine adla bağlanır. Yine de okunurluk için sırayla yaz.

each ve alt çizgi

each, tek parametreli fonksiyonun kısaltmasıdır: each [Tutar] * 2 ile (_) => _[Tutar] * 2 aynı şeydir. Köşeli parantez, _ kaydının alanını okur. Listelerde alan yoktur, doğrudan _ yazılır.

let
    Satirlar = Table.SelectRows(Satislar, each [Şehir] = "Ankara"),
    Ciftler = List.Select({1, 2, 3, 4}, each Number.IsEven(_))
in
    [Tablo = Table.RowCount(Satirlar), Liste = Ciftler]

null kuralları ve if

Metin birleştirme ve tür dönüşümü

M örtük tür dönüşümü yapmaz. "Tutar: " & 1250 hata verir; Text.From(1250) gerekir. Excel ve DAX alışkanlığının en çok çarptığı yer burasıdır. Büyük küçük harf de önemlidir: table.addcolumn tanınmaz.

Tür sistemi: değer türü ve sütun türü

x is number sınar, x as number doğrular ve uymazsa hata verir. Fonksiyon parametresinde de aynı denetim çalışır. Sütun türü ayrı bir bilgidir: Table.TransformColumnTypes değerleri çevirir, Table.AddColumn(..., type number) ise yalnız etiket koyar, değeri çevirmez.

let
    Sinama = [Sayi = 5 is number, Metin = "5" is number, BosMetin = null is nullable text],
    Cevirme = Number.FromText("12.5") + 1
in
    [Sinama = Sinama, Cevirme = Cevirme]

Türleri karşılaştırmak

Değerin türünü sınamak için x is number ya da Value.Is(x, type number) yaz. Türü bir değer olarak sınamak için Type.Is(Value.Type(x), type number). Value.Type(1) = type number yazma: M belirtimi tür eşitliğini uygulamaya bırakır, yalın türlerde true dönebileceğini söyler ama (type [a = text]) = (type [a = text]) için dönmeyebilir. Bu alt küme yalın türde true verir, kayıt ve tablo türünde tahmin etmez, durur.

[Bir = Type.Is(type text, type nullable text), Iki = Type.Is(type nullable text, type text), Uc = Type.Is(Value.Type(5), type number)]
KültürMetin sayıya ya da tarihe çevrilirken kültür belirleyicidir: Table.TransformColumnTypes(t, {{"Tarih", type date}}, "tr-TR"). Kültür vermezsen bilgisayarın bölge ayarı kullanılır, aynı kod başka makinede başka sonuç verebilir. Lab kültürsüz durumda tarihi kabul etmez, kültür ister.
Alıştırmalara geç (12)