タグ別アーカイブ: _

M言語に慣れる_8回目~eachを使いこなしてM関数作成~

【M言語はむずかしくない!】 数式バーでよく見かけるコードの一つに、青字の「each」というコードがあります。青字ということは、システム予約語なので、数式バーに頻繁に登場します。ですので、「each」に慣れれば、自ずとM言語自体にも慣れ親しんでいけます。今回はこの「each」についての事例数多く紹介します。

多くの事例を通じて「each」自体についての意味合いを掴み、M関数内でのeachの使い方に慣れていきましょう!

目次

今回のポイント

「each」の使用例

「each」の中味について

M関数を作成する / List.Select

<まとめ>

今回のポイント

「each」とセットでよく出てくるコードに「アンダースコア / _」があります

「each」と 「アンダースコア / _」の2つは切っても切れない関係にあります

何故なら、「each」は「アンダースコア / _」を使用した関数を簡略したものだからです

ですので、今回は 「アンダースコア / _」についても解説します

 但し、「each」と「アンダースコア / _」の詳細な内容は難解なので、「こういうもの」だと割り切って読み進めてください

そして、最後にM関数「List.Select」を「each」と「アンダースコア / _」を使い作成します

実際に手を動かしてみて「each」と「アンダースコア / _」に対する感覚を掴んでみてください

M関数の作成にあたっては、前回も行ったようにM関数の使用例を活用します!

画像に alt 属性が指定されていません。ファイル名: LISTSELECT.jpg

「each」の使用例

まずは、「each」の理解の入り口として「each」の使用例を2つ紹介します

フィルタリング

下の画像のように、エディタ内に「氏名」「部門」という列名の列があるデータがあるとします

こちらの部門列から「営業」をフィルタリングします

すると、数式バーは以下の表示になり、「each」が条件式に合うものに対して使われているのが分かります

抽出

前述のデータにて、今度は「氏名」の列から「苗字」を抽出します

使用するメニューは「変換」タブ内の「抽出 / 区切り記号の前のテキスト 」になります

区切り文字として使用する記号は「半角スペース」を使用します

すると、数式バーは以下の画像のような表示になり、「each」と「アンダースコア」(“BeforeDelimiter(“の後に表示)が使用されています

上の画像だと分かりずらいと思いますので、文字列に直して表示し直したものも確認しておいてください

= Table.TransformColumns(フィルターされた行, {{“氏名”, each

Text.BeforeDelimiter(_, ” “), type text}})

「each」の中味について

Microsoft社の「each」についての解説を見ると、「簡略化された宣言」と解説されています

「each」について、シンプルに解説しようとしたら、エディタ内ではなくエクセルシート内のテーブルにて解説した方がいいかもしれません

上のGIF画像のように「=」を使用して「部門」列を参照すると、一気に「部門」列内の値が抽出されます

これが「each」の役割です

もっと技術的な言い方をすると、記事の冒頭で前述したように「アンダースコア / _」を使用した関数を簡略したものです

この点については、実際の使用例で解説します

「each」の使用例で紹介した下の画像の数式を、「アンダースコア」で書き直してみます

画像に alt 属性が指定されていません。ファイル名: 営業-644x57.jpg

一旦、仮の変数の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関数を使用して複数シートを一気にまとめる方法について解説します

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ


にほんブログ村