Power Query M 関数についてUnderstanding Power Query M functions

Power Query M 数式言語での 関数 は、一連の入力値からの 1 つの出力値へのマッピングです。In the Power Query M formula language, a function is a mapping from a set of input values to a single output value. 関数は、まず関数のパラメーターに名前を付けてから、関数の結果を計算する式を指定し記述します。A function is written by first naming the function parameters, and then providing an expression to compute the result of the function. 関数の本文は、(=>) 記号以降になります。The body of the function follows the goes-to (=>) symbol. 必要に応じて、パラメーターおよび関数の戻り値に型情報を含めることができます。Optionally, type information can be included on parameters and the function return value. 関数は let ステートメントの本文に定義して呼び出します。A function is defined and invoked in the body of a let statement. パラメーターや戻り値は、暗黙的または明示的に指定できます。Parameters and/or return value can be implicit or explicit. 暗黙のパラメーターや戻り値の型は、any 型になります。Implicit parameters and/or return value are of type any. any 型は、他の言語のオブジェクト型に似ています。Type any is similar to an object type in other languages. M のすべての型は、any 型から派生しています。All types in M derive from type any.

関数 は数値またはテキスト値のような値であり、他の式と同じようにインラインに含めることができます。A function is a value just like a number or a text value, and can be included in-line just like any other expression. 次は、その後他のいくつかの変数から呼び出されるか実行される Add 変数の値の関数の例です。The following example shows a function which is the value of an Add variable which is then invoked, or executed, from several other variables. 関数が呼び出されると、関数本文の式内の必要な入力値セットに論理的に置き換えられる値のセットが指定されます。When a function is invoked, a set of values are specified which are logically substituted for the required set of input values within the function body expression.

例: 明示的なパラメーターと戻り値Example – Explicit parameters and return value

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

例: 暗黙のパラメーターと戻り値Example – Implicit parameters and return value

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

リスト内の 5 より大きい最初の要素を求めます。それ以外の場合は null を返しますFind the first element of a list greater than 5, or null otherwise

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  

関数は再帰的に使用できます。Functions can be used recursively. この関数を再帰的に参照するには、識別子の前に @ を付けます。In order to recursively reference the function, prefix the identifier with @.

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

each キーワードEach keyword

each キーワードは、単純な関数の作成に使用します。The each keyword is used to easily create simple functions. “each ...” は、_ パラメーター “(_) => ...” を取る関数シグネチャの糖衣構文です。“each ...” is syntactic sugar for a function signature that takes the _ parameter “(_) => ...”

each は、既定で _ に適用される lookup 演算子と組み合わせると便利です。Each is useful when combined with the lookup operator, which is applied by default to _
たとえば、each [CustomerID] は each _[CustomerID] と同じですが、これは (_) => _[CustomerID] と同じですFor example, each [CustomerID] is the same as each _[CustomerID], which is the same as (_) => _[CustomerID]

例: テーブル行フィルターで each を使用するExample – Using each in table row filter

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"