[Power BI Tips] フォルダー系コネクタにはいくつかあるけどだいたい同じ!?

#今回はフォルダー系コネクタのお話
はい、前回は [フォルダーコネクタを使って、毎月追加/更新されるファイルをデータソースにした Power BI レポートの自動化](https://qiita.com/yugoes1021/items/14f763d90554ee2f2ee2) という内容を書きました。
今回は前回の派生でフォルダーコネクタ自体ではなく、フォルダー系コネクタについてです。使いようですが、結構便利です。

#フォルダー系コネクタの種類
今日紹介するのは代表的なところで以下３つです。

**1. フォルダー
2. SharePoint フォルダー
3. Azure Blob Storage**

前回使用した **1.フォルダー** については、もし **前回分を読んでいない方は、先に [前回](https://qiita.com/yugoes1021/items/14f763d90554ee2f2ee2) を読んでから戻ってきていただくことをお勧め** しますが、簡単に言えば、

1. 特定のフォルダに n 個のファイルを置いて、レポートを作り、そのレポートを **Power BI Service** に発行
2. **Power BI Service** で**オンプレミスデータゲートウェイ**と**スケジュール更新**の設定
3. それ以降、そのフォルダのファイルを更新、または新たにファイルを追加すると、設定した通りにデータを取得して、レポートのデータ更新が行われる

ということです。

レポートは一度作成した後は、データが更新されればよいので、非常に理にかなっている使い方ができます。
さて、この**フォルダーコネクタ**と同様の動きをするのが、**フォルダ系コネクタ**です。**（← 私が勝手にそう呼んでます。公式の名称ではないのであしからず）**
## 1.フォルダー
**フォルダコネクター**とはこれです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/4beb2b78-de29-dcb9-6ab8-b913670a9255.png)
フォルダを指定して読み込むとこんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/66d5876a-7e4c-15f8-a2fa-79a4f0681eda.png)
画面上部の数式バーを見るとわかる通り、↑ の画像はフォルダーコネクタを使用しています。

```
= Folder.Files(フォルダパス)
```
フォルダパスという引数は、レポート自体のパラメータとして作成しています。値はその名の通り、フォルダパスです。
列は以下の通りです。

| No.        | 列名             | 内容              |
|:-----------|:-----------------|:------------------|
| 1          | Content          | ファイルのバイナリ|
| 2          | Name             | ファイル名        |
| 3          | Extension        | 拡張子            |
| 4          | Data accessed    | 最終アクセス日時  |
| 5          | Data modified    | 更新日            |
| 6          | Data created     | 作成日            |
| 7          | Attributes       | 属性              |
| 8          | Folder Path      | フォルダパス      |


## 2.SharePoint フォルダー
**SharePoint** フォルダーコネクタはこれです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/8cb79628-156a-4c8c-3f65-a87e5e90e777.png)
**SharePoint** サイトのルート（ ~/sites/{サイト名} ) を指定することでそのサイトの **Shared Document** 配下が読み込めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/7d443341-8df7-4fc5-b08e-e547dce94c1f.png)


```SharePointフォルダー
= SharePoint.Files("URL", [ApiVersion = 15])
```

フォルダーコネクタと同じスキーマで読み込めることがわかります。

## 3.Azure Blob Storage
**Azure Blob Storage** はこれです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/773f66f3-19b2-3c30-fbb7-8443a967ed61.png)
**Blob Storage** のストレージアカウントを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/256e609f-dba3-9ab2-0dcc-c4966445c56f.png)

```
= AzureStorage.Blobs("ストレージアカウント")
```
指定したストレージアカウントでアクセス可能な **Blob Containers** が一覧できます。ここで特定の **Blob** の **[Data]** 列の **Table** をクリックすると、他のコネクタ同様にフォルダとして扱うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/b4fbb29b-1947-6e6b-0b3a-f375b75655b7.png)
列名を見ると、やはり他のコネクタと同様のスキーマになっています。

## ちなみに SharePoint フォルダーコネクタのもうひとつの使い方
よく聞かれることなので、書いておきます。また、**ずーーーーーっと**疑問に思われていた方もいると思います。

**「なんで Microsoft のサービスなのに、OneDrive のコネクタがないんだろう…？」**

これですが **OneDrive for Business** であれば、**SharePoint フォルダー** のコネクタが使えます。
（コンシューマ向けの OneDrive は無理です）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/064fb2b4-6c1c-444b-4e33-6a3e44c72321.png)
**Office 365** 系のサービスを開いている場合、左上のメニューから **OneDrive for Business** が開けます。開いたページの URL は以下の様な形になっています。

```
https://{ドメイン名の変形}-my.sharepoint.com/personal/{メールアドレスの変形}/_layouts/15/onedrive.aspx
```
**ドメイン名の変形：ドメイン名からハイフンなどの記号を除いた文字列
メールアドレスの変形：メールアカウントから @ と . (ドット) を _ (アンダーバー) に変換した文字列**

そう、見てわかる通り、**OneDrive for Business** は **SharePoint Online** のドキュメントを個人用にしているのです。なので、**API** も共通だったりします。
（一言で言うと、同じアーキテクチャです）
この **URL** から後ろの **/_layouts/15/onedrive.aspx** を削除して **SharePoint フォルダーコネクタ** に指定してください。

❌：https://{ドメイン名の変形}-my.sharepoint.com/personal/{メールアドレスの変形}/_layouts/15/onedrive.aspx
⭕：https://{ドメイン名の変形}-my.sharepoint.com/personal/{メールアドレスの変形}

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/8372dfce-99ef-e7fa-f756-2148484de6ba.png)
ほら、取れたでしょ？

# フォルダーの一覧が取れたその後は…
データを見るとわかりますが、すべてのファイルがフラットに取得できています。サブフォルダにあるファイルも取得されています。代わりに **[Folder Path]** 列でどの階層にいたファイルなのか、判断が付きます。もし、特定のフォルダ内のファイルのみが欲しい場合は、**[Folder Path]** で列名の右上の ▼ ボタンから絞り込みをしてください。

さらに該当フォルダに複数の種類のファイルが存在することもあるでしょう。例えば、Excel、Word、CSV、PowerPoint が存在しているけど、Excel のみ対象にしたい。そういう場合は **[Extension]** 列で拡張子を絞り込みましょう。

さらにさらに Excel の中でもあるファイル名の形式のみ対象にしたいとしましょう。例えば、売上202004.xlsx のように「売上」の後ろに yyyymm がくっついている。他に「売上」という言葉を含んだファイルが存在しないなら **[Extension]** 列の右上の ▼ ボタンで「売上」という言葉を含むもので絞り込めば OK です。

さて、欲しいファイルのみになったら、後は **[Content]** 列の右上の **[展開] ボタンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/8247b991-7ddb-aa97-0c2d-281fd24b6a30.png)
これをクリックすることで、複数の対象ファイルの中身を読んで、データを結合することができます。

言い忘れていましたが、ここで結合できるファイルは、すべて同一フォーマットのファイルであるというのが条件です。
例えば **Excel** や **CSV** であれば、列名および列数がすべて統一されている必要があります。

## まとめ
いかがででしたでしょうか？
**フォルダ** にある **ファイル** を **データソース** にするのは非常に楽しいし、便利ですよね。
また**フォルダ**そのものの **ファイル一覧** を作って、検索できるような **レポート** を作っておくのも、便利です。
**フォルダパス** があるので、**URL** としてデータ化してしまえば、レポートからそのファイルに **アクセス** することも可能ですね。

可能性を感じた方はぜひトライしてみてください！！

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

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