Azure Table Storageの情報をExcelとPower BIへインポート & グラフ化

#はじめに
本記事は[「ICカードリーダで取得した情報を4GPi経由でAzure Table Storageに保存」](https://qiita.com/vascodagama/items/1af49866d68398cc3d0d)の続編になります。
Azure Table Storageに情報を保存する方法については上記記事を参照ください。

##本記事で学べる事
ExcelおよびPowerBIにて以下の手順を紹介しています。

①Azure Table Storageの情報をインポート
②テーブルの内部結合(Power Query)
③データ列の結合(Power Query)
④折れ線グラフの作成


##Azure Table Storageとは？
Azure Table Storageとは、NoSQLの構造化データをクラウド内に格納するマネージドサービスです。
大規模な半構造化データセットを使用して迅速な開発を行うための
NoSQLキーバリューストアサービスです。

AzureにはCOSMOS DBというデータストレージもありますが、
今回は比較的安価なAzure Table Storageを使用します。

##Power BIとは？
Power BIは、情報を視覚化して分析するためのビジネスインテリジェンスです。
言い換えると、大量の情報をグラフや表など人の目に分かりやすい形で表現し、
分析するためのツールです。

Power BIはアプリやWebサイトに埋め込むことも可能ですので、
他人数での共有や拡張に自由度があるのが特徴です。
※共有には有料ライセンスが必要です。


##Azure Table Storageの情報をExcel や Power BIへインポートするのは簡単？
ExcelとPower BIのどちらもアドインのPower Queryを使用すると
簡単にデータベースやファイルの情報をインポート・加工・変換ができます。

また、MicroSoft製品であるAzureからの情報をインポートは
専用の読み込みボタンがあり、手順も簡単で1分もあれば情報をインポートできます。

#A. Azure Table Storageの情報をExcelへインポート
##Azure Table Storageのアカウントとアカウントキーを確認

データをインポートする前にAzure Table Storageのアカウントとアカウントキーを参照する必要があります。

アカウントとアカウントキーはAzureのポータル([https://portal.azure.com/](https://portal.azure.com/))から確認できます。

ポータル内で「Home -> Storage accounts -> 4gpi -> Access keys」の順にクリックして
以下画像のように表示されますので「Strage account name」と「key -> Key1」をメモします。
![2019-11-17_19h52_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/fb419e41-539a-e89b-a87e-d04450877adb.png)

##Power Queryを使用してAzure Table Storageの情報をインポート
Excelを起動し、データタブ内の「データ変換 -> Azureから -> Azure テーブル ストレージから」をクリックします。
![2019-11-17_19h37_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/a3f4c04e-5532-5a87-926b-b7edd658d529.png)

前項で確認したAzure Table Storageのアカウント名を入力し、OKをクリックします。
![2019-11-17_23h42_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/18a8a452-012b-258b-1644-9cc33ca5989b.png)


前項で確認したAzure Table Storageのアカウントキーを入力し、接続をクリックします。
![2019-11-17_19h54_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/87c571e5-d370-d4f8-b5de-b9f0a7c6193c.png)


ナビゲータが開かれるのでテーブル名(accesslog)をクリックすると情報が表示されます。
その後、データの変換をクリックします。
![2019-11-17_19h53_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/cdbf2be4-b6c1-a5df-ea22-b6aae2921353.png)

Power Queryのエディタが起動するのでContentの右にあるアイコンを押し、情報を展開し確認します。
![2019-11-17_19h55_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/789c5b0e-3d56-cbe5-75c3-5569deab2378.png)

不要な情報の列がある場合は、列自体は削除することができます。
今回はTimestampの情報を削除します。

「Timestamp」上で右クリックし、「削除」を左クリックします。
![2019-11-17_19h56_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/f5d8a1b4-77e1-302b-e99d-eeda6aa322af.png)

次にテーブル結合するためのidlistテーブルを読み込みます。
「ホームタブ -> 新しいソース -> Azure -> テーブルストレージ」をクリックします。
![2019-12-01_11h53_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/11c5f4ce-7335-7a2c-26a8-090b3890a529.png)

idlistのテーブルをクリック後、「OK」をクリックします。
![2019-12-01_11h54_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/9f0219ea-1a3e-ff74-13b2-68c73a117f0a.png)

Power Query上にidlistが読込まれるので、Contentの右にあるアイコンを右クリックし、
全てにチェックが入っていること確認したら「OK」をクリックし情報を展開します。
![2019-12-01_11h55_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/202edfb4-8e8c-e07e-7a8a-d7721456fcbe.png)

次にaccesslogとidlistのテーブルを結合します。
「ホームタブ > クエリのマージの右側の▼マーク -> 新規としてクエリをマージ」をクリックします。
![2019-12-01_11h56_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/bbfea6ee-0abf-1629-111f-6a8414714527.png)

結合したいテーブル2つ(idlistとaccesslog)を選択し、共通の項目であるRowKeyをクリックします。
結合の種類は内部を選択し、「OK」をクリックします。
![2019-12-01_11h58_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/53bfea4f-2785-fe69-51f6-4a70b7777906.png)

idlistとaccesslogのテーブルが結合されたMerge1という新しいテーブルが作成されます。
読み込んだ時点ではaccesslogの情報は省略されていますので展開しましょう。
![2019-12-01_11h59_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/a0d03b5a-ccb5-18dd-e803-1c9dbd760074.png)

すると全ての情報が展開されます。
今回はグラフ表示に必要な情報のみを表示したいので、「列の選択」をクリックします。
![2019-12-01_12h00_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/ed16f6fb-47e5-d31d-4488-2ccb0b23db27.png)

表示したい列にチェックを入れて「OK」をクリックします。
![2019-12-01_12h01_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/b0c7a3d3-22cd-c288-30bf-546904deb069.png)

次に列を結合してみましょう。
苗字と名前の列が別に存在しているので氏名として1つの列に結合させます。
Content.LastNameとContent.FisrtNameをどちらも選択状態(緑背景)にし
列を右クリックし「列のマージ」をクリックします。
![2019-12-01_12h01_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/82428131-e7f3-6b5e-67db-8049a560574e.png)

区切り記号は「スペース」し、新しい列名は「氏名」とし、「OK」をクリックします。
![2019-12-01_12h02_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/4bf4aee6-f9f6-d0fe-8107-7bf1315c6a2b.png)

「閉じて読み込む」をクリックします。
![2019-12-01_12h03_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/39e13e00-3187-7ed1-f2f3-be32440ef2ca.png)

エクセルのシートにクエリが読み込まれます。
![2019-12-01_22h29_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/a66d2788-8be7-1ba6-9ad4-b46b6427856f.png)

以上でAzure Table Storageの情報をExcelへインポートが完了です。

## 折れ線グラフの作成
現状の表ではyamadaさんとsuzukiさんの勤怠情報が混ざっているため、
グラフにする際に都合が悪いです。
縦軸を日付、横軸を氏名になるように表を加工します。

「デザイン -> ピボットテーブルで集計」をクリックします。
![2019-12-01_12h04_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/19fed3b3-8e28-b547-2b5b-b48d75b940ff.png)

結合した「Merge1」のテーブルを選択し、
配置する場所は「新規ワークシート」を選択し、「OK」をクリックします。
![2019-12-01_12h04_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/a8453b18-0abc-1872-7827-b4214afc639e.png)

ウィンドウ右側に「ピボットテーブルのフィールド」が表示されますので
以下の手順でグラフを設定します。
①「氏名」をドラッグし、「列」にドロップします。
②「accesslog.PartitionKey」をドラッグし、「行」にドロップします。
③「accesslog.Content.WorkTime」をドラッグし、「値」にドロップします。
④,⑤グラフの「折れ線グラフ」をクリックします。

![2019-12-01_12h06_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/0d49c2f7-4744-c987-22dc-3293a2c16e39.png)

結果、yamadaさんとsuzukiさんの日別のWorkTimeがグラフ表示されます。
![2019-12-01_12h14_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/8370d86b-60b5-a1ec-2e49-98a228165ad2.png)

以上で折れ線グラフの作成が完了です。

#B. Azure Table Storageの情報をPower BIへインポート
##Power BI Desktopをインストール
公式サイト([https://powerbi.microsoft.com/ja-jp/desktop/](https://powerbi.microsoft.com/ja-jp/desktop/))からPower BIの無料ソフトをインストールします。

起動すると以下のような画面が表示されますので
「無料で試す」か「サインイン」もしくは「右上の×」をクリックします。

![2019-11-18_00h24_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/def6a7ec-92e7-a26c-68c5-5c025b05ef37.png)

処理が完了すると真っ白なキャンパスが表示されます。
![2019-12-01_22h53_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/1cfee5ac-229e-cae1-f373-b5e54ecc5912.png)


##Power Queryを使用してAzure Table Storageの情報をインポート
おおまかな手順はExcelと同じです。
「ホーム」タブをクリックし、「データを取得」ボタンをクリックします。

![2019-11-17_20h00_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/2627c1f8-013e-dec1-77b1-de7a0d31490a.png)

「Azure -> Azure Table Storage」をクリックし、接続をクリックします。
![2019-11-17_20h01_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/3cc06e20-d9a7-0537-9656-178f6f746f1c.png)


[「Azure Table Storageのアカウントとアカウントキーを確認」](#azure-table-storageのアカウントとアカウントキーを確認)の情報を入力していきます。

Azure Table Storageのアカウント名を入力し、「OK」をクリックします。
![2019-11-17_20h01_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/4cae0985-a860-c170-6388-17c2b0bd0900.png)


Azure Table Storageのアカウントキーを入力し、「接続」をクリックします。
![2019-11-17_20h01_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/b76040a4-5f97-c854-2b60-7bb1e0ffcaaa.png)

ナビゲータが開かれるのでaccesslogとidlistのテーブルにチェックを入れ、データの変換をクリックします。
![2019-12-01_22h56_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/98396266-0bb8-dadb-3c3e-556689b8456c.png)


Power Queryエディタが開かれるのでaccesslog,idlistともにContentの右にあるアイコンをクリックし、
全てにチェックがついているのを確認し、「OK」をクリックすると情報が展開されます。
![2019-12-01_22h57_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/183532d1-7912-0a31-7873-1c53e92bf6e8.png)
![2019-12-01_22h57_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/4085ad12-0c02-9f22-eb33-7922aab66205.png)

accesslogとidlistのテーブルを結合します。
「ホームタブ > クエリのマージの右側の▼マーク -> 新規としてクエリをマージ」をクリックします。
![2019-12-01_23h01_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/d5f42a19-1fb4-0e6e-492b-ac62d1755f3d.png)

結合したいテーブル2つ(idlistとaccesslog)を選択し、共通の項目であるRowKeyをクリックします。
結合の種類は内部を選択し、「OK」をクリックします。
![2019-12-01_22h59_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/a9a812bb-154c-e68f-1b1d-a6d1b30d8446.png)

idlistとaccesslogのテーブルが結合されたMerge1という新しいテーブルが作成されます。
読み込んだ時点ではaccesslogの情報は省略されていますので展開しましょう。
![2019-12-01_23h02_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/702322be-4270-3f3e-6a3f-f2d05e5b39b0.png)


すると全ての情報が展開されます。
今回はグラフ表示に必要な情報のみを表示したいので、「列の選択」をクリックします。
![2019-12-01_23h03_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/7d29c37a-ee44-5c9e-8918-727f56ad22c2.png)


表示したい列にチェックを入れて「OK」をクリックします。
![2019-12-01_23h03_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/496959e2-84ca-898d-d5cc-1b04be1f3270.png)

次にExcelの手順同様に列を結合してみましょう。
苗字と名前の列が別に存在しているので氏名として1つの列に結合させます。
![2019-12-01_23h04_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/1ee35121-ae63-7b12-0ae7-e9b2db75a69d.png)


区切り記号は「スペース」し、新しい列名は「氏名」とし、「OK」をクリックします。
![2019-12-01_23h09_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/1b9e49d8-3134-327a-92e2-8c0f9d13cd28.png)

次にaccesslog.PartationKeyとaccesslog.Content.WorkTimeの型をキャストします。
※PowerBI Desktopの場合、キャストしないとグラフツールで正しくソートされません。

accesslog.PartationKeyは日付に変換します。
![2019-12-01_23h12_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/51aa5889-4229-52fa-9a11-02771a057d44.png)


accesslog.Content.WorkTimeは10進数に変換します。
![2019-12-01_23h13_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/22a037c7-f730-7c03-a4e5-e94b68e39470.png)


編集が完了したら、「閉じて適用」をクリックします。
![2019-12-02_00h30_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/e69d0b82-8e2f-405c-8dda-0a7976f5fa6b.png)


「フィルター -> 視覚化 -> フィールド」内にPower Queryエディタで編集した情報が表示されます。
![2019-12-01_23h13_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/197b318b-4aa1-af30-856f-9761b145758f.png)


以上でAzure Table Storageの情報をPower BIへインポートが完了です。

##折れ線グラフの作成

一般的な折れ線グラフを使用して情報を可視化します。

①「フィルター -> 視覚化」内の折れ線グラフのアイコンをクリックします。
②「accesslog.PartitionKey -> 日付の階層 -> 日」をドラッグし、「軸」にドロップします。
③「氏名」をドラッグし、「凡例」にドロップします。
④「accesslog.Content.WorkTime」をドラッグし、「値」にドロップします。
⑤折れ線グラフに情報が表示されるので、見やすいサイズにウィンドウを調整します。

![2019-12-01_23h15_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/cbb6892a-67cb-d476-b4a9-ad98037f5adc.png)



以上で、Power BIのグラフ化手順が完了です。

#まとめ
・ExcelとPower BIのどちらもPower Queryが備わっており、インポート自体は5～10分で完了できる。

・Power Queryを使用するとデータ加工やインポートが簡単にできる。

・Power BI Desktopは可視化するためのツールで無料である。

・Power BI Desktopで作成したグラフをチームで共有するためには別途ライセンスが必要になる。