テーブルをバイナリ（JSON）化したり、テーブルに戻したり

Power Query記事を書く際のサンプルデータをコード化するのによく使っているやり方です。単純にJSON文字列が欲しいときにも、役立つかもしれません。

#テーブルからバイナリ文字列に変換する
##全工程をまとめたコードの様子

```
let
    //ブック内のシートの取り込み
    Source = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"A", Int64.Type}, {"B", Int64.Type}, {"C", Int64.Type}}),
    
    //以下、変換作業
    Custom1 = Json.FromValue(#"Changed Type"),
    Custom2 = Binary.Compress(Custom1,Compression.Deflate),
    Custom3 = Binary.ToText(Custom2)
in
    Custom3
```

##解説
###1.出発点
こういうExcelテーブルがあるとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/a6b36d83-85eb-8fac-e3c9-fcd182e9437f.png)

###2.Power Queryで取り込む
ここまではお馴染みのはず。不明であれば[公式の記事](https://support.office.com/ja-jp/article/excel-%E8%A1%A8%E3%81%BE%E3%81%9F%E3%81%AF%E7%AF%84%E5%9B%B2%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B-power-query-67538004-cd12-4b61-9cee-8720db1c7136)を見てください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/b2269789-886d-7401-0401-fd68e824b6de.png)

###3.JSON化する
数式バー左端の「fx」ボタンを押してから、次のようなコードに書きかえます。
※「#"Changed Type"」は前のステップ名。適宜変えてください。
※JSONに変換する、っていうメニューをどこかのバージョンで見たような気がするのですが、手元の365ではないみたいです。

```
= Json.FromValue(#"Changed Type")
```
↓fxボタンを押した後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/df099ece-88fa-07f8-4c13-41368170f1aa.png)


↓コード打った後の画面の様子（これでもう、binaryになってます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/e7806eb1-c73e-5ae3-d605-3f889d8a976d.png)

###4.binaryを圧縮する
今回の例程度のデータなら圧縮不要ですけど、一般には長くなるので、圧縮すべきです。
同じく、「fx」ボタンから次のようなコードを入力。
※Custom1は前のステップ名です。
※第二引数は詳しくないので、解説できません。僕はいつもこちらの種類で圧縮します。

```
= Binary.Compress(Custom1,Compression.Deflate)
```

###5.文字列で取り出す
binaryは文字列か整数のリストにできます。ここは文字列にします。

```
= Binary.ToText(Custom2)
```
↓こんな具合に文字列が出る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/36a19539-fe2d-9e57-15b3-15fd677d012e.png)





#バイナリ文字列からテーブルへ
###1.文字列を貼る
空のクエリを作って、数式バーに貼ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/43af52f0-0d6d-99e2-35eb-dd12fa981c83.png)

###2.binaryに戻す
バイナリ文字列とbinary型データは行ったり来たりできます。（整数のリストでも同様）
またまた「fx」ボタンを押して、コードを入れます。

```
= Binary.FromText(Source)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/6eb9f6cb-9840-13c9-af3e-771229054bd8.png)

###3.圧縮を戻す
同様に数式バーに入力します。第二引数は圧縮操作したときのものとそろえないといけません。

```
= Binary.Decompress(Custom1,Compression.Deflate)
```
ここまでくると、エディタ側が変換しうるデータとして認識してくれ、JSON解釈するメニューが出てくれます。（下図は右クリックした状態）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/7aa73ba2-77f8-42b5-a654-7fdc5fde5de0.png)

###4.テーブル化
残念ながらUI一発ではテーブルにならないので、テーブル化するよう、数式バーの中身を書きかえます。
※UI操作でも手数をかければ、同様の結果となります。

```
= Table.FromRecords(Json.Document(Custom2,932))
```

↓JSON解釈をかけただけの状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/57a32545-2707-7ec1-3fdf-7bdc74d15e2a.png)
↓コードを書き換えた後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/d50d89e4-6e43-d2fc-844e-7656706b706a.png)

#おまけ：JSON文字列を得る
「テーブルからバイナリ文字列に変換する」の工程3のところから、下記のような具合でJSON文字列を得ることもできます。

###1.右クリックして、テキストにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/c9f1a0bc-235d-64ba-7532-b948e67fd2d2.png)
↓実行後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/e56ced73-d3d0-777e-e114-a571dd522e8b.png)

###2.ドリルダウン
↓データに対して右クリックした様子
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/63a30442-e412-7a8b-d508-b1df68d92275.png)

↓結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/74d3e792-d495-ee4e-50f4-5d553bf52a9b.png)