これまでは
編集画面に元々そろっていた機能を使って
処理を組み立てていました!
もちろんこれをマスターするのも大事ですが…
今回はもう少し上のステップに進んでみましょう!
それは自分で関数を作る、です!
欲しい処理を自分で作って
関数として使える様にします!
でもそのためには
PowerQueryの正体を知る必要があります!
まずはここについて解説していきます!
ステップの中身を理解しよう!
かじむー
このテーブルで説明していきます!
右にあるステップ一覧が
このテーブルに対して行った処理一覧ですよね。
例えば「支店」列に対して「北海道」でフィルタをかけると
「フィルターされた行」というステップが追加されました!
実はこの処理っていうのは
裏でプログラムが自動生成され記録されているのです。
どこか?というと
この「詳細エディター」になります。
ざ~っと見ると
先頭にLetて書いてて
その後なんとかイコールなんとかていうが沢山あって
最後In、なんちゃらって感じですね。
そしてよく見ると
イコールの左側は、各ステップ名になっていますね!※一部異なる
イコールの右側は、数式部分になっていますね!
ステップとこのプログラムが
紐づいて見えてきましたね!
ではこのプログラムコードを
解読していこうと思います!
M言語を理解しよう!
かじむー
実はこのような形式で表現しているコードを
M言語と呼びます。
この記述を理解する事が出来れば
PowerQueryの処理をコードから書いて作る事ができます!
ExcelのマクロをVBAから書いて作る感じですね!
では解説していきます。
まずLetからInの間についてです。
Letの記述について解説
まず「ソース」が何かとイコールになっていますよね!
ソース = Excel.Workbook(File.Contents("C:\YouTube\支店別売上.xlsx"), null, true)
イコールの右側には
Excel.Workbook や File.Contents という関数の記述があります。
そしてその中にファイルパスが記述されています。
これはエクセルファイルに接続する記述ですね!
この関数で得られた結果を「ソース」という名前の箱に入れた。
そんなイメージです。プログラミングで言う変数ですね。
どんな結果なのか?というと・・・
このテーブルの状態を「ソース」としています!
では次に「支店別売上_Table」の記述を見てみましょう!
支店別売上_Table = ソース{[Item="支店別売上",Kind="Table"]}[Data]
なんと先ほどの「ソース」がありますよね!
ここがM言語のポイントです!
「ソース」に対して
「売上支店別売上」という名前の
「Table」を取り出しています!
こんな風に
●前回の状態に何か処理を加える
●その結果を次の処理に渡す
と言った事を繰り返します。
こうやって見ていくと一番下のステップが
処理しつくされた状態のテーブルになりますね!
Inの記述について解説
ここは最終的にどの状態を結果として出すのかを決めます!
いま「フィルタされた行」というステップ名が書かれているので
この状態のテーブルが最終的に出力されています。
もしここを「変更された型」というステップ名を書けば
フィルタをかける前の状態が最終的に出力されます。
かじむー
そしてイコールの右側の記述って
ほぼPowerQueryの関数で出来上がってるんですよね!
という事は、PowerQueryの関数を駆使さえすれば
やりたい処理を実現できるんです!
M言語に限った話ではないですが
要は関数の集合体です。
それではこれらの話を踏まえて
自分だけのオリジナルな関数を作ってみましょう!
カスタム関数を作ってみよう!
かじむー
関数の処理部分を作る
まずは「空のクエリ」を作成します。
左のクエリ一覧の上で
右クリック→「新しいクエリ」→「その他のソース」→「空のクエリ」
ではM言語に沿って
let
x = 20,
y = 30,
result = x + y
in
result
こんな風に x と y を合計する処理を書いてみると
20 + 30 で 「50」 という正しい結果が出てきましたね!
じゃあこれそのものを関数にする方法を紹介します!
因みに関数と言うのは
「何か値を与えると結果が返ってくるもの」
ExcelのSUM関数も
値を与えると合計という結果が返ってきますよね!
それでは話を戻します。
ここで xとyの値は固定じゃなくて
その都度、入力値として与えたいですよね?
そういう場合はこの様に記述します!
関数の入力情報を作る
(x as number, y as number) =>
一行目にこんな風に書いてあげます!
「 x には 数値(number) が入りますよ~」
「 y には 数値(number) が入りますよ~」
と宣言してあげます!
この様に書く事で
これが独自の関数と認識されます。
じゃあこの関数の名前を
「加算関数」とでもしておきます!
そしてクエリを閉じると・・・
「パラメータの入力」という画面になります!
ここに x = 100, y = 400 という値を与えて
「呼び出し」を押すと・・・
xとyを合計した「500」という数値が
新しいクエリになって返ってきました!
新しく生成されたクエリの中身を見てみると
ソース = 加算関数(100, 400)
という数式になっています!
先ほど作った関数の入力情報が 100 と 400 にあたり
中で合計されて結果が返ってきています!
これは簡単なものでしたが
M言語を理解できれば、自分が欲しい機能を実装して
カスタム関数が作れるよと言うお話でした♪♪
今回のまとめ
▼PowerQueryの正体
M言語のプログラム
▼カスタム関数の作り方
①1行目に入力値
②Let~Inの間に処理
③Inに最終結果
PowerQuery関数の組合せの発想を鍛え
M言語でアウトプット出来るようになれば
プログラムから書いて処理を作る事が出来ます!
これを上手に作れる様になれば
ステップ数を減らしてスッキリさせたり
よく使うような処理をカスタム関数にして
処理を短くすることもできますね!
少し難しい話だったかもしれませんが
マスターすれば職場で効率化を任される
貴重な人材になっていきます!
業務効率を目指して頑張っていきましょう!
かじむー