[Power BI Tips] JSON テーブルの推論をちょっと試してみた

#Power BI October 2020 Update
珍しく **Power BI** の更新情報から扱ってみようと思います。
2020年10月版のアップデートは以下の通り

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/96cfb925-5d4f-6be5-ae28-f534161d31cc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/f1d48747-b500-cc94-d5e8-0e822b7cc926.png)

詳細は **Power BI Blog** を見てください。オススメはブログ内にある **YouTube** を見てから、気になるところをブログで確認する感じですね。
ブログを開いて、**「うわ！英語じゃん」**って言って、**そっ閉じしたアナタ！ブラウザの翻訳機能を使うのです！！！**
https://powerbi.microsoft.com/ja-jp/blog/power-bi-october-2020-feature-summary/

本記事で取り扱うのは上の画像 1 ページ目の **[Data Preparation] - [Automatic Table Detection from JSON files]** の挙動です

#JSON テーブルの推論
さて、JSON テーブルの推論とはどんな機能なのでしょうか？
これを有効にするには以下の手順が必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/fa57669d-072c-ef68-b114-d73b288ce0bb.png)
**[ファイル] - [オプションと設定] - [オプション]** です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/5b267486-abd1-5b54-845b-b9625edbe06e.png)
**[プレビュー機能]** を開くと **[JSON テーブルの推論]** があります。ちなみに今回のアップデートで同じく追加された機能 **[Excel テーブルの推論]** もあります。

ここで有効にしたいプレビュー機能にチェックを入れて、**OK** をクリックすると **Power BI Desktop** の再起動を求められますので、一度アプリを閉じて再度開けば、有効になっています。

今回この機能を試すには JSON ファイルが必要なので、de:code 2020 のセッションリストの **JSON** を使用しましょう。以下の URL をコピーしておいてください。

```:decode2020のセッションリストURL
https://www.microsoft.com/ja-jp/events/decode/2020session/export.asmx/JSON
```

## 試してみる
### JSON テーブルの推論 ON の場合
さっそく **[JSON テーブルの推論]** が **ON** の状態で上記の URL を指定して JSON ファイルを読み込んでみましょう。
**Power BI Desktop** を起動すると以下のような画面になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/507cdaf1-2e5e-1d4f-d32b-3a71acd4fb4f.png)
これまでのバージョンを知っている方は**「おや？」**って思われたはずです。
そう、今回のアップデートで空のページに **ウォーターマーク** が入りました。真ん中に並んでいる文字とアイコンのことです。これがレポートを作成する際の、最初の **ナビゲーション的な役割** を果たしています。もちろんこれらの **ウォーターマーク** から進まなくても **OK** です。リボンから操作を選択するのも可能ですし、**[ファイル]** から操作を選択することも可能です。せっかくなので今回は、この **ウォーターマーク** から勧めましょう。赤枠で囲んである **[別のソースからデータを取得する→]** をクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/b4b0fdb5-0274-7b45-6a2c-bfa21cc16ef9.png)
**[その他]** - **[Web]** - **[接続]** の順でクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/509d683d-5e18-3a78-2539-fc18c340b8ff.png)
ここにさっきの **URL** を貼り付ける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/a2887a99-dbf6-a780-9b37-498b8f8e4d9e.png)
そうすると何事もなく **Power Query エディター** にこうやってデータが読み込まれる
実は既にこの状態で新機能が動作しているのである

**「え？何が？？」** って思った方、ご安心を。それを解説していくのが、このブログである。

では比較のために **[JSON テーブルの推論]** を **OFF** にして同じ JSON ファイルを読み込んでみよう。その為には **Power BI Desktop** をもう一つ別に起動する必要があるので、いったんいま開いてる **Powe BI Desktop** は **[閉じて適用]** を押した後に **「JSON テーブルの推論_ON」** という名前で保存しておこう。

### JSON テーブルの推論 OFF の場合
**Power BI Desktop** を起動して **[ファイル] - [オプションと設定] - [オプション]** を開き **[JSON テーブルの推論]** を **OFF** にし、**Power BI Desktop** を再起動しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/9c03e5d9-f79f-a04a-9ba2-3a60e75cc1f2.png)
**Power BI Desktop** を再起動したら、先ほどと同様に **[Web]** コネクタを選択して以下の **URL** を指定してみてください。

```:decode2020のセッションリストURL
https://www.microsoft.com/ja-jp/events/decode/2020session/export.asmx/JSON
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/329b72f8-036e-6109-256f-d06bd96eae23.png)
はい、上記の画像のようになったはずです。明らかに先ほどと違いますよね？

### JSON の確認
ここでちょっと今回読み込んでいる **JSON** の確認をしておきましょう。
以下はダウンロードした JSON ファイルを **Visual Studio Code** で開いた画像です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/c9a4c31e-c7b5-022c-601c-323e0ad15d11.png)
**JSON** が読める人なら説明は不要ですが、この **JSON** は 2 行目の **"SessionList"** という配列（リスト）の中に1セッションごとのデータが含まれています。

4行目の **"Session"** から 47 行目の閉じカッコ **}** までが **"Session"** という Key で表されるデータ（オブジェクト）です。
その中に

- **"Language"**
- **"MainSpeaker"**
- **"REfLinks"**
- **"SessionDetails"**
- など

などが続きます。これが **Power BI Desktop** で読み込んだ際の **列（カラム）**になります。**Language** や **MainSpeaker** はオブジェクトで保持していますので、これらは **Power BI** の **Power Query エディター**で読み込むと **Record** 型 として認識がされます。一方、**RefLinks, SubSpeakerList, TargetList, TopicList** などは配列としてオブジェクトを保持していますので、これらは **Power Query エディター**で読み込むと **List** 型 になります。

これらを覚える必要はなく、**JSON** が読める人はなんとなく、**「ほぉー、そんなもんか」**と思ってもらえればよいですし、**JSON** がよくわからないという人もまた**「ふーん、なんかそんな感じなのね」**で十分です。もし興味がわいたら、**JSON** を勉強してみてください。わからないよりわかった方が、便利なのは確かです。

## **[JSON テーブルの推論]** の **ON** と **OFF** の比較
ではもういちど **Power Query** で読み込んだ直後をそれぞれのパターンで比較してみましょう。
マシンスペックが許す方は、先ほど保存した**「JSON テーブルの推論_ON.pbix」**を開いてください。
**Power BI Desktop** が起動したらリボンの **[データの変換]** をクリックしてください。**Power Query エディター** が開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/68ce5f35-5347-fa13-b573-cb1f6259b3d5.png)


**[JSON テーブルの推論]** が **ON** の場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/4dd38542-e212-4334-64f1-9a2a56dfca01.png)
**[JSON テーブルの推論]** が **OFF** の場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/a18d01a9-11f8-bd65-ce50-afea0ea0ed09.png)

それぞれの結果が異なるのは一目瞭然なのですが、いったい何が違うのか？それではそれぞれのクエリを **詳細エディター** で見てみましょう。リボンにある **[詳細エディター]** をクリックしてください。

**[JSON テーブルの推論]** が **ON** の場合のクエリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/14fdf489-f5a3-73f7-eebc-f2fcf81a4041.png)
**[JSON テーブルの推論]** が **OFF** の場合のクエリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/156d1052-3264-ffb0-f817-e4d3884a798c.png)

はい、クエリを比較するとよくわかるのですが、この機能が **OFF** の場合は **Power Query** が実質 **1** 行で終わってます。

```:PowerQuery
Source = Json.Document(Web.Contents("https://www.microsoft.com/ja-jp/events/decode/2020session/export.asmx/JSON"))
```

これは指定された **URL** に **GET** メソッドで **HTTP** リクエストを出して、その結果を取得し、**Json.Document** 関数で **JSON** として処理をしています。
まぁつまり指定された **URL** から **JSON** をゲットしているわけです。

一方 **[JSON テーブルの推論]** が **ON** の場合 を見てみると 2 行目は同じなのですが、なにやらそれに続きが 7 行ほどあります。これは **OFF** の場合から順にテーブルに変換して、**JSON** を開いていく処理になります。先ほど **Visual Studio Code** で **JSON** を確認しましたが、要は **JSON** 構造を上から順に下って行って、データを開いているわけです。

これについての詳細は以下の私の **YouTube** をご覧ください。詳細に解説しています
**Power BI 王子の Tips 集 ～ セッションリストの作り方 02 ～** → https://youtu.be/elZX_fWl-jg

つまり今回新たに追加された機能 **[JSON テーブルの推論]** を **ON** にすると、動画の中で順にポチポチして、**JSON** を開いていますが、これを推測して、**Power Query** を自動生成してくれます。

**「まぁー、なんとういうことでしょう」**

便利ですねー。ただ、あくまでも **推論（推測）** なので、もしかしたら、思っているように展開してくれないこともありえます。とても複雑な **JSON** とかだと対応できない場合があるかもしれません。その場合は、この機能を **OFF** にして、上記の **YouTube** 動画のように順に試してみてください。

また、機能を **ON** にした場合の最後の **#"Changed Type"** にも注目です。**JSON** データには、数値、文字列、日付などの型情報がないため、 これまでは JSON を読み込んだら、最後に一列ずつ型を指定する必要がありました。この推論機能では、型も推測してくれていることがわかります。ただ、あくまでも推測なので、必ず意図している型になっているかは、確認してください。

# まとめ
はい、いかがでしたでしょうか？
今回は **2020年10月版** の **Power BI Desktop** に追加されたプレビュー機能 **[JSON テーブルの推論]** を試してみました。これまでと何が変わったのか、そしてどういうことに使えそうか、少しでもご理解いただけたら幸いです。

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

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