チュートリアル:Azure IoT Central からデータをエクスポートし、Power BI で分析情報を視覚化する
前の 2 つのチュートリアルでは、ストア内の分析 - チェックアウト アプリケーション テンプレートを使用して、IoT Central アプリケーションを作成し、カスタマイズしました。 このチュートリアルでは、デバイスから収集されたテレメトリをエクスポートするように、IoT Central アプリケーションを構成します。 その後、Power BI を使用して、店のマネージャーがテレメトリから得られた分析情報を視覚化するためのカスタム ダッシュボードを作成します。
このチュートリアルでは、以下の内容を学習します。
- テレメトリをイベント ハブにエクスポートするように IoT Central アプリケーションを構成します。
- Logic Apps を使用して、イベント ハブから Power BI ストリーミング データセットにデータを送信します。
- ストリーミング データセットのデータを視覚化するための Power BI ダッシュボードを作成します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- 前の 2 つのチュートリアル「Azure IoT Central でストア内分析アプリケーションを作成する」と「Azure IoT Central でのダッシュボードのカスタマイズと、デバイスの管理」を完了していること。
- Power BI アカウント Power BI アカウントを持っていない場合は、始める前に無料の Power BI Pro 試用版にサインアップしてください。
リソース グループを作成する
イベント ハブとロジック アプリを作成する前に、リソース グループを作成して管理する必要があります。 そのリソース グループは、ストア内の分析 - チェックアウト IoT Central アプリケーションと同じ場所に存在する必要があります。 リソース グループを作成するには:
- Azure portal にサインインします。
- 左側のナビゲーションで、 [リソース グループ] を選択します。 その後、 [追加] を選択します。
- [サブスクリプション] で、IoT Central アプリケーションの作成に使用した Azure サブスクリプションの名前を選択します。
- [リソース グループ] の名前として、「retail-store-analysis」と入力します。
- [リージョン] で、IoT Central アプリケーションに対して選択したのと同じリージョンを選択します。
- [確認および作成] を選択します。
- [確認および作成] ページで、 [作成] を選択します。
これで、サブスクリプションに retail-store-analysis という名前のリソース グループが作成されました。
イベント ハブの作成
テレメトリをエクスポートするようにリテール監視アプリケーションを構成する前に、エクスポートされたデータを受け取るイベント ハブを作成する必要があります。 次の手順では、イベント ハブを作成する方法を示します。
- Azure portal で、画面の左上にある [リソースの作成] を選択します。
- [Marketplace を検索] に「Event Hubs」と入力し、Enter キーを押します。
- [Event Hubs] ページで [作成] を選択します。
- [名前空間の作成] ページで、次の手順のようにします。
- 名前空間の一意の名前を入力します (yourname-retail-store-analysis など)。 この名前を使用できるかどうかが確認されます。
- [Basic] 価格レベルを選択します。
- IoT Central アプリケーションの作成に使用したものと同じ [サブスクリプション] を選択します。
- retail-store-analysis リソース グループを選択します。
- IoT Central アプリケーションに使用したものと同じ場所を選択します。
- [作成] を選択します システムによってリソースが完全にプロビジョニングされるまで、数分間待たなければならない場合があります。
- ポータルで、retail-store-analysis リソース グループに移動します。 デプロイが完了するまで待ちます。 場合によっては、 [最新の情報に更新] を選択してデプロイの状態を更新する必要があります。 また、 [通知] で、イベント ハブ名前空間の作成の状態を確認することもできます。
- retail-store-analysis リソース グループで、 [Event Hubs 名前空間] を選択します。 ポータルで Event Hubs 名前空間のホーム ページが表示されます。
IoT Central から接続するには、送信アクセス許可を持つ接続文字列が必要です。 接続文字列の作成方法:
- Azure portal の Event Hubs 名前空間で、[共有アクセス ポリシー] を選択します。 ポリシーの一覧には、既定の RootManageSharedAccessKey ポリシーが含まれています。
- [+ 追加] を選択します。
- ポリシー名として「SendPolicy」と入力し、[送信] を選択してから、[作成] を選択します。
- ポリシーの一覧で [SendPolicy] を選択します。
- 接続文字列 - 主キーの値をメモします。 これは、IoT Central でエクスポート先を構成するときに使用します。
ロジック アプリからイベント ハブに接続するには、管理とリッスンのアクセス許可を持つ接続文字列が必要です。 接続文字列の取得方法:
- Azure portal の Event Hubs 名前空間で、[共有アクセス ポリシー] を選択します。 ポリシーの一覧には、既定の RootManageSharedAccessKey ポリシーが含まれています。
- ポリシーの一覧で RootManageSharedAccessKey を選択します。
- 接続文字列 - 主キーの値をメモします。 イベント ハブからテレメトリをフェッチするようにロジック アプリを構成するときに使用します。
Event Hubs 名前空間が作成されたので、IoT Central アプリケーションで使用するイベント ハブを作成できます。
- ポータルの Event Hubs 名前空間のホーム ページで、 [+ イベント ハブ] を選択します。
- [イベント ハブの作成] ページで、名前として「store-telemetry」と入力し、 [作成] を選択します。
これで、IoT Central アプリケーションからのデータ エクスポートを構成するときに使用できるイベント ハブが作成されました。
データのエクスポートを構成する
イベント ハブを作成したので、接続されているデバイスからテレメトリをエクスポートするように、ストア内の分析 - チェックアウト アプリケーションを構成できます。 次の手順では、エクスポートを構成する方法を示します。
- ストア内の分析 - チェックアウト IoT Central アプリケーションにサインインします。
- 左側のウィンドウで、 [データのエクスポート] を選択します。
- [+ 新しいエクスポート] を選択します。
- エクスポート名として「Telemetry Export」と入力します。
- エクスポートするデータの種類として [テレメトリ] を選択します。
- [宛先] セクションで、[新規作成] を選択します。
- 宛先名として「ストア データ イベント ハブ」と入力します。
- 宛先の種類として [Azure Event Hubs] を選択します。
- 認可の種類として [接続文字列] を選択します。
- イベント ハブの作成時に保存した SendPolicy の接続文字列を貼り付けます。
- イベント ハブとして「store-telemetry」と入力します。
- [作成] を選択して、[保存] します。
- [テレメトリのエクスポート] ページで、エクスポートの状態が [正常] に変わるのを待ちます。
データのエクスポートでイベント ハブへのテレメトリの送信が開始されるまで、数分かかる場合があります。 [データのエクスポート] ページで、エクスポートの状態を確認できます。
Power BI のデータセットを作成する
Power BI ダッシュボードには、リテール監視アプリケーションからのデータが表示されます。 このソリューションでは、Power BI ダッシュボードのデータ ソースとして Power BI ストリーミング データセットを使用します。 このセクションでは、ロジック アプリでイベント ハブからのデータを転送できるように、ストリーミング データセットのスキーマを定義します。 次の手順では、環境センサー用の 2 つのストリーミング データセットと、混雑状況センサー用の 1 つのストリーミング データセットを作成する方法について説明します。
Power BI アカウントにサインインします。
[ワークスペース] を選択し、 [ワークスペースの作成] を選択します。
[ワークスペースの作成] ページで、 [ワークスペース名] として「In-store analytics - checkout」と入力します。 [保存] を選択します。
ワークスペース ページで、+ 新規 > ストリーミング データセットを選択します。
[新しいストリーミング データセット] ページで [API] を選択し、 [次へ] を選択します。
[データセット名] として「Zone 1 sensor」と入力します。
[ストリームからの値] に、次の表の 3 つの値を入力します。
値の名前 値の型 Timestamp DateTime 湿度 Number 気温 Number [履歴データの解析] をオンにします。
[作成] を選択し、 [完了] を選択します。
Zone 1 sensor ストリーミング データセットと同じスキーマおよび設定を使用して、Zone 2 sensor という名前の別のストリーミング データセットを作成します。
これで、2 つのストリーミング データセットが作成されます。 ロジック アプリは、インストア アナリティクス - チェックアウト アプリケーションに接続された 2 つの環境センサーからのテレメトリを、これら 2 つのデータセットにルーティングします。
Power BI ではストリーミング データにフィルターを適用できないため、このソリューションでは、センサーごとに 1 つのストリーミング データセットを使用します。
混雑状況テレメトリ用のストリーミング データセットも必要です。
ワークスペースのページで、[作成] > [ストリーミング データセット] を選択します。
[新しいストリーミング データセット] ページで [API] を選択し、 [次へ] を選択します。
[データセット名] として「Occupancy sensor」と入力します。
[ストリームからの値] に、次の表の 5 つの値を入力します。
値の名前 値の型 Timestamp DateTime Queue Length 1 Number Queue Length 2 Number Dwell Time 1 Number Dwell Time 2 Number [履歴データの解析] をオンにします。
[作成] を選択し、 [完了] を選択します。
これで、シミュレートされた混雑状況センサーの値を格納する 3 番目のストリーミング データセットが作成されました。 このセンサーでは、店内の 2 つのレジの待ち行列の長さと、これらの列で客が待っている時間の長さが報告されます。
ロジック アプリを作成します
このソリューションでは、ロジック アプリによってイベント ハブからテレメトリを読み取り、データを解析し、作成した Power BI ストリーミング データセットにそれを送信します。
ロジック アプリを作成する前に、「Azure IoT Central でストア内分析アプリケーションを作成する」チュートリアルで IoT Central アプリケーションに接続した 2 つの RuuviTag センサーのデバイス ID が必要です。
- ストア内の分析 - チェックアウト IoT Central アプリケーションにサインインします。
- 左側のウィンドウで [デバイス] を選択します。 次に、RuuviTag を選択します。
- [デバイス ID] を記録しておきます。 次のスクリーンショットでは、ID は 8r6vfyiv1x と 1rvfk4ymk6z です。
次の手順では、Azure portal でロジック アプリを作成する方法を示します。
- Azure portal にサインインし、画面の左上にある [リソースの作成] を選択します。
- [Marketplace を検索] に「Logic App」と入力し、Enter キーを押します。
- [Logic App] ページで、 [作成] を選択します。
- [作成] ページで、次の手順を実行します。
- ロジック アプリの一意の名前を入力します (yourname-retail-store-analysis など)。
- IoT Central アプリケーションの作成に使用したものと同じ [サブスクリプション] を選択します。
- retail-store-analysis リソース グループを選択します。
- [種類] に [従量課金] を選択します。
- IoT Central アプリケーションに使用したものと同じ場所を選択します。
- [作成] を選択します システムによってリソースが完全にプロビジョニングされるまで、数分間待たなければならない場合があります。
- Azure portal で新しいロジック アプリに移動します。
- [Logic Apps デザイナー] ページで、下にスクロールして [空のロジック アプリ] を選択します。
- [コネクタとトリガーを検索する] に、「Event Hubs」と入力します。
- [トリガー] で、 [When events are available in Event Hub](イベント ハブでイベントを使用できるとき) を選択します。
- 接続名として「Store telemetry」と入力します。
- 認証の種類として [アクセス キー] を選択します。
- 前にメモした RootManageSharedAccessKey ポリシーのイベント ハブ接続文字列を貼り付け、[作成] を選択します。
- [When events are available in Event Hub]\(イベント ハブでイベントを使用できるとき\) アクションで、次のようにします。
- [イベント ハブ名] で、store-telemetry を選択します。
- [コンテンツ タイプ] で、 [application/json] を選択します。
- [間隔] を 3 に設定し、 [頻度] を秒に設定します
- [保存] を選択して、ロジック アプリを保存します。
ロジックをロジック アプリの設計に追加するには、 [コード ビュー] を選択します。
"actions": {},
を次の JSON に置き換えます。 その後、2 つのプレースホルダー[YOUR RUUVITAG DEVICE ID 1]
と[YOUR RUUVITAG DEVICE ID 2]
を、2 つの RuuviTag デバイスの ID に置き換えます。 この ID は、前にメモしてあります。"actions": { "Initialize_Device_ID_variable": { "inputs": { "variables": [ { "name": "DeviceID", "type": "String" } ] }, "runAfter": {}, "type": "InitializeVariable" }, "Parse_Telemetry": { "inputs": { "content": "@triggerBody()?['ContentData']", "schema": { "properties": { "deviceId": { "type": "string" }, "enqueuedTime": { "type": "string" }, "telemetry": { "properties": { "DwellTime1": { "type": "number" }, "DwellTime2": { "type": "number" }, "count1": { "type": "integer" }, "count2": { "type": "integer" }, "humidity": { "type": "number" }, "temperature": { "type": "number" } }, "type": "object" }, "templateId": { "type": "string" } }, "type": "object" } }, "runAfter": { "Initialize_Device_ID_variable": [ "Succeeded" ] }, "type": "ParseJson" }, "Set_Device_ID_variable": { "inputs": { "name": "DeviceID", "value": "@body('Parse_Telemetry')?['deviceId']" }, "runAfter": { "Parse_Telemetry": [ "Succeeded" ] }, "type": "SetVariable" }, "Switch_by_DeviceID": { "cases": { "Occupancy": { "actions": {}, "case": "Occupancy" }, "Zone 2 environment": { "actions": {}, "case": "[YOUR RUUVITAG DEVICE ID 2]" }, "Zone_1_environment": { "actions": {}, "case": "[YOUR RUUVITAG DEVICE ID 1]" } }, "default": { "actions": {} }, "expression": "@variables('DeviceID')", "runAfter": { "Set_Device_ID_variable": [ "Succeeded" ] }, "type": "Switch" } },
[保存] を選択した後 [デザイナー] を選択して、追加したロジックのビジュアル バージョンを表示します。
[Switch by DeviceID](DeviceID で切り替え) を選択して、アクションを展開します。 次に、 [Zone 1 environment](ゾーン 1 の環境) を選択し、 [アクションの追加] を選択します。
[コネクタとアクションを検索する] に、「データセットに行を追加する」と入力します。
Power BI の [データセットに行を追加する] アクションを選択します。
[サインイン] を選択し、画面の指示に従って Power BI アカウントにサインインします。
サインイン プロセスが完了した後、 [Add rows to a dataset](データセットに行を追加する) アクションで次のようにします。
- ワークスペースとして In-store analytics - checkout を選択します。
- データセットとして Zone 1 sensor を選択します。
- テーブルとして RealTimeData を選択します。
- [新しいパラメーターの追加] を選択し、Timestamp、Humidity、Temperature の各フィールドを選択します。
- Timestamp フィールドを選択し、[動的なコンテンツ] の一覧から enqueuedTime を選択します。
- Humidity フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 次に、humidity を選択します。
- Temperature フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 次に、temperature を選択します。
[保存] を選択して変更を保存します。 [Zone 1 environment](ゾーン 1 の環境) アクションは、次のスクリーンショットのようになります。
[Zone 2 environment](ゾーン 2 の環境) アクションを選択し、 [アクションの追加] を選択します。
[コネクタとアクションを検索する] に、「データセットに行を追加する」と入力します。
Power BI の [データセットに行を追加する] アクションを選択します。
[Add rows to a dataset 2](データセット 2 に行を追加する) アクションで次のようにします。
- ワークスペースとして In-store analytics - checkout を選択します。
- データセットとして Zone 2 sensor を選択します。
- テーブルとして RealTimeData を選択します。
- [新しいパラメーターの追加] を選択し、Timestamp、Humidity、Temperature の各フィールドを選択します。
- Timestamp フィールドを選択し、[動的なコンテンツ] の一覧から enqueuedTime を選択します。
- Humidity フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 次に、humidity を選択します。
- Temperature フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 次に、temperature を選択します。
[保存] を選択して変更を保存します。
[混雑状況] アクションを選択し、[アクションの追加] を選択します。
[コネクタとアクションを検索する] に、「データセットに行を追加する」と入力します。
Power BI の [データセットに行を追加する] アクションを選択します。
[データセット 3 に行を追加する] アクションで次のようにします。
- ワークスペースとして In-store analytics - checkout を選択します。
- データセットとして [混雑状況センサー] を選択します。
- テーブルとして RealTimeData を選択します。
- [新しいパラメーターの追加] を選択し、Timestamp、Queue Length 1、Queue Length 2、Dwell Time 1 および Dwell Time 2 のフィールドを選択します。
- Timestamp フィールドを選択し、[動的なコンテンツ] の一覧から enqueuedTime を選択します。
- Queue Length 1 フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 count1 を選択します。
- Queue Length 2 フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 count2 を選択します。
- Dwell Time 1 フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 次に、DwellTime1 を選択します。
- Dwell Time 2 フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 次に、DwellTime2 を選択します。
[保存] を選択して変更を保存します。 [混雑状況] アクションは、次のスクリーンショットのようになります。
ロジック アプリは自動的に実行されます。 各実行の状態を確認するには、Azure portal でロジック アプリの [概要] ページに移動し [実行履歴] を選択します。 [最新の情報に更新] を選択して、実行の一覧を更新します。
Power BI ダッシュボードを作成する
これで、IoT Central アプリケーションからイベント ハブを通してテレメトリを送信できるようになりました。 その後、ロジック アプリによってイベント ハブ メッセージが解析され、Power BI のストリーミング データセットに追加されます。 ここでは、Power BI ダッシュボードを作成してテレメトリを視覚化します。
- Power BI アカウントにサインインします。
- [ワークスペース] > [In-store analytics - checkout] を選択します。
- + 新規 > 新しいダッシュボードを選択します。
- ダッシュボード名として「店舗分析」と入力し、 [作成] を選択します。
折れ線グラフを追加する
2 つの環境センサーの気温と湿度を示す 4 つの折れ線グラフ タイルを追加します。 次の表の情報を使用して、タイルを作成します。 各タイルを追加するには、まず編集 > タイルの追加を選択します。 [カスタム ストリーミング データ] を選択し、 [次へ] を選択します。
設定 | グラフ 1 | グラフ 2 | グラフ 3 | グラフ 4 |
---|---|---|---|---|
データセット | Zone 1 sensor | Zone 1 sensor | Zone 2 sensor | Zone 2 sensor |
視覚化の種類 | 折れ線グラフ | 折れ線グラフ | 折れ線グラフ | 折れ線グラフ |
軸 | Timestamp | Timestamp | Timestamp | Timestamp |
値 | 気温 | 湿度 | 気温 | 湿度 |
Time window (時間枠) | 約 60 分 | 約 60 分 | 約 60 分 | 約 60 分 |
タイトル | 気温 (1 時間) | 湿度 (1 時間) | 気温 (1 時間) | 湿度 (1 時間) |
サブタイトル | ゾーン 1 | ゾーン 1 | ゾーン 2 | ゾーン 2 |
次のスクリーンショットで示すのは、1 つ目のグラフの設定です。
環境データを表示するカードを追加する
2 つの環境センサーから最新の気温と湿度の値を表示する 4 つのカード タイルを追加します。 次の表の情報を使用して、タイルを作成します。 各タイルを追加するには、まず編集 > タイルの追加を選択します。 [カスタム ストリーミング データ] を選択し、 [次へ] を選択します。
設定 | カード 1 | カード 2 | カード 3 | カード 4 |
---|---|---|---|---|
データセット | Zone 1 sensor | Zone 1 sensor | Zone 2 sensor | Zone 2 sensor |
視覚化の種類 | Card | Card | Card | Card |
フィールド | 気温 | 湿度 | 気温 | 湿度 |
タイトル | 気温 (F) | 湿度 (%) | 気温 (F) | 湿度 (%) |
サブタイトル | ゾーン 1 | ゾーン 1 | ゾーン 2 | ゾーン 2 |
次のスクリーンショットで示すのは、1 つ目のカードの設定です。
レジの混雑状況データを表示するタイルを追加する
店の 2 つのレジでの待ち行列の長さと待ち時間を表示する 4 つのカード タイルを追加します。 次の表の情報を使用して、タイルを作成します。 各タイルを追加するには、まず編集 > タイルの追加を選択します。 [カスタム ストリーミング データ] を選択し、 [次へ] を選択します。
設定 | カード 1 | カード 2 | カード 3 | カード 4 |
---|---|---|---|---|
データセット | Occupancy sensor | Occupancy sensor | Occupancy sensor | Occupancy sensor |
視覚化の種類 | 集合縦棒グラフ | 集合縦棒グラフ | ゲージ | ゲージ |
軸 | Timestamp | Timestamp | 該当なし | 該当なし |
値 | Dwell Time 1 | Dwell Time 2 | Queue Length 1 | Queue Length 2 |
Time window (時間枠) | 約 60 分 | 約 60 分 | 該当なし | 該当なし |
タイトル | 待ち時間 | 待ち時間 | キューの長さ | キューの長さ |
サブタイトル | レジ 1 | レジ 2 | レジ 1 | レジ 2 |
次のスクリーンショットのように、ダッシュボード上のタイルのサイズと配置を変更します。
グラフィックス リソースを追加して、ダッシュボードをさらにカスタマイズできます。
リソースをクリーンアップする
IoT Central アプリケーションを終了したら、アプリケーションにサインインし、[アプリケーション] セクションの [管理] ページに移動すると、アプリケーションを削除できます。
アプリケーションを残すけれども、関連するコストを減らしたい場合は、テレメトリをイベント ハブに送信しているデータのエクスポートを無効にします。
Azure portal で retail-store-analysis という名前のリソース グループを削除することにより、イベント ハブとロジック アプリを削除できます。
Power BI のワークスペースの設定ページでワークスペースを削除することにより、Power BI のデータセットとダッシュボードを削除できます。