1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerQueryでURLをデコードする方法まとめ

Last updated at Posted at 2025-03-24

はじめのはじめに

本文はすべて我が配下、ChatGPTに出力させたものです。検証も面倒でメモ程度に出力したものですので眉唾で見てください。

はじめに

Power BI(Power Query)を使っていると、URLエンコードされている文字列を「元の人が読める文字列」に戻したくなることがあります。例えば redirect_to=https%3A%2F%2Fexample.com%2F のようなパラメータがクエリ内に混在している場合などです。

通常、.NET系なら Uri.UnescapeDataString() を使ってデコードできますが、PowerQuery(M言語)環境だと Uri.UnescapeDataString が使えない 場合があります。そこで活躍するのが、Uri.Parts を使った「ダミーURLへ埋め込み → クエリ部分を引っこ抜く」テクニックです。

やりたいこと

"https%3A%2F%2Fexample.com%2F?utm_source%3Dxxx"
↓
"https://example.com/?utm_source=xxx"

のように、URLエンコード文字列を元に戻します。

使うもの:Uri.Parts

Power Queryには、Uri.Parts() という「URLを構成要素に分解する関数」が用意されています。
この関数で返される結果はレコード型で、以下のようなキーを持っています。

  • Scheme (例: "https")
  • Host (例: "example.com")
  • Port (例: null)
  • Path (例: "/path/to/something")
  • Query (例: [ q = "実際のクエリ文字列" ])
  • Fragment(例: null)
  • ...など

たとえば「クエリパラメータの中に文字列を埋め込んで Uri.Parts に食わせる」ことで、半自動的にエンコードを解除してくれます。

サンプルMコード

let
    // 例)エンコード済みの文字列をDataというテーブルで持っているとする
    Source = Table.FromRecords({
        [ id = 1, EncodedUrl = "https%3A%2F%2Fexample.com%2F?utm_source%3Dxxx" ],
        [ id = 2, EncodedUrl = "https%3A%2F%2Fexample.org%2Fpath%3Fparam%3Dtest" ]
    }),

    // 1) ダミーURLへ埋め込み
    //     "https://dummy.com/?q=" + [EncodedUrl] の形式
    // 2) Uri.Parts で分解
    // 3) 取得した Query  "q" を取り出す
    Decoded = Table.AddColumn(
        Source,
        "DecodedUrl",
        each Uri.Parts("https://dummy.com/?q=" & [EncodedUrl])[Query][q]
    )
in
    Decoded

このようにすれば、DecodedUrl 列には

https://example.com/?utm_source=xxx

のようにURLデコードされた結果が入ります。あとは Text.BetweenDelimitersText.Split などを使って、パラメータ解析を進めるだけです。

仕組み

ダミーURLにパラメータをくっつけて Uri.Parts に丸投げすると、Uri.Parts が内部的にURLデコードをしながら構造を分析してくれます。その結果、Query に含まれるデータがデコード後の文字列として取得できるというわけです。

Power BIの環境で直接 Uri.UnescapeDataString が使えない場合は、この「ダミーURLにエンコード文字列を埋め込んで Uri.Parts というやり方をぜひ活用してみてください。

まとめ

  • PowerQuery/M言語では Uri.UnescapeDataString が機能せず困る場合がある
  • 代わりに Uri.Parts("https://dummy.com/?q=" & [EncodedUrl])[Query][q] でデコードできる
  • これでエンコードされたURLを簡単にデコードし、解析や加工が可能になる

Power BI での ETL 処理を効率よく進めるうえで、覚えておくときっと役に立つはずです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?