LoginSignup
1
0

PowerQuery: Sharepoint パスからの Site/Folder URL 認識

Last updated at Posted at 2023-12-19

背景

Sharepoint においた Excel を Power BI で処理しようとした。
パスを設定みたいにして扱えるようにしたかった。

が・・パスの取得方法は以下三種類ある

  • リンクのコピー
    • その名の通り、「リンクのコピー」を利用
  • アドレスからのコピー
    • アドレスバーから直接コピー
  • パスのコピー
    • 「詳細」で、パスの横にあるアイコンからコピー
      image.png

で、いずれからでも、以下を取得出来ないか?・・と試した記録

  • Site URL
  • Folder URL

結論

リンクのコピーは、Folder URL を取得出来なかった(Rest API たたけば取れそうだけど)

image.png

Site/Folder URL 取得例
let
    ソース = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("rZHPTsJAEMbfpUlvhKWLrZSEkBogihA0VpAgh6UsdJOW1s4C9mh78mjiE3g0Rg+cTHybfRG3VeO/gyHx9OXbmf3ml5nRSHE5D6GKELjMJ0VwSUTDgC140Ql8VJ1VESCbAm8FkU2JD6gJen8wMIeAeXfu9jtn7QvO2t29OPbIatYLhvbRvta2eoflVXxs1WnNqsQaJUpBEem9SDcieRJXjyLZiPRWpC/KuPAHAzBOfzCcZB1TFZcagbP06YIDkjVZsDzvgFMfigTCy/qCrm0SzSnvMOCnkVdTcStPk/o1T9rfiefLUgkbK0bXIeHuVl/lY44j9QNIxc0M6S2UTbeO84J11vcJJTN2HWxUJrqj4oZj6hUpOxrOnKnNcjcpG7qpm7hs5OtP7kR6LdIHkTz///rfAfMz32QTvt14/Ao=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Site URL" = _t, コピー種類 = _t]),
    変更された型 = Table.TransformColumnTypes(ソース,{{"Site URL", type text}, {"コピー種類", type text}}),
    DecodedURL = Table.AddColumn(変更された型, "DecodedURL", each Uri.Parts("https://contso.com?url_1stParam=" & [Site URL])[Query][url_1stParam], Text.Type),
    uri = Table.AddColumn(DecodedURL, "uri", each (Uri.Parts([Site URL])), Text.Type),
    Query = Table.AddColumn(uri, "Query", each [uri][Query]),
    id = Table.AddColumn(Query, "id", each ([uri][Query][id]?), Text.Type),
    viewid = Table.AddColumn(id, "viewid", each ([uri][Query][viewid]?), Text.Type),
    SiteURL = Table.AddColumn(viewid, "SiteURL", each ([uri][Scheme] & "://" & [uri][Host] & "/sites/" & 
 Text.BetweenDelimiters([DecodedURL], (if Text.Contains([DecodedURL], "/sites/") then "/sites/" else "/:f:/s/"), "/") 
 & "/"), Text.Type),
    FolderURL = Table.AddColumn(SiteURL, "FolderURL", each ([uri][Scheme] & "://" & [uri][Host] & (if [id] is null then "/sites/" & (if Text.Contains([DecodedURL], "?") then Text.BetweenDelimiters([DecodedURL], "/sites/", "?") else Text.AfterDelimiter([DecodedURL], "/sites/")) else [id]) & "/"), Text.Type)
in
    FolderURL

説明

  • Decode をまずはする
  • Uri.Parts() で取れるなら取る
  • ダメな場合は、頑張ってテキスト抽出・・

必要な関数は以下辺り

あとがき

まぁ、Site URL だけは取れたから良しとする

正規表現使えばもっと簡単に出来た・・?

正直・・こんなことするだけ無駄なんじゃないのか、という思いの方が強い・・ :sweat:

1
0
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
0