Power Query M 関数について

Power Query M 数式言語での関数は、一連の入力値からの 1 つの出力値へのマッピングです。 関数は、まず関数のパラメーターに名前を付けてから、関数の結果を計算する式を指定し記述します。 関数の本文は、(=>) 記号以降になります。 必要に応じて、パラメーターおよび関数の戻り値に型情報を含めることができます。 関数は let ステートメントの本文に定義して呼び出します。 パラメーターや戻り値は、暗黙的または明示的に指定できます。 暗黙のパラメーターや戻り値の型は、any 型になります。 any 型は、他の言語のオブジェクト型に似ています。 M のすべての型は、any 型から派生しています。

関数は数値またはテキスト値のような値であり、他の式と同じようにインラインに含めることができます。 次は、その後他のいくつかの変数から呼び出されるか実行される Add 変数の値の関数の例です。 関数が呼び出されると、関数本文の式内の必要な入力値セットに論理的に置き換えられる値のセットが指定されます。

例: 明示的なパラメーターと戻り値

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

例: 暗黙のパラメーターと戻り値

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

リスト内の 5 より大きい最初の要素を求めます。それ以外の場合は null を返します

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  

関数は再帰的に使用できます。 この関数を再帰的に参照するには、識別子の前に @ を付けます。

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

each キーワード

each キーワードは、単純な関数の作成に使用します。 “each ...” は、_ パラメーター "(_) => ..." を取る関数シグネチャの糖衣構文です。

each は、既定で _ に適用される lookup 演算子と組み合わせると便利です。
たとえば、each [CustomerID] は each _[CustomerID] と同じですが、これは (_) => _[CustomerID] と同じです。

例: テーブル行フィルターで each を使用する

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"