温度データをPower BIのダッシュボードで表示（プッシュストリーミングデータセットを使用）

前回、[温度データをPower BIのダッシュボードで可視化（ストリーミングデータセットを使用）](https://qiita.com/mikawan/items/a00b19f428c84a53c4e1)を投稿いたしましたが、今回はStream Analytics経由でプッシュストリーミングデータセットを使用して、Microsoft Power BIで可視化します。

可視化までの流れは、下図のようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/fdee4997-aedb-3d16-837d-6261d91c1750.png)

#使用したもの
###ハードウェア
・Windows 10 PC（バージョン1809）
・Gravioレンタルデバイス
　-Gravioクライメートセンサー

###ソフトウェア

- Gravio
    - Gravio Studio Ver.2.2.2111.0
    - Gravio Server Ver.2.2.2354.0


###サービス
- Azure IoT Hub
- Stream Analytics
- Microsoft Power BI
Power BIサービス

Stream Analyticsの利用にはMicrosoft Azureのサブスクリプション契約が必要となります。
今回は検証用の無償試用版サブスクリプションを使用して、Stream Analyticsを利用します。

#Gravio → Azure IoT Hub の設定
Gravioで受信した温度データをAzure IoT Hubへ送信します。

##Azure IoT Hubの設定
まず、Azure IoT Hubの設定します。
設定については下記記事を参考に設定します。

[**Azure IoT HubへGravioを使って温度データをPublish<br>**Azure IoT Hubの設定](https://qiita.com/mikawan/items/caf9097ee74c1897b34c#azure-iot-hub%E3%81%AE%E8%A8%AD%E5%AE%9A)

##Gravioの設定
次に、GravioでAzure IoT Hubへ温度データを送信する設定をします。

###センサーの設定
センサーの設定については、下記記事をご参照ください。
[温度センサーのデータをエクセルで簡単に表示](https://qiita.com/mikawan/items/3d93543566680afda868#step1%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC%E3%81%AE%E8%A8%AD%E5%AE%9A)
###動作（アクション）の設定
今回設定するGravioのアクションは、CreateRecordコンポーネントで送信するレコードデータを作成し、MQTTPublishコンポーネントで作成したレコードデータをAzure IoT Hubへ送信するというものです。
送信するレコードデータは、データを収集した時間と収集した温度データの2種類です。

それでは、アクションの設定を進めていきます。
まずは、今回使用するコンポーネントを以下の手順で追加します。

1. 新規にアクションカードを作成
2. ステップの追加から、CreateRecordコンポーネントを選択
3. もう一度ステップの追加から、MQTTPublishコンポーネントを選択

続いて、追加した2つのコンポーネントに、動作に必要となる設定をしていきます。

####CreateRecordコンポーネントの設定
CreateRecordコンポーネントでレコードを作成する設定をします。
CreateRecordコンポーネントをクリックし、ステップ出力をクリックします。
右上の”＋”ボタンを2回クリックすると、ステップ出力変数が2つ追加されます。
追加された変数をダブルクリックし、それぞれに下記内容を設定します。

||出力フィールド名|タイプ|式|
|:---|:---|:---|:---|
|1|GDateTime|DateTime|av.Timestamp|
|2|Data|Double|av.Data|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/215a5ac9-8c04-523f-d899-a60dd33b9716.png)


その他のデータ（例えばセンサーIDや、データの種類など）を送信したい場合は、ステップ出力変数を追加することでPower BI サービスへデータの送信が可能です。

####MQTTPublishコンポーネントの設定
次に、MQTTPublishコンポーネントでAzure IoT Hubへデータを送信する設定をします。

まず、ステップ出力に送信するデータを追加します。
MQTTPublishコンポーネントをクリックし、ステップ入力の右にあるステップ出力へのコピーアイコンをクリックします。
ステップ出力にステップ入力変数が追加されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/308d1b9b-e780-c09c-b3f8-5702e227b652.png)

次にプロパティをクリックし、Azure IoT Coreとの接続情報を入力します。
こちらは、Azure IoT Coreの設定の際に参照した、下記記事をもとに設定します。

[**Azure IoT HubへGravioを使って温度データをPublish**<br>(2)MQTTPublishコンポーネントの設定](https://qiita.com/mikawan/items/caf9097ee74c1897b34c#2mqttpublish%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A)

以上で、動作の設定が完了しました。
続いて、動作タイミングの設定をします。
###動作タイミング（トリガー）の設定
動作タイミングの設定については、こちらの記事をご確認ください。

[**温度データをPower BIのダッシュボードで可視化（ストリーミングデータセットを使用）**<br>動作タイミング（トリガー）の設定](https://qiita.com/mikawan/items/a00b19f428c84a53c4e1#%E5%8B%95%E4%BD%9C%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC%E3%81%AE%E8%A8%AD%E5%AE%9A)

以上でAzure IoT Coreへ温度データを送信する設定が完了しました。

#Azure IoT Hub → Stream Analytics → Power BI のデータ送信設定
Azure IoT Hubで受信したデータをStream Analyticsを利用して、Power BI サービスのデータセットへ送信します。
主に、下記ドキュメントを参考に設定を進めます。

[**【Microsoft Docs】<br>Power BI を使用して Azure IoT Hub からのリアルタイム センサー データを視覚化する**](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-live-data-visualization-in-power-bi)

##Azure IoT Hubにおけるコンシューマーグループの追加
Azure IoT Hubで受信したデータをStream Analyticsで使用するために、サービス間連携の共通キーとなる”コンシューマー グループ”を作成します。

[Azure Portal](https://portal.azure.com/) で、IoT Hubを開き、左側のウィンドウで”組み込みのエンドポイント”をクリックします。
次に、右側のウィンドウの”コンシューマー グループ”に任意の名前を入力します。（今回は"graviotest"を入力しました）
コンシューマー グループの作成による変更のみでは保存できないため、”既定の TTL”の値を変更し元の値に戻すことで保存ボタンを有効にします。
その後、”保存”をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/d6024210-ff66-f0bc-c3a9-3dc6b61b2412.png)

##Steram Analyticsのジョブの作成、構成、実行
Stream Analytics上で、Azure IoT Hubで受信したデータをPower BIのデータセットへ送信する設定をします。　
###Stream Analyticsのジョブの作成
まずは、Stream Analytics上に新しいジョブを作成します。
[Azure Portal](https://portal.azure.com/)で、"リソースの設定">"モノのインターネット”>”Stream Analytics ジョブ”の順にクリックします。

"追加"をクリックし、表示される”新しい Stream Analytics ジョブ”で下記情報入力後に”作成”をクリックします。

|項目|設定内容|設定例|
|:----|:----|:----|
|ジョブ名|ジョブの名前（任意）|graviotest1|
|サブスクリプション|契約しているサブスクリプション|無償使用版|
|リソース グループ|IoT Hubと同じリソース グループ|graviotest|
|場所|リソース グループと同じ場所|東日本|
|ホスティング環境|ジョブを動作させる環境の指定|クラウド(Default)|
|ストリーミングユニット|クエリの演算に使用するリソース量|3(Default)|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/e90cd412-e16b-5522-ef8c-f9d9270861e6.png)

作成が完了すると、下記画面が表示されますので、"リソースへ移動"をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/31692fbb-d928-9036-8823-bbb8dbef606c.png)

###ジョブの入力を追加
次に、IoT Hubからのデータをジョブの入力に追加します。
作成したジョブのリソース画面から、"入力"＞"ストリーム入力の追加"＞"IoT Hub"の順でクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/3011e103-b8d2-85f2-0bbb-07e5f1b5e7ce.png)

下記情報を入力し、"保存"をクリックします。

|項目|設定内容|設定例|
|:----|:----|:----|
|入力エイリアス|入力の名前（任意）|graviotest|
|ラジオボタン|-|サブスクリプションから IoT Hub を選択する|
|サブスクリプション|契約しているサブスクリプション|無償試用版|
|IoT Hub|IoT Hub名|graviotest3|
|エンドポイント|-|メッセージング|
|共有 アクセス ポリシー名|IoT Hubで設定しているアクセスポリシー|iothubowner|
|コンシューマー グループ|先ほどと同じコンシューマー グループ|graviotest|
|イベントシリアル方式|シリアルデータの方式|JSON|
|エンコード|入力される文字コードを指定|UTF-8|
|イベントの圧縮タイプ|－|なし|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/296e03a8-769d-dc05-67b8-2e19c351f77f.png)

###ジョブの出力を追加
次に、ジョブの出力にPower BI サービスを追加します。
"出力"＞"追加"の順でクリックし、表示される出力に関する設定画面で下記情報を入力します。

|項目|設定内容|設定例|
|:----|:----|:----|
|出力エイリアス|入力の名前（任意）|graviotest2|
|グループ ワークスペース|-|-|
|データセット名|Power BI サービス内に作成するデータセット名（任意）|graviotest2|
|テーブル名|データセット内に作成されるテーブル名（任意）|temperature|

その後、Power BI サービスと接続するために、"承認する"をクリックし、立ち上がる別ウィンドウでPower BI サービスのアカウント情報を入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/f5787922-d7a5-f599-6dd2-ed5cbfa2d1a9.png)

接続完了後、右下の保存ボタンをクリックします。

###クエリの設定
入力されたデータを出力先へ送信する設定をします。
"クエリ"をクリックし、表示させるクエリ文に下記コードを入力します。

```
SELECT
GDateTime,
Data
INTO
graviotest2
FROM
graviotest
```

SELECTでは送信するデータ項目を、INTOには送信先の出力エイリアス、FROMにはデータの入力元となる入力エイリアスを指定します。

変更後、"保存"をクリックします。

###ジョブの実行
最後に、作成したジョブを有効にします。
"概要"＞"開始"＞"現在"＞右下に表示される"開始"の順でクリックします。
開始されるまでに2分程度かかりました。

ここまでで、データ送信に関する設定がすべて完了し、温度データを収集するとPower BIにデータが送信されます。

#データの確認
データセットの画面からレポートを作成し、データを確認します。

Power BI サービスの画面より、"マイワークスペース"＞"データセット"の順でクリックし、作成したデータセットのグラフアイコン（レポートの作成）をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/162b8985-71e2-97fc-dda8-c4874ce0e7f6.png)

レポート作成画面で、テーブルアイコンをクリックします。
フィールドのリストから、"gdatetime"と"data"を値へドラッグアンドドロップします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/0fb34436-24db-172e-5028-eb31a0819f21.png)

テーブルに値が表示されていることが確認できます。

なお、レポート作成画面で、様々な可視化、分析機能を利用できます。
さらに、こちらで作成した各種グラフや分析結果をダッシュボードのタイルに表示することも可能です。

私が作成してみたダッシュボードは下記イメージです。
4つの会議室にクライメートセンサーを設置し、温湿度データのリアルタイム表示と、温度データの推移を表示しています。
グラフでは、過去5日間のデータを表示しています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/08b56f1c-12ec-5c7c-ac26-f61aea61ea16.png)


#あとがき

今回は、Stream Analyticsを使用してPower BIのプッシュストリーミングデータセットに送信したデータの可視化を実現しました。
今後、Power BI サービスのAPI機能でプッシュデータセットを利用する方法を検証していきます。