PowerBI DesktopとAzure DocumentDB

#はじめに
Advent Calendar 2016、11日目の投稿。
Azure DocumentDBのデータをPowerBI Desktopで読み込んで分析する機会があったので簡単なTips的なことでも。
まずは、PowerBI、DocumentDBとはなんぞや、という点をさらっと説明していきます。
（細かく知りたい人はググってください）

##PowerBIとは
PowerBIとはMicrosoftが提供するいろんなデータを簡単に視覚化できますよーというツールでWeb版とDesktop版がそれぞれあります。
今回ご紹介するのはDesktop版（以下、単にPowerBI）の方で、Web版と比べて、いろいろと細かい編集をやりたい場合に便利なものです。
一番の大きな魅力はやはりこのDesktop版は無料で使える、という点ですかね。
※ツールは下記PowerBIのサイトからダウンロード可能です。
　ダウンロードボタンを押すと入力画面が出てきますが、無視してもOKです。
　[PowerBI Desktopへのリンク](https://powerbi.microsoft.com/ja-jp/desktop/)

##Azure DocumentDB
Azure DocumentDB（以下、単にDocumentDB）とは、MicrosoftがAzureクラウドサービスの一つとして提供しているNoSQL型のストレージで、JSON形式のデータをためて置くことができるものです。

#さて
PowerBIは様々なデータソースを取り込むことができ、DocumentDBもまだベータ版ですが、取り込むことが可能です。
ここでは、DocumentDBのアカウントからデータを取り込むところまでを説明してきます。

まずは、PowerBIを開いて「データを取得」ボタンを押す。

![pbi_pickdatasrc.png](https://qiita-image-store.s3.amazonaws.com/0/150006/42b63f46-4d88-439f-4bda-8d952bf0ae22.png)

画面が出てくるので、左ペインから「Azure」を選択すると右ペインの一覧の中から「Microsoft Azure DocumentDB(ベータ)」がありますので、それを選択して「接続」ボタンを押す。

![pbi_getdatasrc.png](https://qiita-image-store.s3.amazonaws.com/0/150006/075f8726-e9df-1589-c5fe-66ccba2fbe1d.png)

そうするとDocumentDBのアカウント情報を入力する画面が出てきますので、ここではとりあえずアカウントのURLを入力し、「OK」を押します。

![pbi_docdbinfo.png](https://qiita-image-store.s3.amazonaws.com/0/150006/f0d680a3-c3c1-d63a-f5ea-bbec226cf82c.png)

アカウントキーの入力が求められますので、キーを入力し「接続」ボタンを押す。

![pbi_docdbkey.png](https://qiita-image-store.s3.amazonaws.com/0/150006/b5205e2b-aa9b-5d49-71ec-11aefc88d0f6.png)

そうするとDocumentDBに接続されコレクション（RDBでいうところのテーブルみたいなもの）の一覧が出てきますので、今回のために作成した「demo」コレクションを選択します。
このまま「読み込み」を押してデータを読み込むこともできますが、まずは細かい編集をしたいので「編集」ボタンを押します。

![pbi_picktable.png](https://qiita-image-store.s3.amazonaws.com/0/150006/59970c4e-2b30-a4f5-8069-317acb73515d.png)

編集画面が表示され、データが読み込まれました。
次はこの読み込まれたデータをどう加工して行くかについてみていきましょう。

![pbi_edit001.png](https://qiita-image-store.s3.amazonaws.com/0/150006/99f3aeab-639c-aa79-4aa1-9291674c8c3d.png)

#JSONデータを展開する

今回のデモのために、とりあえず下記データを1件DocumentDBに登録しておきました。
データは適当なので細かいことは気にしないでください。

`{
　  "id": "person001",
  　"person": {
    　"name": "Hiroshi Nohara",
    　"age": 43,
    　"job": {
    　  　"company": "MaruBatsu",
     　 　"title": "Salesman"
    　　}
  　}
}`

さて、このデータをPowerBIで扱いやすくするにはどうすればよいのでしょうか。
さきほどの画像を見るとカラムが一つしかなく、プロパティが一つも見えません。

![pbi_edit001 - コピー.png](https://qiita-image-store.s3.amazonaws.com/0/150006/789604a3-7a9f-3242-10c6-2092c4162d76.png)

編集画面のデータが表示されているところを注意して見てみましょう。
「Document」というカラムの右上に開いてくれと言わんばかりのボタンが見えますでしょうか。
PowerBIは基本的に表形式のデータを扱うのが得意なのでJSONデータのような階層化されたデータはこの展開？ボタンを押して展開していかなければならないのです。
では、展開ボタンを押してプロパティを表示していきましょう。
今回はとりあえず、「_」（アンスコ）始まりのプロパティは無視しますので、必要なプロパティだけをチェックボックスで選択し「OK」を押します。

![pbi_edit002.png](https://qiita-image-store.s3.amazonaws.com/0/150006/5fa5b7a2-283b-7566-6056-db60f08c6d1b.png)

これで、「id」と「person」が見えましたね。
ですが、まだ全部見えてないので、どんどん展開していきましょう。

![pbi_edit003.png](https://qiita-image-store.s3.amazonaws.com/0/150006/f0d9f693-e8cb-2826-a790-ca9cb65f673c.png)

展開、展開、展開・・・（メンド）。

![pbi_edit005.png](https://qiita-image-store.s3.amazonaws.com/0/150006/a7fc0bb8-a914-0330-4c4f-dd6758a367bf.png)

さて、これで全てのプロパティが表示されました。
編集画面の左上にある「閉じて適用」ボタンを押しましょう。

![pbi_edit006.png](https://qiita-image-store.s3.amazonaws.com/0/150006/f915cacd-df5b-f47d-35a7-502707576f42.png)

PowerBIの本画面に戻ってきました。
下の画像を見ると一番右側の「フィールド」ペインに展開したプロパティの一覧が表示されています。
これらプロパティを選択していって表を作ったり、いろんなグラフを作成していけますが、このデモではとりあえず表を使いましょう。
フィールド一覧にあるプロパティを「視覚化」ペインの「値」欄にドラッグ＆ドロップで追加してくと、下図のように表データが出てきました。

![pbi_endedit001.png](https://qiita-image-store.s3.amazonaws.com/0/150006/39af23d5-66ff-52eb-9fdd-58dbb1286011.png)

データ1件だけでは寂しいので追加で3件データを登録していきましょう。

2件目：
`{　　"id": "person002",
　　　"person": {
　　　　"name": "Misae Nohara", "age": 39,
　　　　"job": {
　　　　　"company": "Home", "title": "SengyouSyufu"
　　　　}　}　}`
3件目：
`{　　"id": "person003",
　　　"person": {
　　　　"name": "Shinnosuke Nohara", "age": 5,
　　　　"job": {
　　　　　　"company": "Action Kindergarden", "title": "Enji"
　　　}　　}　}`
4件目：
`{　　"id": "person004",
　　　"person": {
　　　　"name": "Himawari Nohara", "age": 0,
　　　　"job": {
　　　　　"company": "Home", "title": "Baby"
　　　}　　}　}`

新たに登録したデータを読み込むためには、「最新の情報に更新」ボタンを押します。

![pbi_endedit002.png](https://qiita-image-store.s3.amazonaws.com/0/150006/b7ae6fba-ff29-a6ea-4320-3e957ebe2f2f.png)

表示されましたね。

![pbi_endedit003.png](https://qiita-image-store.s3.amazonaws.com/0/150006/c8a3ffd7-d2ce-3182-b44c-46759b0633e0.png)

#JSONに新しいプロパティを登録したら

では次は新しいプロパティを追加したJSONデータを1件登録し、そいつもPowerBIに表示してみましょう。

`{　"id": "person005",
　　"person": {
　　　"name": "Shiro Nohara", "age": 5,
　　　"job": {
　　　　"company": "Home",
　　　　"title": "Guard Dog",
　　　　"dept": "Dog House" /*★新しく追加したプロパティ★*/
　　　}　}　}`

こいつは、、、personなのか・・・？ということは置いておき、jobの中に新たに「dept」というプロパティを追加しました。
ではこのデータをPowerBIを更新して読み込んで見ましょう。

「最新の情報に更新」、と。
![pbi_endedit004.png](https://qiita-image-store.s3.amazonaws.com/0/150006/4456f307-db66-f7b4-a7d2-364fd6097981.png)

あれ？追加した「dept」プロパティがフィールド一覧に表示されない・・・。

![pbi_endedit005.png](https://qiita-image-store.s3.amazonaws.com/0/150006/114f206a-cc6a-b27c-7737-d470f21888b3.png)

ちょっと編集画面を開いて詳しく見てみましょう。
編集画面を開くとリボンの「クエリ」というとこに「詳細エディタ」ボタンがあるので、それを押して詳細クエリエディタを表示します。
PowerBIでは、GUIだけでなく、このようなエディタでクエリ文を書いてデータを加工することも可能です。

![pbi_endedit006.png](https://qiita-image-store.s3.amazonaws.com/0/150006/aa68d96e-b66d-eae5-3bbc-d4e159d89bd7.png)

で、そのクエリを見てみると、JSONデータを展開していくステップが書いてあるのが見えますでしょうか。
ご丁寧に展開されたプロパティが事細かに記述されています。。。
この状態だと新しいプロパティを追加しても、前回展開したプロパティしか表示されないんですね。
ちなみに、これらの加工ステップは編集画面の右側にある「適用したステップ」でもGUIで確認することができます。

では、新しく追加されたプロパティを表示するために再加工していきましょう。
詳細エディタを閉じて、編集画面でやっていきます。
右側にある「適用したステップ」でjobを展開する1つ前のステップに戻りましょう。

![pbi_endedit007.png](https://qiita-image-store.s3.amazonaws.com/0/150006/4d8a8776-d85b-7d6b-1121-2ec772a230db.png)

するとデータがjob展開前の状態に戻ります。
この状態でもう一度jobを展開してみましょう。

列選択画面を見ると、下のほうに「注意」マークが出て「リストが完全でない可能性があり（ます）」と表示されています。
すぐ右にある「読み込む」リンクを押してみましょう。

![pbi_endedit008.png](https://qiita-image-store.s3.amazonaws.com/0/150006/7bd29cac-df88-57f2-08dc-499194865df1.png)

新たに追加した「dept」プロパティが表示されましたね。
選択して「OK」ボタンを押しましょう。

![pbi_endedit010.png](https://qiita-image-store.s3.amazonaws.com/0/150006/592bc67b-37c7-a9a6-9ba4-87c0b202166c.png)

ちゃんと表示されましたね。

![pbi_endedit011.png](https://qiita-image-store.s3.amazonaws.com/0/150006/a470bae4-a48f-a3b4-1a40-4ace5cad569e.png)

しかし、ここで終わりではありません。
先ほど、1つ前のステップに戻りましたが、その後のステップはどうなるのでしょうか。

![pbi_endedit012.png](https://qiita-image-store.s3.amazonaws.com/0/150006/4f454031-f753-a8ec-1b65-126bbc31b61d.png)

jobが見つかりませんでした、とエラーになってしまいます。
ステップの左側に見える「×」ボタンを押して削除しましょう。

![pbi_endedit013.png](https://qiita-image-store.s3.amazonaws.com/0/150006/e523be69-3de6-b3cc-0c6b-3bc021d46acc.png)

これで大丈夫ですね。
では左上の「閉じて適用」を押してPowerBI画面に戻りましょう。

![pbi_endedit015.png](https://qiita-image-store.s3.amazonaws.com/0/150006/a3efd4e4-8c1e-6c20-4553-6f440a5bc275.png)

「フィールド」ペインに「dept」が表示されましたね。
表に追加してみましょう。

![pbi_endedit016.png](https://qiita-image-store.s3.amazonaws.com/0/150006/f66d5309-a861-8704-ee5d-12d787ac3404.png)

ちゃんと表示されましたね。

#おわりに

いかがでしたでしょうか。JSONメンデー、という感じですかね。

正直、PowerBIでJSONデータを扱うのはいろいろ手間がかかって面倒なのですが、簡単にグラフィカルなレポートを作りたいなら大変便利なツールかと思います。
まだまだ発展途上なツールですし、今回のDocumentDBプラグインはまだベータ版ということもあるので、今後に期待していきたいですね。
JSONデータでなくとも、表形式のデータも扱えるので、みなさまも是非活用してみてはいかがでしょうか。

ではでは。