Power Query M işlevlerini anlama
Power Query M formül dilinde işlev, giriş değerleri kümesinden tek bir çıkış değerine eşlemedir. İşlev, önce işlev parametrelerini adlandırarak ve ardından işlevin sonucunu hesaplamak için bir ifade sağlayarak yazılır. İşlevin gövdesi, gider (=>) simgesini izler. İsteğe bağlı olarak, tür bilgileri parametrelere ve işlev dönüş değerine eklenebilir. İşlev, let deyiminin gövdesinde tanımlanır ve çağrılır. Parametreler ve/veya dönüş değeri örtük veya açık olabilir. Örtük parametreler ve/veya dönüş değeri herhangi bir türdedir. Herhangi bir tür, diğer dillerdeki nesne türüne benzer. M'deki tüm türler herhangi bir türden türetilir.
İşlev, sayı veya metin değeri gibi bir değerdir ve diğer ifadeler gibi satır içi olarak eklenebilir. Aşağıdaki örnekte, daha sonra diğer birkaç değişkenden çağrılan veya yürütülen Add değişkeninin değeri olan bir işlev gösterilmektedir. bir işlev çağrıldığında, işlev gövdesi ifadesinde gerekli giriş değerleri kümesini mantıksal olarak yerine koyan bir değer kümesi belirtilir.
Örnek - Açık parametreler ve dönüş değeri
let
AddOne = (x as number) as number => x + 1,
//additional expression steps
CalcAddOne = AddOne(5)
in
CalcAddOne
Örnek - Örtük parametreler ve dönüş değeri
let
Add = (x, y) => x + y,
AddResults =
[
OnePlusOne = Add(1, 1), // equals 2
OnePlusTwo = Add(1, 2) // equals 3
]
in
AddResults
5'ten büyük bir listenin ilk öğesini veya aksi halde null değerini bulma
let
FirstGreaterThan5 = (list) =>
let
GreaterThan5 = List.Select(list, (n) => n> 5),
First = List.First(GreaterThan5)
in
First,
Results =
[
Found = FirstGreaterThan5({3,7,9}), // equals 7
NotFound = FirstGreaterThan5({1,3,4}) // equals null
]
in
Results
İşlevler özyinelemeli olarak kullanılabilir. İşleve özyinelemeli olarak başvurmak için tanımlayıcıya @ön ekini ekleyin.
let
fact = (num) => if num = 0 then 1 else num * @fact (num-1)
in
fact(5) // equals 120
Her anahtar sözcük
Her anahtar sözcük kolayca basit işlevler oluşturmak için kullanılır.
each ...
parametresini _
alan işlev imzası için söz dizimsel şekerdir(_) => ...
.
Her anahtar sözcük, varsayılan olarak _
öğesine uygulanan arama işleciyle birleştirildiğinde kullanışlıdır.
Örneğin, each [CustomerID]
ile aynıdır each _[CustomerID]
ve ile aynıdır (_) => _[CustomerID]
.
Örnek - Tablo satırı filtresinde her birinin kullanılması
Table.SelectRows(
Table.FromRecords({
[CustomerID = 1, Name = "Bob", Phone = "123-4567"],
[CustomerID = 2, Name = "Jim", Phone = "987-6543"] ,
[CustomerID = 3, Name = "Paul", Phone = "543-7890"] ,
[CustomerID = 4, Name = "Ringo", Phone = "232-1550"]
}),
each [CustomerID] = 2
)[Name]
// equals "Jim"