Opis funkcji Power Query M

W języku formuł Power Query M funkcja jest mapowaniem z zestawu wartości wejściowych na pojedynczą wartość wyjściową. Funkcja jest zapisywana przez najpierw nazewnictwo parametrów funkcji, a następnie podanie wyrażenia w celu obliczenia wyniku funkcji. Treść funkcji jest zgodna z symbolem goes-to (=>). Opcjonalnie można uwzględnić informacje o typie dla parametrów i zwracanej wartości funkcji. Funkcja jest definiowana i wywoływana w treści instrukcji let . Parametry i/lub wartość zwracana mogą być niejawne lub jawne. Niejawne parametry i/lub wartość zwracana są typu dowolne. Typ dowolny jest podobny do typu obiektu w innych językach. Wszystkie typy w języku M pochodzą z dowolnego typu.

Funkcja jest wartością podobną do liczby lub wartości tekstowej i może być uwzględniona w wierszu tak samo jak dowolne inne wyrażenie. W poniższym przykładzie przedstawiono funkcję, która jest wartością zmiennej Dodaj, która jest następnie wywoływana lub wykonywana z kilku innych zmiennych. Po wywołaniu funkcji określony jest zestaw wartości, które są logicznie zastępowane wymaganym zestawem wartości wejściowych w wyrażeniu treści funkcji.

Przykład — jawne parametry i wartość zwracana

let  
    AddOne = (x as number) as number => x + 1,  
    //additional expression steps  
    CalcAddOne = AddOne(5)  
in  
    CalcAddOne  

Przykład — niejawne parametry i wartość zwracana

let  
    Add = (x, y) => x + y,  
    AddResults =   
        [  
            OnePlusOne = Add(1, 1),     // equals 2  
            OnePlusTwo = Add(1, 2)      // equals 3  
    ]  
in  
    AddResults  

Znajdź pierwszy element listy większej niż 5 lub null w przeciwnym razie

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  

Funkcje mogą być używane rekursywnie. Aby rekursywnie odwoływać się do funkcji, prefiks identyfikatora za pomocą znaku @.

let   
    fact = (num) => if num = 0 then 1 else num * @fact (num-1)   
in   
    fact(5) // equals 120  

Każde słowo kluczowe

Każde słowo kluczowe służy do łatwego tworzenia prostych funkcji. "każdy ..." jest cukrem składniowym dla podpisu funkcji, który przyjmuje parametr _ "(_) => ..."

Każda z nich jest przydatna w połączeniu z operatorem wyszukiwania, który jest domyślnie stosowany do _
Na przykład każdy [CustomerID] jest taki sam jak każdy element _[CustomerID], który jest taki sam jak (_) => _[CustomerID]

Przykład — używanie każdego filtru wierszy tabeli

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"