はじめに
SharePoint上に作成した特定のドキュメントフォルダに複数の同じフォーマットのファイルを置いて、それらを結合させるのはPower BIやExcelのPower Queryの得意技ですが、テーブル名やシート名が各フォルダで少しでも違うものがあると取り込まれずエラーとなってしまいます。この記事では簡易的ですがシート名が違っても取り込むことができるクエリの修正法法を照会します。
対象となる人
Power BIでSharePointフォルダからの取り込みを行いたい人。およびExcelでPower Queryをつかって同じようなことをしている人です。
準備と失敗例
SharePointのドキュメントライブラリに適当なフォルダを作り、内容は全く同じエクセルファイルを作成しました。
中身は各支店の日別の売上金額が入力されていて、毎日1ファイルづつ作成されてフォルダに保存されていくイメージです。
3つ置いたファイルのうち、一つだけ()、シート名とテーブル名を書き換えてやります。今回は「20230503売上.xlsx」のファイルだけ、シート名を「Sheet1」→「Sheet1_余計なもの」、テーブル名を「テーブル1」→「テーブル1_余計なもの」に書き換えました。担当者が勝手に修正しちゃった、というイメージのサンプルファイルです。
Power BI で新しいソースとして「SharePointフォルダ」から取り込みます。ファイルを置いたフォルダまでフィルタで絞り込むと、先ほどの3つのファイルが現れました。
Content列の右側にある「↓↓」ボタンをクリックして展開、結合をさせます。
シートとテーブルのどちらから取り込むかが選択できます。まずはSheet1を選択します。サンプルファイルの指定が「最初のファイル」となっていることから、シート名も20230501売上.xlsxを参照しているため「Sheet1」になっていることがわかります。
「OK」を選択して進むと、
確かにファイルの中身が結合去れて並んでいますが、20230503売上.xlsx ファイルの名前が表示されているべきところが「Error」となっています。
お察しのとおり、いつも同じ場所に同じフォーマットでおかれるべきファイルのシートを誰かが勝手に変更すると、こうなります。
解決法(シート名が違う場合)
SharePointフォルダを指定して展開、結合する際、裏側では「ヘルパークエリ」が使われています。自動的に作成される「サンプルファイルの変換」という名前のクエリの中身を見てみます。右クリックして「詳細エディタ」を選択します。
記述されているMクエリの中に、以下のような記述があります。ここでどのシートを取り込むかを指定しているんですね。
Sheet1_Sheet = ソース{[Item="Sheet1",Kind="Sheet"]}[Data],
ここを、下のように変更してやります。
Sheet1_Sheet = ソース{0}[Data],
するとあら不思議。さっきまで取り込まれなかった3日目のシートも、名前が他とそろっていないにもかかわらず取り込むことができました。
解決法(テーブル名が違う場合)
先ほどと同じく、今度は「テーブル1」を選択してみます。最初のファイルをサンプルにしているので、一つだけ変更したテーブル名はここには表示されていません。
テーブルの場合も結果は全く同じでした。シートの時と同じように、「サンプル ファイルの変換」を「詳細エディタ」で開いてみましょう。
テーブルの場合はソースがこのような記述になっていました。
テーブル1_Table = ソース{[Item="テーブル1",Kind="Table"]}[Data]
テーブルの場合0ではうまくいかなかったので、1に書き換えてやりました。
テーブル1_Table = ソース{1}[Data]
これでテーブル名がバラバラでも列がそろっていることで結合することができました。
まとめ
自動的にSPOフォルダに保存されるような場合には勝手にシート名やフォルダ名が変わることがないでしょうが、手作業で入力しているような場合には変わってしまうケースはよくあること。とりあえずの対処ですが知っておくと便利な手法です。
ただし、シート名やテーブル名を指定せず曖昧な形で取り込むので、結果に不具合がないか慎重にチェックをお願いします。