PR

Power Queryで一度作った処理を何度でも使う!ステップの関数化

Power Query

この処理、別のクエリでも使いたいんですけど、また最初から作るのは面倒です……。

一度作ったステップを関数化すれば、同じ処理を何度でも使い回せるよ。

Power Queryを使っていると、

「この処理、別のクエリでも使いたいな」

と思うことはありませんか?

置換や列の追加、文字列の加工など、せっかく作ったステップを、別のクエリでも同じように使いたい場面は意外とあります。

そんなとき、ステップを最初から作り直す必要はありません。

すでに作ったステップを流用して、別のクエリにも同じ処理を適用できます。流用したい処理を関数化しておけば、必要なときに何度でも呼び出して使えます。

「一度作ったステップは、何度でも使い回そう!」

今回は、Power Queryのメニュー操作で作ったステップを関数化して再利用する方法を紹介します。

スポンサーリンク

パワークエリで関数を作るメリット

パワークエリで関数を作成すると、同じ処理を何度も記述する必要がなくなり、作業効率が大きく向上します。

主なメリットは次のとおりです。

  • 同じ処理を繰り返し書かなくて済む
  • 複数のクエリで共通の処理を使い回せる
  • 修正が必要になった場合も、関数側を変更するだけで全体に反映できる
  • ステップが整理され、読みやすく管理しやすくなる

関数化は、パワークエリを単なるデータ変換ツールとして使うだけでなく、再利用可能な処理をまとめる仕組みとして活用できる便利なテクニックです。一度作った処理を何度も利用できるようになるため、実務で扱うデータが増えるほど効果を実感できるでしょう。

ステップを「関数化」して再利用する流れ

今回は、Power Queryの画面で作ったステップを、そのまま関数として使い回す方法を紹介します。「関数」と聞くと、難しいコードを書くイメージがあるかもしれません。

でも、基本的な流れはシンプルです。

普段どおりステップを作る → そのステップをコピーする → 関数として使える形に少し修正する

まずは、この流れをざっくり押さえておきましょう。

Power Queryでは、ボタンやメニューをクリックして操作するGUI(グラフィカルユーザーインターフェース)が用意されています。

今回は、このGUIで普段どおり作ったステップを流用して、関数に仕上げていきます。

1.まずは普通にデータを編集する

最初はいつもどおり、Power Queryでデータを編集します。置換、列の追加、トリミングなど、再利用したい処理を一通り作ります。

2.「空のクエリ」を作る

次に、作ったステップを関数として利用するための空のクエリを作ります。
ここが、これから関数を作るための「入れ物」です。

3.ステップを「詳細エディター」にコピーする

続いて、最初に作ったクエリのステップをコピーし、空のクエリの詳細エディターに貼り付けます。
ここが今回のポイントです。

すでに作ったステップを、そのまま流用できます。

一から処理を作り直す必要はありません。

4.関数として使える形に少し修正する

最後に、コピーしたステップを関数として使える形に修正します。といっても、大幅に書き換えるわけではありません。

  • 引数(テーブル)を受け取れるようにする
  • 処理結果のテーブルを返すようにする
  • クエリに分かりやすい名前を付ける

これで、作成したステップが別のクエリでも呼び出して使える関数になります。

「関数化」の操作手順

ステップを関数化する全体の流れが分かったところで、いよいよ実際の操作を見ていきましょう。

1.まずは普通にデータを編集する

最初は、いつもどおりPower Queryでデータを編集します。
置換、列の追加、トリミングなど、関数として使い回したい処理を一通り完成させます。

まずはいつものPower Query操作で処理を作り、あとから関数に変えていきますので、この段階では、難しいMコードや関数の書き方を考える必要はありません。普段どおりにステップを作っていきましょう。

ただし、ひとつだけ意識しておきたいことがあります。それが、「どの列を使って処理しているか」です。

あとで別のデータにも使い回すことを考えて、処理に使う列名は意識しておきましょう。

たとえば今回の例では、「会社名」列を使って「社名」列を追加します。つまり、この処理は「会社名」という列があることを前提に動きます。そのため、関数を使うときも、処理するテーブルに「会社名」列が必要です。また、すでに「社名」列がある場合は、同じ名前の列を追加しようとするため、エラーになります。

「この処理は、どの列を使って動いているのか?」

ここだけ意識しておけば、あとで関数として使い回すときもスムーズです。

2.「空のクエリ」を作成する

次に、作成したステップを関数にするための「空のクエリ」を用意します。いわば、これから関数を作るための「入れ物」です。

空のクエリを作る方法はいくつかあります。

クエリ一覧([クエリ]ウィンドウ)の右クリックメニューから作成する

Power Queryエディターの左端にある[クエリ]ウィンドウで右クリック→「新しいクエリ」→「その他のソース」→「空のクエリ」を選択します。

Power Queryエディターのリボンから作成する

リボンから作成する場合は、「ホーム」タブ→「新しいソース」→「その他のソース」→「空のクエリ」を選択します。

Excelの画面から作成する

Power Queryエディターではなく、Excelの画面から作成することもできます。
「データ」タブ→「データの取得」→「その他のデータソースから」→「空のクエリ」を選択します。

操作が完了すると、「クエリ1」のように空のクエリが作成されます。

3.「詳細エディター」にステップを貼り付ける

次は、先ほど作ったステップを空のクエリへ貼り付けます。そのために使うのが「詳細エディター」です。詳細エディターに慣れていないと、少し難しそうに見えるかもしれません。

でも、今回やることは基本的にコピー&ペーストです。「コードを書く」というより、すでに作ったものを持ってくるだけと考えてください。

①元のクエリからステップをコピーする

まず、通常どおり編集したクエリを[クエリ]ウィンドウで選択します。
右クリックして、「詳細エディター」を選びます。

リボンから開く場合は、「ホーム」タブ →「詳細エディター」を選択します。

詳細エディターを開いたら、関数化したいステップの行全体をコピーします。

今回の例では、「会社名の列を複製 → 株式会社・有限会社を除去 → トリミング → 列名変更」という一連の処理を作っています。このステップをまとめてコピーします。

コピーが終わったら、元のクエリの詳細エディターは閉じてOKです。

②空のクエリにステップを貼り付ける

続いて、先ほど作った空のクエリ(ここでは「クエリ1」)の詳細エディターを開きます。

先ほどコピーしたステップを、let in の間に貼り付けます。最初から入力されている「ソース = ""」は今回使わないので、削除するか、コピーしたステップで上書きします。

ステップを丸ごと移す。これだけです。

これで、元のクエリで作った処理が、空のクエリにも入りました。
ただし、まだ関数としては完成していません。

4.関数として動くように修正する

ここが今回の仕上げです。

先ほどステップを張り付けたことで、処理そのものは用意できました。
しかし、このままでは、

  • 外部からテーブルを受け取ることができない
  • 通常のクエリとして処理されている
  • 処理した結果を「戻り値」として返す指定がない

という状態です。そこで、少しだけ書き換えて「テーブルを受け取って、処理して、結果を返す」関数に変えていきます。

引数としてテーブルを受け取れるようにする

まず、一行目に次の一文を追加します。

これで、この関数を呼び出したときに、処理するテーブルを受け取れるようになります。ざっくり言えば、「これからテーブルを受け取ります!」と関数に教えてあげるイメージです。

受け取ったテーブルを処理に使う

次に、let の中にある最初のステップを変更します。

画像では、元のクエリの「変更された型」となっていた部分を、「テーブル」に変更しています。

先ほど一行目で、

(テーブル as table)

と指定したことで、外部から受け取ったテーブルが「テーブル」という名前で利用できるようになりました。

つまり、

受け取ったテーブル →「テーブル」という名前で処理に渡す

という仕組みです。

Power Queryの[クエリの設定]ウィンドウに表示されているステップ名は、詳細エディターではそれぞれ処理結果を入れておく「名前(変数)」のような役割を持っています。その名前を次のステップへ渡していくことで、処理が順番に進んでいきます。

最後に、処理結果を返す

関数は、処理するだけでは終わりません。最後に、「処理した結果を返します」という指定が必要です。

ここでは、最後のステップ名である「名前が変更された列」を指定しています。つまり、

受け取ったテーブル → 順番に処理 → 最後の行のステップ名を結果として返す

という流れです。 in 以降に書くステップ名は、実際に作成したクエリの最後のステップ名に合わせてください。

最後のステップの「,(カンマ)」を削除する

もう一つ、忘れやすいポイントがあります。

元のクエリからステップをコピーしたとき、最後の行の末尾に「,(カンマ)」が残っている場合があります。最後のステップの後ろにカンマは必要ないので、削除します。

そして、「クエリ1」のままだと、あとから見たときに何の関数なのか分かりません。
処理内容が分かる名前に変更しておきましょう。

これで完成です!今回作った関数は、「テーブルを受け取る → 作成済みのステップで加工する → 加工後のテーブルを返す」という働きをします。つまり、最初にGUIで作った処理を、何度でも呼び出して使える「再利用パーツ」に変えたわけです。

作成した関数を呼び出す

関数を作ったら、次は実際に呼び出して使ってみましょう。

今回作成したような、テーブルを丸ごと受け取って処理する関数は、メニュー(GUIの機能)から直接呼び出すことができません。

そこで、新しいステップを追加し、数式バーから関数名を指定します。

1.新しいステップを追加する

まず、関数を使いたいクエリを開きます。右側の[クエリの設定]ウィンドウから、関数を適用したいステップを選択します。そのステップを「右クリック」→「後にステップの挿入」を選択します。

選択したステップの下に、新しいステップが追加されます。

2.数式バーに関数を入力する

新しく追加されたステップを見ると、数式バーには、1つ前のステップ名が入力されています。
ここに、作成した関数を追加します。

今回は、先ほど作成した関数「fn_社名抽出」を使います。関数名の後ろに、ステップ名を囲うような形で入力します。このとき、ステップ名を囲む「()」は半角で入力してください。

入力すると、次のような形になります。

最後にEnterキーを押せば、関数が実行されます。

これで、作成した関数を別のクエリから呼び出して使うことができました。一度関数を作っておけば、同じ処理が必要になったときに、関数名を指定するだけで同じ処理を再利用できます。

自作関数を使用する際の注意

「列名」を意識しよう

自作関数は便利ですが、どんなデータでもそのまま使えるわけではありません。

今回作成した「fn_社名抽出」は、「会社名」列を使って「社名」列を追加する関数です。
そのため、この関数を使うテーブルには、

  • 「会社名」列が存在する
  • 「社名」列がまだ存在しない

という条件があります。処理をするテーブルに「会社名」列が存在しない場合や、すでに「社名」列が存在する場合は、エラーになります。

関数を作るときは、「どんなデータを渡すことを想定した関数なのか」を意識しておきましょう。

関数化するとステップを確認しにくくなる

もう一つ注意したいのが、関数化した後の修正です。

関数にすると、通常のクエリとは違い、[クエリの設定]ウィンドウで処理のステップを確認できなくなります。そのため、処理を修正したい場合は、詳細エディターを開いてMコードを直接修正する必要があります。または、いったん関数を通常のクエリに戻してから、ステップを修正する方法もあります。

最初は少し難しく感じるかもしれませんが、関数を使いこなすなら、これを機に詳細エディターの使い方も少しずつ覚えていくとよいでしょう。

まとめ

Power Queryのステップ再利用(関数化)は、毎回同じ編集を繰り返す作業を減らしてくれる便利なテクニックです。

今回の記事では、普段どおりGUIで作ったステップを詳細エディターからコピーし、空のクエリに貼り付けて関数化する方法を紹介しました。そして、作成した関数にテーブルを渡すことで、同じ処理を別のクエリでも再利用できます。

この方法なら、複雑な処理でも一度作ったステップを「使い回せる処理」に変えることができます。

さらに、処理内容を変更したい場合も、関数側を修正すれば、その関数を利用しているクエリに同じ変更を反映できます。

Power Queryは「ボタンやメニューを使って簡単にデータを加工できるツール」というイメージが強いかもしれません。でも、作ったステップを関数として再利用できるようになると、「一度作った処理を、何度も使い回す」という使い方もできるようになります。

まずは、普段の作業の中で「この処理、毎回やっているな」と思うものから、関数化してみてください。一度作ったステップを眠らせておくのは、もったいないですよ!

最後まで読んでいただき、ありがとうございました!

フフフ……我が刻みし処理は、もはや一度きりの術ではない……!

いでよっ!我が最強の処理魔法……!魔法陣より召喚され、幾度でも同じ処理を繰り返すのですっ!!

スポンサーリンク
スポンサーリンク
スポンサーリンク
Power Query
シェアする
タイトルとURLをコピーしました