Üç yapı, üç parantez
| Yapı | Kurma | Erişim | Karşılığı |
|---|---|---|---|
| Liste | {1, 2, 3}, {1..12} | x{0} (0’dan başlar) | Tablodaki bir sütun: t[Şehir] |
| Kayıt | [Ad = "Ayşe", Yas = 30] | r[Ad] | Tablodaki bir satır: t{0} |
| Tablo | #table({"a"}, {{1}}), Table.FromRecords | t{0}[a], t{[a = 1]} | Sorgu sonucu |
Süslü parantez öğe, köşeli parantez alan okur. Bu ikisini ayırmak M’yi okumanın yarısıdır.
let
Satir = Satislar{0},
Sutun = Satislar[Tutar],
Hucre = Satislar{0}[Şehir],
Anahtar = Satislar{[SiparisNo = 1005]}[Tutar]
in
[Ilk = Satir[Tarih], Adet = List.Count(Sutun), Hucre = Hucre, Anahtar = Anahtar]
Sütun listedir, satır kayıttır: Satislar[Tutar] dediğinde liste işlevleri, Satislar{0} dediğinde kayıt işlevleri kullanılır. Kayıt alanı başka bir kayıt, liste ya da tablo olabilir; birleştirmeden sonra hücrede gördüğün Table ve Record yazısı bu yüzdendir.
Soru işareti: bulunmazsa null
r[x] alan yoksa hata verir, r[x]? null döner. Listede de aynı: {1, 2}{5}?. Şeması oynak kaynaklarda işe yarar; ama yazım hatasını da gizler, her yere koyma.
Tablo satırları kayıttır
Table.ToRecords tabloyu kayıt listesine çevirir. Satır fonksiyonunda eline gelen _ de budur. Alan adı bir değişkendeyse köşeli parantez çalışmaz: r[alan] sabit “alan” adlı alanı okur. Değişken ad için Record.Field gerekir.
let
Alan = "Bölge",
Kayitlar = Table.ToRecords(Sehir_Bolge),
Bolgeler = List.Transform(Kayitlar, each Record.Field(_, Alan))
in
List.Distinct(Bolgeler)
Tabloyu elle kurmak
#table(
type table [Kod = text, Oran = number],
{{"A", 0.1}, {"B", 0.2}}
)
Küçük eşleme tablolarını Enter Data yerine böyle yazmak, kodun okunur ve karşılaştırılabilir kalmasını sağlar.