Power BIで大きすぎるデータソースって重いですよね
SharePointその他クラウドに上にデータソースがある場合、Power BI DesktopのPower Queryエディターで編集を終えて「閉じて適用」をしたあとで、データソースのダウンロードが始まります。このデータソースのサイズが非常に大きい場合、「最新の情報に更新」というダイアログが出たまま、なかなか処理が進まないことがあります。
待っていて終わればよいのですが、表示されているサイズが数ギガバイトにも及ぶと心配になってきます。待てども待てども終わらない、当然こんな状態だとpbixファイルのサイズもが大きくなり、Power BI サービスに「発行」を行う際には、こんどはローカルからクラウドへのアップロードが始まりますから、非常に時間がかかることになります。
Power BI Desktopから発行すると、Power BI サービスにpbixファイルと同名のデータセットとレポートが作成されます。Power BI サービスに作成されたデータセットに更新の時刻を指定しておけば、ローカルのPower BI Desktopを介さずに、直接クラウド上のデータソースからデータを取得してくれます。
最終的にはPower BI サービスに発行して、データセットが更新する際にクラウド上のデータソースから直接取り込みをしてくれますが、Power BI Desktopで編集する際にはできるだけデータソースを軽くしておきたいところです。(図のデータソースDownloadの部分です)データソースを一時的に別のところに移動させて、完成させてから戻すようなことをしても良いのですが、その作業自体もイライラがつのることは想像できますよね・・・。
パラメーターを使ったデータソースの一部だけ利用して編集作業しよう
ローカルではデータソースの一部だけを使用し、「発行」(アップロード)したあとはフルサイズのデータソースを取得できれば願いがかないます。
データソースには長期にわたる何かのログファイルがあったとします。Power BI Desktopで作業する際には、直近の特定日付以降のデータだけを扱い、「発行」したあとにはこの制限をもっと過去の日付に変更するようなことが可能しょうか?ログの日時に対して変数で指定した日付のフィルタを設定。Power BI サービスにアップロードした後でこの変数の値を修正するにはどうすればよいでしょう?
テストのために、WindowsのイベントビューワーからCSVファイルに出力してSharePointのドキュメントライブラリにアップロードしてみました。ログを確認すると、2021年11月22日から2023年1月1日までの日付で取得できていました。Power Queryエディターには上位1000行しか表示されていませんが、数十万行のログファイルです。実際この程度のログの扱いに大した時間がかかりませんが、日々なんらかのログを保存したフォルダごと取り込んで結合しているような場合には、どんどんデータサイズが膨れ上がってきます。
新しいパラメーターを設定する
[パラメータの管理]-[新しいパラメータ]を開いたら、パラメータに適当な名前を付けて、ログで日付を合わしている列の型に合わせて取込むログをカットする日付を設定します。
上の例では、パラメーターの名前に「取り込み開始日時」、種類に「日付/時刻」、提案された値に「任意の値」、現在の値に「2023/1/1 0:00:00」を入力しました。
パラメーターを設定すると、このようにクエリの一覧と同じ場所に表示されます。
日付フィルターにパラメーターを指定する
今回は特定の日付以降のログだけをPower BI Desktopで扱うために、ログの発生時刻にあたる列に対して、「日付/時刻フィルター」を設定します。ステップを差し込む場所は、いろいろな操作を行うステップの前のほうが、処理が少なくなって良いでしょう。今回はソースから取得後、ヘッダーと列の型が決定された直後に挿入しました。「日付/時刻フィルター」を選択したら、フィルターは一番下にある「カスタムフィルター」をクリックしてください。
「行のフィルタ」ダイアログが表示されました。ポイントは中央にある選択で「パラメーター」を選ぶところです。選択すると今度は右辺で先ほど作成したパラメーター名を選択できるようになります。左辺側は「次の値以降」を選択しました。パラメーターの中には2023年1月1日を設定しましたから、その日付以降のログだけが取得され、後続のステップで処理されます。つまり、ダウンロードされるログも直近の一部だけになります。
Power Queryの画面左下には当初1000行と表示されていましたが、パラメーターを用いてログの取得範囲にフィルターをかけた後では66行に減っているのがわかります。
クエリーの内容をみると、パラメーターは名付けた名前そのものが修飾なしで使われています。型には気をつけないといけませんが、案外使いやすそうですね。
Power Queryを「閉じて適用」で閉じ、レポート編集画面でスライサーに先ほどフィルターをかけた日付部分を指定してやると、パラメーターで制限した日付以降だけになっていることが確認できます。データが小さく、とても軽いのでこの状態でデータを加工したり、レポート画面を作りこんでいきます。ある程度完成したら保存してPower BI サービスに「発行」してみましょう。今回はマイスペースに発行しました。
Power BI サービス上で更新をかけてパラメーターが効いていることを確かめる
先ほど発行したことで、マイスペースにpbixファイルと同名のデータセットとレポートが出来上がりました。データセットの「…」から設定画面を開きます。
データソースの資格情報から、SharePointなどのデータソースに対するアクセス権を設定しておくのを忘れないようにしましょう。ここを忘れていると更新に失敗します。設定ができたらデータセットをいちど「更新」してからレポート画面を確認します。
WEB上でPower BI サービスのレポート画面を開いてみると、さきほどPower BI Desktopと同じく日付と時刻のスライサーはパラメーターで指定した日付はカットされていることがわかります。本当はこの日付以前の大量のデータも取り扱いたいというのが今回の目論見です。
Power BI サービス側でパラメーターを修正する
いよいよ日付フィルターを過去日に広げてやる段階までやってきました。パラメーターの設定はデータセットの設定画面にあります。Power BI Desktopで作成した「取り込み開始日」というパラメーターに、取込みを行う一番古い日付が表示されています。これもPower BI Desktopで設定した日時ですが、見てわかる通り、ローカルから離れてWEB上で変更することができます。
表示されている日付のフォーマットに合わせて、取込み開始日時を1年間さかのぼって設定し、「適用」をしてみます。設定しおわったら、再度データセットに「更新」をかけます。
データセットの更新がおわったら、レポートを開き、キャッシュを更新するためにブラウザでも更新をかけてやります。すると上図のとおり先ほどまでは2023年のデータしかなかったところが、2022年のデータも含んで取り込まれた状態になりました。フィルターの閾値を自由に変更できるようになったことで、ローカルでは小さなデータで編集を行い、アップロード後に大きなデータで分析ができるわけです。
フィルターは日付でなくても大丈夫
今回は扱うデータがログで、日付によってフィルターをかけましたが、テキスト型の列でも、テキストフィルターに「指定の値と等しい」を使い、編集時はダミーデータ、アップロード後は本番データだけを取り込むというようなことが可能になります。パラメーターは以外に扱いが簡単で、他にもいろいろと応用が利きそうですので、ぜひ使ってみてください。;