Power BIでファイルサーバーの利用状況を確認する-前編-

**社内ファイルサーバーをPower BIで確認する話をTwitterで呟いた結果、どう作ったかを書く事にしました。**
因みに筆者のインフラ系知識はド素人。
故に他所のファイルサーバーでも同じ仕組みが使えるかは分からないです。

長くなりそうなので前後編に分けて投稿。

Power BIの細かい操作手順はある程度省いて書いていきます。
#今回接続するファイルサーバー
今回、Power BIから読み出すファイルサーバーはこういう風に表示されるタイプ。
**ネットワークドライブ**って言うんですかね。
エクスプローラーから`G:\フォルダ名`みたいなアドレスで到達できるファイルサーバーに接続します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/fd015073-e887-72b9-9396-fad8d638d762.png)

#Power BIで使えるファイルサーバーに接続できるコネクター
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/3e10d933-fa99-d063-687c-02e14b645e26.png)
**1. フォルダー**

今回のコネクターは**フォルダー**1つだけです。
ローカル上のフォルダーと同じように扱えるので、Power Query上での面倒な設定はありません。
#フォルダーコネクター
##ファイルサーバーと接続する
フォルダーコネクターを利用するには必ず**フォルダーパス**を入力する必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/8c278f67-dc27-3b24-7e5c-8f7917f39ed3.png)
このコネクターで接続すると、**接続したフォルダーの下位フォルダを含む全ファイル**が一覧表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/6a604f57-5bc7-bcc4-f57d-1c38456c45ba.png)
###各列の説明
- Content
    - Binary(ファイルの中身)
- Name
    - ファイル名
- Extension
    - ファイル拡張子
- Date accessed
    - ファイルへの最終アクセス日時
- Date modified
    - ファイルの最終更新日時
- Date created
    - ファイルの作成日時
- Attributes
    - ファイルサイズ、コンテンツタイプ、ファイルの種類etc...
- Folder Path
    - ファイルが存在するフォルダーのパス

#Power Queryで取り込む前準備
今回はファイルサーバーの利用状況確認が目的なので、**ファイルそのものは必要ありません。**
**Content列**は**削除**してしまいましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/839762cc-59a4-e758-b63e-297ec6147c83.png)

次に**Attributes列**に**ファイルサイズがSizeとして格納**されているので**展開**します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/2874fca7-a5ad-3e06-89fd-0795acd50e0b.png)

これだけだと**個別のファイルを識別する一意の値が存在しない**ので、**列の追加タブ**から**インデックス列**を**追加**します。
この手順が結構重要で、**忘れると後で泣きます。**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/5592457b-7d4b-1198-fac5-605238069ea7.png)

部署ごとに割り当てたフォルダの内訳を分析したい場合は、**Folder Path列**を区切り記号で分割して必要なフォルダを切り出します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/77b15c91-6078-405b-7b6a-0a12cf95810a.png)

これでPower Queryでの前準備は終わりです。
#Power BIで分析
最終的に、このようなマトリックスやテーブルを基に利用状況を確認するのが今回のゴールです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/7aedcad1-5e8b-8ab6-d347-b731b66ff1cd.png)


しかし今回はデータを扱う際にあたり、**気を付けなければならない点が2つあります。**

**1. ファイルサイズのキロ、メガ、ギガ、テラ換算
2. ファイルサイズ等のランキングを作成するRANKX関数の挙動**

順番に解説していきます。
##ファイルサイズのキロ、メガ、ギガ、テラ換算
個々のファイルサイズは**Size列**に格納されていますが、**全て1byte単位です。**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/ba5fdb01-6b2e-61a5-e148-622c8dfa09c1.png)
このままだと正確なファイルサイズを把握することが難しいので、以下の式を使って扱いやすい単位に変換します。
`= DIVIDE(SUM([Size]),2^[バイト単位変換値])`
**[バイト換算単位変換値]**は以下の表の値を代入することで、それぞれの単位に変換できます。

|バイト単位変換値|換算後単位|
|:-:|:-:|
|10|KB|
|20|MB|
|30|GB|
|40|TB|
###What-Ifパラメーターを使ってみる
状況に応じて自由に単位を変換したい場合は**モデリングタブ**の**What-If**を使うと良いでしょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/767f72bd-978f-29cd-90e6-719ab8d4546e.png)
**What-Ifパラメーター**の設定はこんな感じです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/97e95af1-57f1-540b-dfa9-9991d5b6d49e.png)
####スライサーの設定
**このページにスライサーを追加する**にチェックを入れておくとスライサーが追加されるので、**右上の∨**から**一覧**を選択する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/05d72dc7-2d83-f4c4-f2ec-c416b07b040f.png)
表示が変わり、するとチェックボックスから選択できるようになる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/7550c667-c885-42ba-2abc-b6878863c72e.png)
更に**視覚化ウィンドウ**の**書式タブ**から**方向**を**横**に変えると、表示をボタン風に出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/72dbe564-948b-6f44-e8a8-d6f2ef9d79db.png)![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/63bc0cba-b635-8b93-f6d0-9d5e8bbd2f2d.png)
##ファイルサイズ等のランキングを作成するRANKX関数の挙動
**ファイルサイズのランキング**はこの手の利用状況確認では必須と言えるでしょう。

Power BIでそれを作ろうとした場合、多くの人は最初にこのようなDAX式を書くのではないでしょうか?
`容量ランキング = RANKX(ALL('取り込んだファイルサーバーテーブル'),SUM([Size]))`
このDAX式は、視覚化でテーブルを選んだ場合**は**正しく動作します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/07768b55-df67-d8e1-9aca-da3311551f05.png)
しかし**マトリックスの場合は正しく動作しません。**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/313502/feaf420f-7d83-d5f6-44ab-ce564c509057.png)
このランキングをマトリックスで正しく動作させる方法を後編で書いていきたいと思います。
#後編に続く
書いてる途中で内容の8割がRANKXの話になりそうだった。
急遽分割する事にした筆者を許しておくれ…\_(:3」∠)_