【M言語はむずかしくない!】 数式バーでよく見かけるコードの一つに、青字の「each」というコードがあります。青字ということは、システム予約語なので、数式バーに頻繁に登場します。ですので、「each」に慣れれば、自ずとM言語自体にも慣れ親しんでいけます。今回はこの「each」についての事例を数多く紹介します。
多くの事例を通じて「each」自体についての意味合いを掴み、M関数内でのeachの使い方に慣れていきましょう!
目次
今回のポイント
「each」とセットでよく出てくるコードに「アンダースコア / _」があります
「each」と 「アンダースコア / _」の2つは切っても切れない関係にあります
何故なら、「each」は「アンダースコア / _」を使用した関数を簡略したものだからです
ですので、今回は 「アンダースコア / _」についても解説します
但し、「each」と「アンダースコア / _」の詳細な内容は難解なので、「こういうもの」だと割り切って読み進めてください
そして、最後にM関数「List.Select」を「each」と「アンダースコア / _」を使い作成します
実際に手を動かしてみて「each」と「アンダースコア / _」に対する感覚を掴んでみてください
M関数の作成にあたっては、前回も行ったようにM関数の使用例を活用します!
「each」の使用例
まずは、「each」の理解の入り口として「each」の使用例を2つ紹介します
フィルタリング
下の画像のように、エディタ内に「氏名」「部門」という列名の列があるデータがあるとします
こちらの部門列から「営業」をフィルタリングします
すると、数式バーは以下の表示になり、「each」が条件式に合うものに対して使われているのが分かります
抽出
前述のデータにて、今度は「氏名」の列から「苗字」を抽出します
使用するメニューは「変換」タブ内の「抽出 / 区切り記号の前のテキスト 」になります
区切り文字として使用する記号は「半角スペース」を使用します
すると、数式バーは以下の画像のような表示になり、「each」と「アンダースコア」(“BeforeDelimiter(“の後に表示)が使用されています
上の画像だと分かりずらいと思いますので、文字列に直して表示し直したものも確認しておいてください
= Table.TransformColumns(フィルターされた行, {{“氏名”, each
Text.BeforeDelimiter(_, ” “), type text}})
「each」の中味について
Microsoft社の「each」についての解説を見ると、「簡略化された宣言」と解説されています
「each」について、シンプルに解説しようとしたら、エディタ内ではなくエクセルシート内のテーブルにて解説した方がいいかもしれません
上のGIF画像のように「=」を使用して「部門」列を参照すると、一気に「部門」列内の値が抽出されます
これが「each」の役割です
もっと技術的な言い方をすると、記事の冒頭で前述したように「アンダースコア / _」を使用した関数を簡略したものです
この点については、実際の使用例で解説します
「each」の使用例で紹介した下の画像の数式を、「アンダースコア」で書き直してみます
一旦、仮の変数のmyRuleで「each」を置き換えます
更に、上の画像のmyRuleを「アンダースコア」で置き換えます
これで、「each」が「アンダースコア」で置き換えられました
この「アンダースコア」で置き換えられた関数の簡略化したものが「each」ということです
但し、この解説では何のことかよく分からないと思います
そもそも「アンダースコア」が何なのか?ということすら不明です
「アンダースコア」が何かを知るのに一番いいのが、カスタム列を「アンダースコア」で作成することです
カスタム列を「アンダースコア」で作成すると、エディタ内は以下の画像のような列が作成されます
作成された数式は以下の様に、「each」と「アンダースコア」が組み合わせられています
上の画像の「Record」をクリックすると、それぞれのレコードが開きます
この画像を見るに、「アンダースコア」とは各レコードの内容を仮受したものとして理解するのがいいと思います
M関数を作成する / List.Select
では、「each」を使用してM関数を作成してみましょう!
「each」と「アンダースコア」 を使って、M関数「List.Select」を作成し、前述のデータから「部門」が「営業」の部門を抽出しましょう!
前述の解説に使用したデータを元の状態に戻した後に、部門の列をリスト化します
すると、数式バーには以下の様になっています
次に上の画像の数式マークをクリックして、一旦、確定処理を行います
これで、数式バー内が前ステップ名「部門」を参照するだけの内容になりました
次に、一旦は「List.Select」と入力し、エンターキーを押します
前ステップ名は消えてしまって構いません
すると、上の画像のようにM関数「List.Select」解説が表示されます
そして、解説画面をスクロールしていくと使用例が表示されています
上記画像の数式部分を抜き出すと次の通りです
➡ List.Select({1, -3, 4, 9, -2}, each _ > 0)
この内容を見ると、リストの中の内容(1,-3,4,9,-2)を、
ⅰ)「アンダースコア」が仮受
ⅱ)ⅰのアンダースコアが、仮受したものの中で条件に合うものを抽出
ⅲ)eachでⅱで抽出されたものの「それぞれ」を指定
という内容になっています
では、この使用例を活用して実際にM関数を入力します
➡ List.Select(部門/前ステップ名 , each _ = “営業”)
これで「each」と「アンダースコア」 を使ってM関数が作成できました
<まとめ>
今回は「each」と「アンダースコア / _」について解説を行いました
解説の中では細かい説明も行いましたが、
・「アンダースコア / _」がレコードの内容を仮受けするもの
・「each」が、「アンダースコア」が仮受した内容から、ある種の条件にて抽出された内容の全体を示すもの
との理解でもいいと思います
「each」と「アンダースコア / _」 の定義を突き詰めると難解ではありますが、使用例を数種類見ていくと、感覚的にはそんなに難しくはないと思います
解説の中で示した使用例を活用し、実際に手を動かしてM関数を作成していくと「each」と「アンダースコア / _」に早く慣れることができると思います
今回の解説は以上です
長文に最後までお付き合い頂き誠にありがとうございました
次回は、M関数を使用して複数シートを一気にまとめる方法について解説します
コメントを残す