テクテク日記

テクテク=テクノロジー&一歩ずつ(テクテク)

VS Codeを使ってPower Queryを記述する

あけましておめでとうございます。思えば、2022年に書いた最後の記事が100回目だったこともあり、2022年では計52記事(平均週1のペース)となりました。2023年の抱負は何といってもエンタープライズ型セルフサービスBIの推進をしていくことであり、そのためにはいろんな面でより効率良くツールを使いこなすとともに、新しい知識を学んでいく必要があると自覚しています。

2023年の最初の記事として、Visual Studio Code(略して「VS Code」)を使ってPower Queryを効率良く書いていくやり方について紹介したいと思います。

code.visualstudio.com

VS Codeを使った場合のユースケースは主に以下が考えられます。

  • Power QueryをUI操作して改行等の書式設定を行いたい(誰でも)
  • ソースコードを見て微調整を行う(中上級者向け)
  • その他

Power Queryエディタの機能がより改善されてくれば、VS Codeを使わなくても良いのですが、2023年の本日付けではまだそれは実現できそうにないので、今回はこちらでやり方を紹介しておきます。

VS Codeとは

VS Codeは言わずと知れたコーディングを行う人にとって最高のツールとなります。人によっては高機能なメモ帳として使用している人もいるでしょうが、PythonC#等のプログラミング言語を効率良く書ける高機能なツールであり、Power Queryの書式設定やPower BIやExcel Power Queryエディタで作業するよりも効率よく、Mコードの編集を行うことができます。VS Codeについての詳細は他の多くのサイトに載っており、参考までに下記まとめサイトを紹介しておきます。

VS Codeのインストールと設定

コーディングなんて無理という方もいらっしゃると思いますが、Power Queryでクエリ処理を行う作業自体がコーディングに値しますので、怖がらなくても大丈夫です。まずはVS Codeをインストール(詳細は割愛)しますが、インストール後、日本語化を行います。

  • ⌨️のWinキーをおして、visualと入力し、Visual Studio Codeを立ち上げる
  • Extensionアイコンをクリック(Ctrl + Shift + XでもOK)し、japaneseと入力し、Japanese Language Pack...をInstall

  • Ctrl + Shift + P > displayと入力し、下記③~⑤まで行う

    すぐにVS Codeが再起動し、日本語環境となっていることが確認できる

  • もう一度Ctrl + Shift + X拡張機能(Extension)アイコンをアクティブにし、power queryと入力し、「Power Query / M Langugae」をインストールする(下記⑥~⑧)

これで基本設定は完了しましたので、VS CodeでM言語を操作してみます。

VS CodeでPower Queryを操作

インストールされた拡張機能 (Power Query / M Language)はExcelやPower BI DesktopのPower Queryエディタよりも高機能なエディタとなります。試しに以下をやってみます。

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("VZBNboMwEIWvYrFuLwFViqpUQgGlC5TFEI/Awniiwa6U28dpxuDu5uf5zefX98U3BefBOFWaGdfi8tYXJwKdtR0FNm7MJjU4bXEAfrUleU+LKhmuM3qZMSR1NUV7KRncvCbNBzIYazGIz4F4lgMIepNthAeGRTwb1GAz2mzVgo5w/9Gz9c+EKC9LM7y3E7HcqeD2Kj4t/Yr6C3nFuxjv0pauQtqZcZLhGdf0+ZiUOkHS/LWtj6HteUVCFQeqgjHFZBEcpijQ6VTXaJeURX3XDN6QU81mf9wRjhtXA86Z5NCE5ZZwWQ53YXgevjwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true])
 in type table [Category = _t]),
    AddIndex = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
    AddCN = Table.AddColumn(AddIndex, "Category_CN", each {"山地自行车","公路自行车","旅游自行车","手把","底架","刹车器","车链","曲柄组","变速器","前叉","耳机","山地车架","脚踏","公路车架","座垫","旅游车架","车轮","背心短裤","帽子","手套","车衣","短裤","袜子","紧身衣","马甲","自行车架","自行车支架","瓶子和笼子","清洁器","挡泥板","头盔","补水包","车灯","锁具","储物箱","水泵","轮胎和管子"}{[Index]}),
    AddJP = Table.AddColumn(AddCN, "Category_JP", each {"マウンテンバイク","ロードバイク","ツーリングバイク","ハンドルバー","ボトムブラケット","ブレーキ","チェーン","クランクセット","ディレイラー","フォーク","ヘッドセット","マウンテンフレーム","ペダル","ロードフレーム","サドル","ツーリングフレーム","ホイール","ビブショーツ","キャップ","グローブ","ジャージ","ショーツ","ソックス","タイツ","ベスト","バイクラック","バイクスタンド","ボトル・ケージ","クリーナー","フェンダー","ヘルメット","ハイドレーションパック","ライト","ロック","パニア","ポンプ","タイヤ&チューブ"}{[Index]})
in
    AddJP
  • コピペされた状態

  • 右端で折り返し(Alt + Z
    Alt + Zを押すと、右端で折り返しがON/OFFできるようになる

  •  本来であれば、この状態でAlt + Shift + Fで書式設定が可能になりますが、これをいきなり行うと、以下のようなエラーメッセージが出現します

  •  キャンセルを押し、Ctrl + K > Mで「言語モードの選択」をアクティブにし、powerと入力してPower Query Formula Langugae (powerquery)を選択

  • これで言語指定が完了したので、Alt + Shift + Fをもう一度実施

    ご覧の通り、Power QueryのM言語に対する書式設定が完了。

  • この状態でExcel / Power BI Desktopを開き、以下を行う

  •  結果は以下の通り

これでユースケースその①であるPower QueryをUI操作して改行等の書式設定を行いたい場合のニーズに対応できたことになります。Power Queryの書式設定に関しては、このサイトも便利ですが、編集まで行えるVS Codeを使うのに慣れると、VS Codeのほうが便利かもしれません。

VS CodeのPower Queryエディタ便利機能

最後に、VS Codeを使ったほうが便利な部分について紹介します。

  • オートコンプリート機能
    Power BI DesktopやExcelと同じく、オートコンプリート機能を搭載

    また、以下のように、アウトプット(結果)のデータタイプも提示
    エディタに関数を直接書き込んだ場合、(英語ですが)説明文も載ってきます

  • ステップ名の一括変換
    こちらが一番便利かもしれませんが、ステップ名をまとめて選択し、一気に修正することが可能です(Power BI DesktopやExcelのPower Queryエディタでは不可)

    やり方は簡単、ステップ名にカーソルを置き、Ctrl + Shift + L(DAXと同じショートカット)で一括選択し、名前を変更します。ただし、#"Promoted Headers"のようなステップ名の場合、どちらかのステップを全て選択してからCtrl + Shift + Lを実行する必要があります。
    追記:Kagataさんの情報いわく、同じ結果として、カーソルをステップ名に置き、F2を押せば同じように変更できるようです。

    試してみると、下記のような仕様となりました。

    この場合、上記GIF動画のように、修正過程が見えませんが、#"Promoted Headers"のようなステップに使えるので、非常に便利ですね。
  • 書式設定(Alt + Shift + F
    上記で紹介済ですが、例えば以下のようなケースも書式を設定してくれます。

以上、VS Codeを使用したPower Queryエディタの紹介でした。このやり方はソースコードをそもそも見ない人には面倒だと思いますが、変換処理を沢山行う人が効率改善を実現するための手法の1つになり得ることでしょう。