【M言語は難しくない!】今回は、前回紹介したM言語の特徴を意識しながら、実際に「M関数」を使用したカスタム列を作成してみましょう!
では、前回紹介したM言語の特徴を振り返ってみましょう!
ⅰ.コードのカラー
赤は「文字列」、青はeachなどの「予約語」、緑は「自動記録された値」です
ⅱ.大文字と小文字の区別
M言語は、大文字と小文字の違いを認識します
ⅲ.ステップの引継ぎ
適用したステップは「ステップ名」を通じて、前ステップの内容を引き継ぎます
今回はこの3つの特徴に加え、次の4つ目の特徴も意識しましょう!!
ⅳ.データ形式
エクセルは表計算ソフトであって、Accessのようなデータベースソフトではありません
よって、過去の記事で紹介したように、Power Queryではデータ形式を意識した「データの構造化」がエディタを開く際に、自動的に行われます
当然、Power Queryエディタ(以降、エディタ)内で列を追加する時にも「データ形式」を意識する必要があります
では、今回意識すべきPower Queryの4つの特徴を確認したところで、M関数を使用した「カスタム列」の追加についての解説を始めたいと思います
今回、解説に使用するデータは次の画像のデータです
ファイルデータはこちらになります
Mコード2回目_練習
こちらのデータから、次の列をM関数を使用して作成します
A.「姓」と「入会年」を組み合わせたログインID
「入会年」は「整数」のため、M関数を使用して「文字列」に変換します
B.「入会年」「入会月」と「1日」を組み合わせた入会日
M関数にて、3つの整数から日付を作成します
エクセル関数のDATE関数と同じ要領です
なお、上のABの列を作成する前に、ウォーミングアップとこれまでの復習を兼ねて、簡単なカスタム列を作成してみましょう
目次
1.全ての行が「1」の列
まず、データテーブル上で右クリックし、下の画像の黄色の箇所からエディタを開きます
エディタが開いたら、「列の追加」タブから「カスタム列」をクリックします
次に開いた「カスタム列」の画面で「1」を指定します
上の画像のように「1」を指定したら、右下のOKボタンをクリックします
すると全ての行が「1」になっている新たな列「1」が追加されます
では、エディタ画面上の数式バーの中味を詳細に確認してみましょう
まず、()の中の左から1番目の「変更された型」についてです
①ステップ名
こちらは、前ステップの「変更された型」を引き継いでいます
②新しい列名
文字列”1”として赤で表示されています
③システム予約語
「each」はシステム予約語なので、青で表示されています
④自動記録された値
最後の”1”は自動記録された値なので、緑で表示されています
①から④まで数式の中味を確認しました
ここで、数式バーに「1」と入力してみましょう
すると、③のeachの意味合いがよく分かると思います
数式バーに1と入力すると「1」が1つだけ表示されます
ですので、「each」というシステム予約語により「それぞれ~」「各々~」のような意味になるのが御理解頂けたと思います
2.ログインID の作成/文字列への変換
2.ログインIDの作成では、記事の冒頭のA.で前述したように「姓」と「入会年」を組み合わせ、ログインIDの列を作成します
なお、「姓」と「入会年」を組み合わせる際には「&」を使います
では、1.でも行ったように「カスタム列」の画面から作成を行います
「姓」と「入会年」は、ともに既存の列なので、画面右から挿入します
次の画像の内容で式を記入したら、画面右下のOKボタンをクリックします
ちなみに、上記の内容であれば、画面左下にエラーメッセージは出ません
ところが、出力された新たな列は、全てエラーになります
このエラーが何故発生するかというと、記事の冒頭のⅳで紹介したように、M言語では「データ形式」を意識する必要があるからです
「姓」は「文字列型式」ですが、実は「入会年」は「整数」です
ですので、「入会年」は文字列に変換する必要があります
ここで、M関数を使用します
エクセル関数では次の画像の画面から、該当の関数を探すことができます
M関数でも同じような画面があります
上の画像の「Power Queryの式についての詳細」をクリックすると、下の画像のMicrosoft社の画面に遷移します
上の画像の下に「カテゴリ別の関数」とありますが、こちらの中に「テキスト関数」という関数があります
更に、こちらの「テキスト関数」の中を下にスクロールすると、「Text.From」という関数があります
こちらの関数で「入会年」を「整数」から「文字列」に変換できます
このText関数では、変換対象をText.Form()の”()“の中に入れます
なお、
関数は下の画像の数式バーに直接入力してしまいましょう!
Text関数を使用する際、「Text.Form」の中のTとFのいずれかを小文字にするとエラーになりますので、注意して入力しましょう!
3.入会日の作成/整数から日付作成
こちらは、記事の冒頭のB.にて紹介した、下の画像の「#date」関数を使用した内容になります
こちらのM関数は、#date()の()の中に、整数の「年」「月」「日」を設定します
下の画像のエクセル関数の「DATE関数」と同じ要領になりますので、こちらのM関数は取り組みやすいと思います
但し、2.で扱ったText.From関数と違い、この関数は小文字のdで始まります
この点については、エラーにならないように注意して入力しましょう!
作成する画面についてですが、こちらは、カスタム列の作成画面で作成します
()の中の最後の「日」は手動で「1」を入力します
新たに作成された列は、次の画像のように出力されます
<まとめ>
今回はカスタム関数の作成画面にて、3つの列を作成しました
1.全て1の列
2.文字列/姓と整数/入会年を組み合わせたログインID
3.整数/「年」「月」「日」を組み合わせた入会日
1.では、前回、M言語の特徴として紹介した「each」などのコードカラー(赤、青、緑)についても解説を行いました
ちなみに、「each」はM言語を扱う際には頻繁に出てきますので、感覚として慣れて置いた方が良いです
2.では、入会年をM関数のText.Fromを使用して「整数」から「文字列」に変換しました
記事の冒頭でも紹介したように、M言語では「データ形式」を意識する必要があります
M言語を扱う際には、今回のようにデータ形式を変換する場面が出てくるはずですので、Text.From関数はぜひ習得しておきましょう!
最後は、#date関数を使用して「入会日」を作成しました
こちらの関数はText.From関数と違い、小文字から始まります
前回もM言語の特徴として解説しましたが、M言語では大文字と小文字を区別する必要があります
筆者も何度か、この大文字と小文字の区別を間違えてエラーを出しましたが、意外とエラー原因が些細すぎて原因に気づかないものです
この「大文字と小文字の区別」については特に注意しましょう!
記事を最後まで読んで下さり、誠にありがとうございました
参考までに今回使用したファイル(完成版)を添付します
エディタ画面の「適用したステップ」の表示が、解説に使用した内容とは若干相違がありますので、この点はご了承をお願いします
Mコード2回目_完成
では、次回もよろしくお願いします
コメントを残す