Power BI によるセンサーデータの可視化（Azure IoT Hub・Azure Stream Analytics との組み合わせ）

この記事は、以下の記事の中で進めた下準備の続きで、センサーデータを可視化する、というものです。

●Azure IoT Hub へのデータ送信と Azure Stream Analytics による可視化の下準備を試す（公式ドキュメントやサンプルをピックアップしつつ） - Qiita
　https://qiita.com/youtoy/items/0ca9be93c9189e71b5d1

可視化には Power BI を利用してみます。

なお自分の環境の事情で、「Azure を利用しているアカウント」と「Power BI を利用しているアカウント」が異なる状態で、以下の内容を行っています。

## Azure IoT Hub の下準備
[冒頭に書いていた前回の記事](https://qiita.com/youtoy/items/0ca9be93c9189e71b5d1)の手順を進めて、Azure IoT Hub へデータの送信が行えて、送信したデータが Azureポータル上で確認できる状態まで、あらかじめ進めておいてください。

## Power BI にサインインしてワークスペースを作成
### 利用のための前提条件
[前の記事の「データの可視化の下準備」の部分](https://qiita.com/youtoy/items/0ca9be93c9189e71b5d1#%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%8F%AF%E8%A6%96%E5%8C%96%E3%81%AE%E4%B8%8B%E6%BA%96%E5%82%99)で、可視化の話を少し書いていました。

その中で書いていた話の 1つに出てくる「Power BI」を利用していきます。
自分の環境では、Azure を利用しているアカウントとは別アカウントで「Power BI」を使っていきます。

Power BI を利用する際に、サインインをする必要がありますが、その際、[例えばこの「Power BI とは？」という記事の「Power BI を始めるには」という部分](https://qiita.com/yugoes1021/items/091c1732ff4b6f108877#power-bi-%E3%82%92%E5%A7%8B%E3%82%81%E3%82%8B%E3%81%AB%E3%81%AF)に書かれているとおり、「組織アカウント（Azure Active Directory で管理されているアカウント）」が必要になるようです。
（@live.jp、@outlook.jp等といったアドレスではサインインできません）

### Power BI でワークスペースを作成
Azure Stream Analytics の設定で、Power BI のワークスペースの ID が必要になるので、それを進めます。

Power BI を利用するほうのアカウントで Power BI にログインし、以下の部分から新規にワークスペースを作成しました。
 
<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">Power BI のほうで、ワークスペース作成。 <a href="https://t.co/1RJs1PDIWy">pic.twitter.com/1RJs1PDIWy</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1457176081820123140?ref_src=twsrc%5Etfw">November 7, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

作成したワークスペースの URL を見ると
　「`https://app.powerbi.com/groups/【ワークスペースの ID】/list`」
といったような内容になっているため、この「【ワークスペースの ID】」をメモしておきます。

## Azure Stream Analytics の設定
### 手順の概要
前回の記事の最後にも掲載していた、[「Azure IoT Hubに送信したデータを可視化する（Power BI編）」という記事の中の「Stream Analyticsの作成」の部分](https://qiita.com/Yokogawa_Mita/items/13c0fcf92c4802473d02#stream-analytics%E3%81%AE%E4%BD%9C%E6%88%90)や、その他、[公式ドキュメントの「Azure IoT Hub から取得したデータのリアルタイム データの視覚化 – Power BI」](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-live-data-visualization-in-power-bi)などを見つつ、以下の設定を進めてください。

- Azure Stream Analytics の作成
- Azure IoT Hub のコンシューマグループの設定
- Stream Analytics の設定
   - ストリーム入力の追加
   - Stream Analytics の出力の設定
   - クエリの設定
- Stream Analytics のジョブの開始

### Stream Analytics の出力設定の補足
Stream Analytics の出力の設定の部分については、自分の環境が[参照元として示していた記事](https://qiita.com/Yokogawa_Mita/items/13c0fcf92c4802473d02#stream-analytics%E3%81%AE%E4%BD%9C%E6%88%90)の環境と少し異なるため、手順に差異があります。それについて少しだけ補足します。

以下は、「Stream Analytics の出力設定」を新規に追加しているところです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Azure Stream Analytics の出力を、Power BI へ。 <a href="https://t.co/EJhSFpkHQf">pic.twitter.com/EJhSFpkHQf</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1457171347184840704?ref_src=twsrc%5Etfw">November 7, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以下の「接続を承認する」という赤枠で囲んだ部分から、「Power BI を利用するアカウント」でサインインします。
その後、以下の「グループ ワークスペース」と書かれた部分は、上記の「Power BI でワークスペースを作成」の手順で書いていた「【ワークスペースの ID】」を入力する形になります。

<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">このあたりを設定していく <a href="https://t.co/mb9VkfuKUE">pic.twitter.com/mb9VkfuKUE</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1457175978946355207?ref_src=twsrc%5Etfw">November 7, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### Azure Stream Analytics上で入力データの確認
Azure Stream Analytics　のクエリを設定する手順のところで、入力データやクエリの実行結果を確認する話について、ここで触れておきます。

入力については、以下の画像で示した「入力のプレビュー」という部分を選ぶことで確認できます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Azure IoT Hub に送られたデータ、Azure Stream Analytics で受けとれているっぽい。 <a href="https://t.co/uAGqXX4TLD">pic.twitter.com/uAGqXX4TLD</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1457187123577065475?ref_src=twsrc%5Etfw">November 7, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### Azure Stream Analytics でのクエリの設定
[公式ドキュメントの「Azure IoT Hub から取得したデータのリアルタイム データの視覚化 – Power BI」の中の「Stream Analytics ジョブのクエリの構成」の部分](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-live-data-visualization-in-power-bi#configure-the-query-of-the-stream-analytics-job)で書かれた内容をもとに、クエリを書きかえます。

```sql
SELECT
    *
INTO
    "【ジョブの出力エイリアス】"
FROM
    "【ジョブの入力エイリアス】"
WHERE temperature IS NOT NULL
```

自分は、ジョブの入力エイリアスと出力エイリアスのそれぞれで「ハイフン（-）」を含めた名前にしていたため、それぞれの文字列を「ダブルクォーテーション（"）」で囲んでいます。

### Azure Stream Analytics上でクエリのテスト
クエリのテストは、画面上部の「クエリのテスト」と書かれた部分を押し、その後に以下の赤矢印で示している「テスト結果」の部分を選択することで確認できます。

<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">Azure IoT Hub ⇒ Azure Stream Analytics と流れてきたデータに対するクエリのテスト結果、うまく動いているっぽい。 <a href="https://t.co/ic3VCXtXNz">pic.twitter.com/ic3VCXtXNz</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1457187308252270598?ref_src=twsrc%5Etfw">November 7, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### Power BI での可視化の結果
上記の手順を進めて、「Stream Analytics のジョブの開始」を行った後に、何らかAzure IoT Hub へデータを送ってやれば、以下のように Power BI へデータが流れてくるのが確認できます。

<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">Power BI のほうに、データが来た。 <a href="https://t.co/JzKDQkFAT2">pic.twitter.com/JzKDQkFAT2</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1457188738862239755?ref_src=twsrc%5Etfw">November 7, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

後は、Power BI　上でデータの可視化を行います。
[公式ドキュメントの「Azure IoT Hub から取得したデータのリアルタイム データの視覚化 – Power BI」の中の「データを視覚化する Power BI レポートの作成と公開](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-live-data-visualization-in-power-bi#create-and-publish-a-power-bi-report-to-visualize-the-data)で書かれた手順を進め、折れ線グラフを作成します。

以下は温湿度の時系列データを折れ線グラフにした時の、画面全体の様子です。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Azure IoT Hub で受けた温湿度の値（Node.js で作ったダミーデバイス的なものから送った時系列データ）を、Power BI の上で折れ線グラフにできた！<a href="https://twitter.com/hashtag/Azure?src=hash&amp;ref_src=twsrc%5Etfw">#Azure</a> <a href="https://t.co/YoSxfT7m3G">pic.twitter.com/YoSxfT7m3G</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1457193407055482881?ref_src=twsrc%5Etfw">November 7, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

グラフの部分のみを取り出すと、以下のようになりました。
![温湿度の可視化（グラフの部分のみ）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/03253e64-7c49-b4d1-8e7d-92032b9a705a.jpeg)

## おわりに
Azure IoT Hub に送られたセンサーデータ（温湿度のデータ）を、Azure Stream Analytics を介して Power BI に送り、それを折れ線グラフにすることができました。

今回、センサーデータの部分は、Node.js で作ったダミーデバイス的なプログラムを使い、乱数を混ぜ込んだダミーの温湿度の値を送りました（そのため、短い時間でけっこうな変化が生じています）。
今後は、例えば以下のような実際のデバイスで計測したデータをもとに、この可視化の仕組みを動かしてみようと思います。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">GR-ROSE と「Grove - CO2 &amp; Temperature &amp; Humidity Sensor (SCD30) 」の接続はスルーホール用テストワイヤを使い、差し込み式で接続してる。 <a href="https://t.co/hA2wu3KYw3">https://t.co/hA2wu3KYw3</a> <a href="https://t.co/WbV3yNgNB6">pic.twitter.com/WbV3yNgNB6</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1454448956109312001?ref_src=twsrc%5Etfw">October 30, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>