[Power BI Tips] フォルダーコネクタを使って、毎月追加/更新されるファイルをデータソースにした Power BI レポートの自動化

# Power BI のデータソースって業務だと毎月更新されますよね？
はい、Power BI Tips のお時間です。
以前 Power BI 勉強会で
**「Power BI のレポート作成を自動化できないんでしょうか？毎月 Power BI でレポートを作成しなければならず、困っています」**
という質問をいただきました。

この質問への直の回答ではないのですが、もしかしたら解になるかもと思い、今回の記事を書こうと思いました。
まぁ簡単に言うとテーマは**「自動化」**ということになります。

まず、いただいた質問ですが、おそらく Power BI の使い方を間違えています。というか、たぶん、Power BI Desktop を Excel の代わりに使っていると思われます。
別に悪いことではないですし、ライセンス違反でもありませんので、イイっちゃあイイんですが、うん、やっぱり気になります。

つまり、それって本当の Power BI の使い方ではないよーってこと。
Power BI Desktop で満足しているようじゃ、甘いのです。

**Power BI = Power BI Desktop** っていうのは間違いです。
正確には **Power BI というサービスの中でレポート作成ツールが Power BI Desktopであり、その他にもいっぱいあります** というのが正しいです。

- Power BI Service
- Power BI Mobile
- Power BI dataflows
- Power BI Apps
- Power BI AI
- etc...


# フォルダーコネクタってのがあります
話を元に戻しまして、Power BI Desktop にはたくさんのコネクタがあります。
最近数えていなかったので、ざっと数えたところ 133 個ありました。（2020.03.27 現在)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/6dbae32f-20bb-3d5e-507c-af5170520765.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/fa105b87-f150-0f6e-d97c-21d458125971.png)

で、この中に **フォルダー** というコネクタがあります。
**Power BI Desktop** は Windows PC にインストールするデスクトップアプリケーションなので、当然レポートを作成する際は Windows 上で作業をすることになります。
そのマシンからアクセス可能な（ネットワーク越しも含む） **フォルダー** に接続することができるコネクタです。

フォルダーに接続することで、ファイルの一覧やファイルの属性が取れるのはもちろんのこと、ファイルの内容も読めます。
というか、ファイルの内容を読むことの方が本来の目的です。
## 今回の内容はこちらからダウンロードできます
ご紹介する方法のために一連のファイルは [こちら](https://powerbistudy01.blob.core.windows.net/file/SalesSampleReport.zip) からダウンロードできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/6358f16a-af9f-4cd7-1361-8b10b1883c3d.png)
ダウンロードした ZIP ファイルを解凍して、上記の画像のように **Cドライブ** に **Work** というフォルダを作成して **C:\Work** にコピーしてください。

## フォルダコネクターの動きを確認してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/97f78499-09f5-db1d-3498-de839b0c7bab.png)

例えばこんなフォルダーがあったとします。
**C:\Work\SalesSampleReport\Data** というフォルダに３つの **CSV** ファイルがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/ec7fc6b2-1083-1b66-db37-09958a9cb70f.png)
CSV ファイルの中身はこんな感じです。↑ は Excel で見やすくしています。
飲食店の POS データのイメージです。

このフォルダに **Power BI Desktop** から接続してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/0da94e8f-8444-cff5-aa03-38cb385b227a.png)
**[データを取得] - [フォルダー] - [接続]** です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/a9119015-3035-8b27-24b7-55f0de904735.png)
フォルダーパスを入力して **OK**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/90f291ec-0116-7c6a-1228-2bab84636802.png)
**[データの変換]** をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/31645a8a-6fc3-ba30-0d17-4ac913c690f3.png)

はい、いかがでしょう？
これが指定されたフォルダーにあるファイル一覧です。
ファイル名、拡張子、最後にアクセスされた日、最終更新日、作成日、属性、フォルダーパスを持っています。
そして一番左の **[Content]** 列がファイルのバイナリです。通常、ファイルの中身が欲しい場合、これがターゲットになります。

ちなみに業務で使用している共有フォルダーだと、ひとつのフォルダーに複数の種類のドキュメントが保存されていることが珍しくないかと思います。
Excel、Word、PowerPoint、CSV、ZIP、TXT、JPEG などなど。そういったフォルダでも特定の条件で読み込むファイルを絞ることができます。一番わかりやすいのは、拡張子です。
**[Extension]** 列があるのでそこで絞り込んでしまえば、例えば Excel のみ相手にすることができます。あるいはファイル名に特徴があるなら **[Name]** 列を使用して、絞り込むのもありですね。

さて、ファイルの中身を読んでみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/2fa0e831-2407-1705-7683-706476a904de.png)
**[Content]** 列の右上のボタンをクリックしてください。（このボタンを **[ファイルの結合]** って呼びます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/2b3b2e10-caa6-689e-ec9d-b18ee79fc51b.png)
はい、見事なまでの文字化けですねー。
この画面は左上に書いてある通り、フォルダーにある最初のファイルをサンプルファイルとして、開いてみたところ、最初の 200 行はこんな感じだよーって、解析して定義を読んでくれた結果です。日本語環境だとデフォルトで **Shift-JIS** でファイルを読みます。

今回の **CSV** は **UTF-8** で保存されています。こういう場合でも焦ることなく、文字コードを指定してあげれば、ちゃんと読めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/b7131b8b-b6cf-f641-2af7-1fbb87195608.png)
ね、今度はきちんと読んでくれましたね。
はい、**[OK]** ボタンをクリックしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/32a8ea58-4495-a267-3336-ecdd101c1a67.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/26dbb972-979c-d615-2241-a5530fee9530.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/abec87e3-8d30-9163-a69e-edbb7cd8a903.png)
試しに一番左の **[Source.Name]** の右上▽を開くと、きちんと３つの CSV ファイルが読み込まれていることが確認できます。

ではとりあえず、左上の [閉じて適用] をクリックしましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/6d3bdc0d-2521-d700-c8b4-a030332d5758.png)
**Power BI Desktop** で [データ] ペインを開くと３つのファイルが読み込めていることがわかります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/80bd0164-4306-aacf-f740-bc068446df0f.png)

レポートペインを開き、行数をカウントするメジャーを作成しておきましょう。テーブル名の右側 [...] - [新しいメジャー] - [数式バー] に以下の様に入力してください

```countrows.measure
行数 = COUNTROWS(Data)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/e80b7c2a-d734-8797-1bc5-d00e5d6121c9.png)
キャンパスに **[カード]** を置いて、作成したメジャー **[行数]** を指定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d110866e-421c-9f8a-cb19-c0b7ac1893f6.png)
はい、3000行ですね。これが３つの CSV ファイルの合計行数ということになります。
## フォルダーにファイルを追加すると…？
2018年4月～6月までの３つの CSV ファイルがあったフォルダに2018年7月のファイルを追加しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/f618cb69-2e1b-8651-7bb3-a502f99eb7c8.png)
業務ではこういうことよくありますよね。特定の場所にある種類のファイルが月別や週別に追加されていく。Excel でマクロを組んだり、データを切り貼りして、報告書としてのレポートを作成する。。。

でも現代はこういうルーティンワークは自動化できる時代です。Power BI Desktop でももちろん可能です。その為にフォルダーコネクタを使ったわけです。
**Power BI Desktop** に戻りまして [更新] ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/174578e7-aee3-7d5f-11c5-615ebe99b945.png)
クリックすると…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/048c7093-88bd-fb6d-88de-375250be7264.png)
はい、4000行に増えました。
同じことを完成したレポートでやるとどうなるのか？
**C:\Work\SalesSampleReport** の中にある **sales_sample_report.pbix** ファイルで以下を試すことができます。

**■更新前**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/1c0cd2ec-5fbe-470e-8415-37a6877e108f.png)
**■更新後**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/ae1441cb-b61e-0183-0d9d-f2a76b3117a7.png)

総売上高、総会計数、各種グラフ、それぞれの数値がひと月分増えていることが分かるかと思います。
これだけでも非常に便利ですよね。

ファイル置き場を決めて、フォルダーコネクタを使用して、**Power BI Desktop** で一度レポートを作成してしまえば、もう毎月レポートを作成する必要はないのです。
でも感動するのはまだ早いのです。**Power BI Desktop** で手動で更新しているところが、**ナウくない**ですね。
## 本当の意味で自動化する前に Power BI のライセンス、持っていますか？
ここからは **Power BI Service** のアカウントをアクティベートしている人が対象です。
これまで **Power BI Desktop** のみを使っていた人、**Power BI = Power BI Desktop** だと思っている人、ぜひこの機会に **Power BI Service** にも手を出してみてください。
すごく世界が広がりますし、**Power BI** が単なる BI ツールではなく **Data Platform** だということがわかります。

**Power BI** のライセンスは

- **Power BI 無料 (Power BI Free)**
- **Power BI Pro**
- **Power BI Premium**

と 3 種類ありますが、いずれも **組織アカウント** が必要です。**MSアカウントは使えません。**もし自由に使える**組織アカウント**がないという方は **Office 365** の試用版をアクティベートするのが最も早いです。**Office 365** の試用版は **E3** と **E5** がありますが、**E5** には **Power BI Pro** が含まれているので、**E5** がオススメです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/9a2c6544-f521-d7b3-26a5-d99dd84b9681.png)

https://www.microsoft.com/ja-jp/microsoft-365/business/compare-more-office-365-for-business-plans

この [ページ](https://www.microsoft.com/ja-jp/microsoft-365/business/compare-more-office-365-for-business-plans) を **[InPrivate (Edge の場合)]** or **[シークレットウインドウ (Chrome の場合)]** で開いてください。
上記の画像のページになりますので、矢印で示している一番左の **Office 365 E5** の **[無料で試す]** から新たに Office 365 のアカウントを作成できます。
## 本当の意味で自動化するには
1. **オンプレミスデータゲートウェイ**を用意しておく
2. **Power BI Service** へレポートを発行する
3. **Power BI Service** で発行したレポートのデータセットに **ゲートウェイの設定** と **スケジュール更新** を設定する

上記の手順を踏むと、本当の意味で **自動化** が完了します。

オンプレミスデータゲートウェイについては以下を読んで概念を把握した後で、任意の Windows PC にインストールしてください
**オンプレミス データ ゲートウェイとは**
https://docs.microsoft.com/ja-jp/data-integration/gateway/service-gateway-onprem

ここから先は上記の 1 が完了していて、出来上がったレポートを発行する 2 から説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/0bbaa931-d941-289a-ee86-1a17d2befb77.png)
ダウンロードしていただいたサンプルのレポートファイル (sales_sample_report.pbix) を開いて、リボンの **[発行]** をクリックしてください。もし、**Power BI** にサインインしていない場合は、このタイミングでサインインが求められるので、ご自身の**組織アカウント**でサインインしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/b6928d85-9eb5-1647-8200-d27ce2e7965f.png)
**[発行]** が成功すると上記のダイアログが表示されます。

さて [Power BI Service ( https://app.powerbi.com )](https://app.powerbi.com) をブラウザで開いてください。
ここでも **[InPrivate (Edge の場合)]** or **[シークレットウインドウ (Chrome の場合)]** をオススメします。

理由は皆さんが普段何らかの Office 365 や Dynamics 365 を使用されている場合、そのアカウント情報が既にブラウザに残っていて、普通に開くと、そちらの業務で使用しているアカウントでサインインしようとしてしまう可能性があるからです。InPrivate や シークレットウインドウ ならば、ブラウザキャッシュが使用されないので、毎回必ずサインインを聞かれるので、意図したアカウントでサインインをすることが可能です。
### Power BI Service でのゲートウェイの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/f069bb4f-add4-7a27-cb73-9bbae4e6aa8e.png)
画面を開いたら、右上の **[歯車マーク]** - **[ゲートウェイの管理]** をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/0b907ce5-f0f4-80b7-3152-b8d38bb2f62b.png)
私はオンプレミスデータゲートウェイをインストールする際に **[PowerBIWorking]** という名前を付けたので、既にその名前が **[ゲートウェイクラスター]** として表示されています。
この名前を選択し(①)、右端にマウスを持っていくと **[...]** が表示される (②) のでこれをクリックします。それから ③ の [データソースの追加] をクリックします。

なお、今回のレポート用にデータソースを２つ追加する必要があります。**sales_sample_report.pbix** ではマスタデータを **CSV** で、トランザクションデータを **フォルダーコネクタ** で取得しています。これを確認するには、pbix ファイルで以下の手順で画面を開いてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/ac14aa60-100b-31ac-860b-fb6c4df66421.png)

1. データの変換
2. Power Query エディターでリボンの **[表示]** - **[クエリの依存関係]**

クエリの依存関係はデータソースから Power Query でどう加工しているのかを図示してくれるので非常に便利です。最初はよくわからないかもですが、慣れてくるとわかるようになるので、わからなくても問題なしです。さて、今回見るべきは赤枠で囲った右上の２つ。①がフォルダ、②がユーザーマスタの CSV を表しています。そう、これらがオンプレミスにあるデータソースということになるので、オンプレミスデータゲートウェイで設定する必要があります。それぞれのパスはコピーしておいてください。

フォルダ： C:\Work\SalesSampleReport\Data
ファイル： C:\Work\SalesSampleReport\User_M.csv

Power BI Service に戻って **[データソースの追加]** をクリックします
まずは フォルダ から。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/5c44b261-e8f8-f720-b124-b9e18ec08062.png)

1. データソース名：sales_sample_report_folder
2. データソースの種類：フォルダー
3. 完全なパス：C:\Work\SalesSampleReport\Data
4. Windows ユーザー名：（オンプレミスデータゲートウェイをインストールした Windows PC のユーザ名を {マシン名\ユーザー名} という形で入力）
5. Windows パスワード：4 のユーザーのパスワード
6. このデータソースのプライバシーレベルの設定：組織（説明すると長いのでとりあえず、組織で OK です）

続いて ファイル。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/a30801b6-2db9-14e0-77ef-5207fec20c3b.png)

1. データソース名：sales_sample_report_user_master
2. データソースの種類：File
3. 完全なパス：C:\Work\SalesSampleReport\User_M.csv
4. Windows ユーザー名：（オンプレミスデータゲートウェイをインストールした Windows PC のユーザ名を {マシン名\ユーザー名} という形で入力）
5. Windows パスワード：4 のユーザーのパスワード
6. このデータソースのプライバシーレベルの設定：組織（説明すると長いのでとりあえず、組織で OK です）

はい、これでゲートウェイに対するデータソースの設定を完了です。
次はデータセットへの設定です。
### Power BI Service でのデータセットの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/f13ed0b7-5e50-2a8a-65c7-67739e3d4596.png)
データセットの設定を開くには、画面左側の **[データセット]** から該当のデータセット名の右側 **[...]** - **[更新のスケジュール設定]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d64eed85-db99-6a55-9dbc-c3f4db9407fa.png)
**[ゲートウェイ接続]** を開きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/ef075fa9-fd49-3d47-4c61-2f470b987409.png)
該当のゲートウェイを選択し、データソースをマップします。

- File{"path":"c:\\work\\salessamplereport\\user_m.csv"} ← sales_sample_report_user_master
- Folder{"path":"c:\\work\\salessamplereport\\data"} ← sales_sample_report_folder

マップしたら **[適用]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/4eaddbeb-64ac-f287-1de6-53706cbcb4c1.png)
先ほどはグレーアウトされていてクリックできなかった **[スケジュールされている更新]** がアクティブになっているので、これを開き、

- データを最新の状態に保つ：オン
- 時刻：任意の時刻を設定します。ここは Power BI Pro の場合 8 回/日まで設定が可能です
- （任意）更新が失敗したときにこれらのユーザーに電子メールを送信する：メールを飛ばしたい人のメールアドレスを入力（ただし、Power BI のライセンスを持っているユーザーのみ）

最後に **[適用]** ボタンをクリックしてください
これで、データセットへの設定も完了です。

指定した時刻になると、該当のファイルとフォルダからデータを取得して、最新化してくれます。
では次はそれを手動で試してみましょう。

## 動作確認
**C:\Work\SalesSampleReport\Data** を以下のように3つのファイルにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/723827cb-a6ff-9b73-1d4d-00cfa8a50d55.png)
この状態で一度 Power BI Service の該当データセットを手動で更新します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/191c6542-d401-2b3f-8db8-c44213217eec.png)
データセットの名前の右側 **[...]** - **[今すぐ更新]** をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/5293c354-fc24-9c93-6956-d50613fd0103.png)
画面右上に「更新の準備をしています」というメッセージが出るので、しばらく待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/5d2e79f5-d1b7-b273-aa87-f96b7753a4db.png)
メッセージが消えたら、**更新履歴** をクリックしてください。**オンデマンドの更新** が **完了** になっていれば **OK** です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/31cebe2f-ece7-84f1-f09e-db1e1c307917.png)
画面左の該当レポートをクリックしましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d0ed9e86-23ea-dfe4-a304-5fc70469ef2a.png)
確かに 2018年4月 - 6月のデータになっていますね。
では該当フォルダに 2018年7月 の csv をコピーしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/2caceda9-2f60-0493-e24a-185f581a87d3.png)
そしてもう一度データセットを手動で更新します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d3b64c47-e1df-55e4-3b18-dadcdbf65156.png)
**[更新のスケジュール設定]** をクリックし、データセットの設定画面に移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/c69cb619-36e4-74bb-9ddd-10615bc1330a.png)
データセット名の右側 **[...]** から **[今すぐ更新]** をクリック。メッセージが消えたら、更新履歴を確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/b5080420-c396-3a24-3923-cf603751110b.png)
更新が完了したら、再びレポートを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/94e8c680-53fb-6600-89bd-3706e315e80f.png)
「あれ！？更新されてない…！？」

ご安心をー。ブラウザキャッシュが残っていて、前回の内容を表示しているだけですので、ブラウザを更新 (F5) してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/cc2c768a-283c-278f-7664-37ff90420ae4.png)

はい、無事に更新されていましたね！
もしうまくいかなかったという方、落ち着いて、設定を見直してみてください。
おそらくオンプレミスデータゲートウェイかデータセットの設定です。

# まとめ
いかがででしたでしょうか？
本当の意味で自動化する、という意味がわかりましたね。
さらに言うと、該当フォルダにファイルを置く部分も **Power Automate** で自動化することも可能です。なぜなら **オンプレミスデータゲートウェイ** は **Power Platform** のサービスすべてで使用することができるからです。

ね、一生懸命毎月やられているルーティンワーク、なくせそうでしょ？
その可能性を感じた方はぜひトライしてみてください！！

実現できた時のことを考えるとワクワクしますよ。特に経営層の方なら、なおさらそう感じるはず。

以上ですー。最後まで読んでいただきありがとうございました。また気が向いたら、**Power BI Tips** シリーズ書きます。
皆様からのリクエスト、お待ちしております。

何かリクエストがあれば、以下までー🤗
Twitter: https://twitter.com/yugoes1021
Facebook: https://www.facebook.com/yugoes1021
LinkedIn: https://www.linkedin.com/in/yugoes1021/