Power Query M 言語では、each
キーワードを使用して無名関数(匿名関数)を定義することができり。無名関数は慣れてくると特定の操作を簡潔に記述するために便利なようだがなかなか慣れない。。自分自身がeachに慣れるために、each
の基本的な使い方と具体例をまとめました。
each の基本構文
each
の基本構文は以下の通り:
1 |
each <expression> |
each
の後に続く<expression>
は、無名関数の本体- 無名関数内での引数は
_
で表される。これは、関数が適用されるリストやテーブルの各要素を指すすことになる。
無名関数とは
無名関数(匿名関数)とは、名前を持たない関数のこと。通常の関数定義では関数に名前を付けるが、無名関数は名前を付けずに関数を定義する。このため、一時的な処理やコールバック関数として利用されることが多い。
無名関数のメリット
- 簡潔さ: 名前を付ける必要がないため、コードが簡潔になる(ただし慣れが必要)
- 一時的な使用: 一度しか使わない関数に名前を付ける手間を省ける。
- スコープの制御: 無名関数はその場で定義されるため、グローバルスコープを汚染しない。
eachの具体例
以下each
を使用したシンプルな例。この例では、リストの各要素に対して特定の操作を適用する。
例1: リストの各要素に 1 を加える
1 2 3 4 5 6 7 8 9 |
let // 元のリストを定義 OriginalList = {1, 2, 3, 4, 5}, // 各要素に 1 を加える無名関数を適用 IncrementedList = List.Transform(OriginalList, each _ + 1) in // 結果を返す IncrementedList |
OriginalList
は{1, 2, 3, 4, 5}
List.Transform
は、リストの各要素に対して無名関数「each _ + 1」
を適用「_」
はリストの各要素を指し、「_ + 1
」 は各要素に 1 を加える。- 結果として、
IncrementedList
は{2, 3, 4, 5, 6}
となる。
例2: 文字列リストの各要素に接尾辞を追加する
1 2 3 4 5 6 7 8 9 |
let // 元のリストを定義 OriginalList = {"apple", "banana", "cherry"}, // 各要素に " fruit" を追加する無名関数を適用 ModifiedList = List.Transform(OriginalList, each _ & " fruit") in // 結果を返す ModifiedList |
OriginalList
は{"apple", "banana", "cherry"}
List.Transform
は、リストの各要素に対して無名関数「each _ & " fruit"
」 を適用「_
」はリストの各要素を指し、「_ & " fruit"
」は各要素に ” fruit” を追加- 結果として、
ModifiedList
は{"apple fruit", "banana fruit", "cherry fruit"}
となる
each の詳細な解説
each
は、Power Query M 言語で無名関数を簡潔に定義するためのシンタックスシュガー(糖衣構文)。無名関数は、特定の操作を簡単に記述するために使用される。例として、以下のように each
を使わない場合の無名関数の定義と比較してみる。
例3: each を使わない場合
1 2 3 4 5 6 7 8 9 |
let // 元のリストを定義 OriginalList = {1, 2, 3, 4, 5}, // 各要素に 1 を加える無名関数を適用 IncrementedList = List.Transform(OriginalList, (x) => x + 1) in // 結果を返す IncrementedList |
each
を使わない場合、無名関数は「(x) => x + 1」
のように定義される。- 「
each _ + 1
」 は、実際には 「(x) => x + 1
」と同じ意味を持つ
例4: each を使わない場合 関数を定義版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
let // 元のリストを定義 OriginalList = {1, 2, 3, 4, 5}, // 各要素に 1 を加える関数を定義 AddOne = (x) => let result = x + 1 in result, // 定義した関数を使用してリストを変換 IncrementedList = List.Transform(OriginalList, AddOne) in // 結果を返す IncrementedList |
- AddOne という関数を定義する方法もある。
- こちらも「
each _ + 1
」 や 「(x) => x + 1
」と同じ意味を持つ
まとめ
each
を使用することで、無名関数を簡潔に定義し、リストやテーブルの各要素に対して特定の操作を適用することができる。これらの例を参考にeach
の使い方をマスターしたい。
参考文献
- Excelguru: The Each Keyword in Power Query
- ときおり出てくる “each” キーワードと “_” (アンダースコア) とは #Excel – Qiita
- Power Query M 関数について – PowerQuery M | Microsoft Learn
ときおり出てくる "each" キーワードと "_" (アンダースコア) とは - Qiita
Power BI Desktop や Excel のクエリ エディターでデータの変換や加工をしていると、"each" キーワードと "_"(アンダースコア)が 式に使用されている。さて、これは何か?…
コメント