Azure IoT Hubで収集したデータをPowerBIで可視化してみた

2022.08.09

こんにちは。CX事業本部Delivery部のakkyです。

前回の記事では、Azure IoT HubへMQTTでデータを収集するところまでを行いました。今回はIoT Hubで収集したデータをPower BIで可視化してみましたので、ご紹介します。

IoT Hubの設定

まず、IoT Hubにコンシューマグループ(受信クライアントの接続先)を用意します。

ハブ設定→組み込みのエンドポイントを開き、コンシューマーグループの「新しいコンシューマーグループを作成する」のテキストボックスに適当な名前を入力します。今回はakky-consumer-groupとしました。

IoT Hubの設定は以上です。

Azure Stream Analyticsの設定

次に、Stream Analyticsを設定します。Stream Analyticsはストリーミングメッセージの中継や加工を行うサービスです。

Stream Analyticsジョブの追加

Azure PortalからStream Analytics ジョブを選択し(クラスターのほうではありません)、作成をクリックします。名前は任意の物を付けます。リソースグループと場所はIoT Hubと同じものを選んでください。

作成が完了したらリソースを開いてください。

ジョブ トポロジの設定

メッセージの入力・加工・出力を担うジョブ トポロジを設定していきます。

まずは入力です。ジョブ トポロジ→入力を選択し、ストリーム入力の追加をクリックします。IoT Hub、コンシューマーグループ、共有アクセスポリシー名、イベントシリアル化形式を選択します。共有アクセスポリシーはいったんiothubownerにしました。

 

次にジョブ トポロジ→出力を選択し、追加→PowerBIを選択します。(PowerBIアカウントは事前に作成しておいてください)

出力エイリアス、データセット名、テーブル名を入力して、認証モードはユーザートークンのままにして、承認をクリックします。今回は出力エイリアスをPowerBIVisualizationOutputにしました。

最後にジョブ トポロジ→クエリを選択します。クエリには以下の内容を入力します。[PowerBIVisualizationOutput]と[iothub-stream]はそれぞれ出力と入力の名前に置き換えます。

今回は、チュートリアルの内容に加えて、PowerBIでデバイス名で絞り込みできるように送信元デバイス名を加えました。また、日時を日本時間で表示できるよう、UTC時間に+9した日本時間を追加しました。

SELECT
    *,
    IoTHub.ConnectionDeviceId AS DeviceID,
    DATEADD(hour, 9, EventEnqueuedUtcTime) As JSTTime
INTO
    [PowerBIVisualizationOutput]
FROM
    [iothub-stream]

編集が完了したらクエリの保存をクリックします。その後、メニューから概要を選択し、開始をクリックして完了です。

PowerBIの設定

PowerBIを開き、作成を選択し、「発行されたデータセットの選択」をクリックすると、Stream Analyticsから送信されるようにしたデータセットが表示されます(作成直後はしばらく待ってください)

作成をクリックすると新規作成画面になります。今回はtemperatureとhumidityがセンサーから送信されています。

ではグラフを作っていきます。temperatureを作業領域にドラッグアンドドロップし、次に折れ線グラフをクリックします。このままでは最新の値しか出ていません。

次にX軸としてJSTTimeをX軸に追加すると、日時が追加され、きちんとしたグラフになります。ここでグラフを大きくしておきます。

複数のデバイスがあり、それぞれ値を表示する場合は、フィールドからDeviceIDをフィルターにドラッグアンドドロップすると、表示するデバイスを選択することができます。

最新データのみを表示したい場合は、JSTTimeでフィルターできればいいのですが、PowerBIが日時をUTCで扱っている都合上うまくいきません。そこで、若干面倒ですが、フィールドからEventEnqueuedUtcTimeをフィルターにドラッグアンドドロップし、こちらをフィルターに使うとうまくいきます。フィルターの種類を相対時間にして、最近1時間のデータを表示することなどが簡単にできます。

編集が完了したら、左上の保存をクリックし、名前を付けてください。

おわりに

MQTTから送信したデータをPowerBIへ送信し、可視化するところまで行いました。PowerBIは日本語化されていて、普段Excelを使っている人なら親しみやすいのではないかと思います。今後は他の可視化ツールや、CosmosDBやTable Storageなどのデータベースへの保存も試してみたいと思います。

参考資料