本記事の目的
Power BIレポートのデータ更新で、(読み込むファイルサイズに対して)異様に時間がかかる事象が発生した。レポートのデータソースはSharePoint Onlineのライブラリ上に置いてあるEXCELファイル。
調査したところ意外なところに原因があったので、解決策とともにメモに残しておく。
本記事の結論
結論だけ先に書くと、
SharePointにあるファイルにPower BIでアクセスする際、
- 「SharePointフォルダー」コネクタはサイト上の全てのファイルを取得する動きをする
- 一方「EXCELブック」コネクタは特定のファイルを直撃で取得する動きをする
- したがって、SharePointサイト内に大量のファイルがある場合は「EXCELブック」コネクタを使うと読み込みの遅延が軽減できる可能性がある
比較検証
今回やりたいことは、SharePointのライブラリに格納した特定のEXCELファイルを読み込んでPower BIレポートを作成すること。ただし当該SharePointには十数万件のデータが格納されているという前提である。
このとき、「SharePointフォルダー」コネクタと「EXCELブック」コネクタでどのような違いが出るかを比較した。
1. 「SharePointフォルダー」コネクタ
「SharePointフォルダー」コネクタを使って目的のファイルを読み込んでみる。SharePointフォルダーコネクタにはサイトのルートURLを渡す仕様になっているため、結果として当該サイトに含まれる十数万件全てのデータのメタデータ(ファイル名や拡張子など)が取得されて表示される。
今回はテスト目的でライブラリ内に大量のファイルを作成した。ファイル数は合計で約12.5万個。なお今回作成したcsvは、ほぼ中身が空のダミーファイル。
読み込み対象のファイルは、カラム1列、レコード2行のEXCELデータ。
一応、データは併せてレポート上にもビジュアルとして表示させておき、これをレポートとしてPower BI Serviceに発行。発行したレポートをPower BI Service側でデータを更新してみる。更新にかかった時間は105秒(2分弱)。
2. 「EXCELブック」コネクタ
次に「EXCELブック」コネクタを使って目的のファイルを読み込んでみる。この場合はまず、当該のEXCELファイルのURLを取得する必要がある。URLはSharePointからファイルを「アプリで開く」で開き、
開いたEXCELのメニューから「情報」を選び、「パスのコピー」で取得できる。なおURLの末尾に「?web=1」という文字列が付くが、これは削除する。
あとは「EXCELブック」コネクタでURLを指定すればファイルを直接読み込める。
こちらも同様にPower BI Serviceに発行してデータ更新すると、今度は3秒で更新が完了した。
結論
「SharePointフォルダー」コネクタは、サイト内の全てのファイルを取得するステップが入るため、サイト内のファイルが多くなることによってパフォーマンスへの悪影響がある。回避策としては「EXCELブック」コネクタを利用することによって、目的のファイルに直接アクセスすることができ、パフォーマンスを改善できた。実際、約12.5万ファイルを持つサイトにおいては、約2分⇒3秒と大幅に更新時間を短縮することができた。
今回は1ファイルのみを読み込んだが、実際はSharePointにある複数ファイルを用いてレポートを作成することも多いはず。その場合には上記の影響も読み込みファイル数に比例して大きくなるため、かなりクリティカルな問題になりうる。
今回のように極端にファイル件数が多い場合は気づきやすいが、そこまで顕著でなくともサイト内のファイル数がパフォーマンスに影響を与えうるということは頭の片隅に置いておきたい。