Power Queryで自動作成される式で、eachとアンダースコアについて調べた備忘録です。アンダースコアそのもの役割は、【Power Query】識別子 _ (アンダースコア) の理解にまとめたので、eachとの関係性についてです。
内容:
Power Queryの「each」の基本
実務上は、eachについては「それぞれ」という意味でなんとなく理解でよいと思います。
Microsoft Learnの説明では、以下の記載があります。
each-expression は、_ (アンダースコア) という名前の 1 つのパラメーターを受け取る型指定されていない関数を宣言するための構文の省略形です。
このMicrosoft Learnの説明ページには「たとえば、次の宣言のペアは意味的には同等です」とあり、次の事例が記載されています。
each _ + 1
(_) => _ + 1
each [A]
(_) => _[A]
Table.SelectRows( aTable, each [Weight] > 12 )
Table.SelectRows( aTable, (_) => _[Weight] > 12 )
つまり、「each」は「(_) =>」と同じという理解で良さそう。
なお、”_[A]”のアンダースコアは省略できるとのことです。
「each」と「(_) =>」の違いを調べた結果
上記のMicrosoft Learnの説明をもとに実際に試した結果が以降です。
「値」という数値フィールドがある表について、次の式を実施しました。
each [値] + 1
each _[値] + 1
(_)=>_[値] + 1
(_)=>[値] + 1
その結果が次のとおり、同じ結果が得られています。
なお、このステップの詳細は、詳細エディターで以下のとおりです。
let
ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
変更された型 = Table.TransformColumnTypes(ソース,{{"分類", type text}}),
式1 = Table.AddColumn(変更された型, "each [値] + 1", each [値] + 1, type number),
式2 = Table.AddColumn(式1, "each _[値] + 1", each _[値] + 1, type number),
式3 = Table.AddColumn(式2, "(_)=>_[値] + 1", (_)=>_[値] + 1, type number),
式4 = Table.AddColumn(式3, "(_)=>[値] + 1", (_)=>[値] + 1, type number)
in
式4
「each _ + 1 」は表でない場面等で利用
上記のMicrosoft Learnの説明にある「each _ + 1 」を前述の表で利用すると、次のようなエラーが発生します。
Expression.Error: 演算子 + を型 Record および Number に適用できません。
アンダースコアのデータが、Record型のために「+」の演算子が適用できないというエラーとなっています。
このRecord型については以下にも記載しています。
以上、Power Queryで自動作成される式で、eachとアンダースコアについて調べた備忘録でした。