次の方法で共有


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 キーワードは、既定で_に適用されるルックアップ演算子と組み合わせる場合に便利です。 たとえば、 each [CustomerID]each _[CustomerID]と同じであり、 (_) => _[CustomerID]と同じです。

例 - テーブル行フィルターでそれぞれを使用する

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"