Power Query M式言語の値の1つである関数について解説する記事です。
関数とは、何かを入力して、何かを出力するものです。
Power Query M式言語にも関数があります。
関数は自作することもできますし、M数式言語に標準で用意された関数もあります。
そしてM数式言語に標準で用意された関数はとても強力なものなので、大体それで事足りてしまうという代物です。
この記事では主にPoewr Query M数式言語で関数を自作する方法について解説します。
関数という考え方自体は他のプログラミング言語にもありますし、Excelのワークシート上でも使うことができます。
しかし、その書き方は一般的な関数とちょっと違って見えるかもしれません。
そんなM式の関数の世界を見てみましょう・・・・。
環境
Windows10
Excel 2019
関数とは?
Power Query M式の関数とは任意のパラメーターを使って新しい値を生成する値です。
ややこしい言い方すなー。
要するに基本的にはExcelのワークシート関数や一般的なプログラミング言語で言う関数と考え方、扱い方は同じです。
しかし書き方が少し独特です。M式言語の関数は、関数型の言語に慣れている人にとっては馴染み深い、ラムダ式で書きます。
ラムダ式って?何それ美味しいの?って感じですよね。
何はともあれ構文を見てみましょう。
構文は次の通りです。
(引数リスト)=>式
はい、既に暗雲が立ち込めております・・・。
関数の例
百聞は一見に如かずです。Poewr Query M式の関数の実際の例を見てみましょう。
一番簡単な例
let式を使わない匿名関数的に書くと次のようになります。
匿名なんてカッコつけていっていますが、名前のない関数という意味で、その場限りでしか使わない時に使います。
(param1,param2)=>param1+param2
上記の式を詳細エディターに貼り付けて完了ボタンを押すと、パラメーターの入力を促されます。
1と3と入力すると
4が出力されました。関数の名前を指定しなかったので、「呼び出された関数」という適当な名前が付けられおり、いい意味不明さを演出しています。
関数に名前をつける
おそらく、こちらがM式言語における一般的な関数の使い方だと思われます。じゃあ、こっちを先に紹介しろよと。
let式を使いつつ、関数に名前を定義し、その名前を使って関数を呼び出します。
let func=(param1,param2)=>param1+param2 in func(5,1)
let式ってなんだよ!!というときは↓の記事をご参照ください。
パラメーターの型を指定する
関数のパラメーターの型を指定することもできます。
パラメーターの型を指定するときは as を使います。
下記の例では、型に文字列であるtextを指定しています。
let func=(param1 as text,param2 as text)=>param1 & param2 in func("1","1")
関数を他の式で使う
関数単体で使うことは稀で大抵の場合、関数で生成された値を使ってさらに展開していくことになります。
次の例では、関数で生成された値と10の大小を比較しています。
let func = (param1, param2) => param1 + param2, return = List.Max({func(1,3),10}) in return
M数式言語に標準で用意された関数について
最初にも述べましたが、M数式言語には多くの関数が標準で用意されています。
このブログでも気になったものや頻出のものは紹介していますが、全部は紹介しきれません。
Microsoftのドキュメントに簡単なヘルプと共に一覧がありますので、必要に応じてご確認ください。
Power Query M 関数参照 - PowerQuery M | Microsoft Docs
個人的には眺めているだけでも半日はつぶせます。
え?そんな変人は私だけ?
終わりに
Power Query M式言語の関数について、基本的な構文からその使用例について解説しました。
Power QueryはGUIで作成したクエリはM式言語で自動生成されますが、関数は自動で生成されるのは見たことがありません。
おそらく自分でM式を書かないと使えない機能の1つなのではないかと思われます。(多分・・・。)
ラムダ式で書くところが少しだけ取っつきにくい印象を与えますが、慣れてしまえば単純です。
(引数のリスト)=>式 の構文に当てはめて落ち着いて1つず理解していきましょう。
関数を使いこなせると、グッとスマートなM式を書くことができるようになります。そんな気がします。
関数を使いこなせれば、あなたも、もう立派なM式マスター!?
というわけで、ここまでお読みいただき、ありがとうございました。