チュートリアル:Azure IoT Central からデータをエクスポートし、Power BI で分析情報を視覚化する

前の 2 つのチュートリアルでは、ストア内の分析 - チェックアウト アプリケーション テンプレートを使用して、IoT Central アプリケーションを作成し、カスタマイズしました。 このチュートリアルでは、デバイスから収集されたテレメトリをエクスポートするように、IoT Central アプリケーションを構成します。 その後、Power BI を使用して、店のマネージャーがテレメトリから得られた分析情報を視覚化するためのカスタム ダッシュボードを作成します。

このチュートリアルでは、以下の内容を学習します。

  • テレメトリをイベント ハブにエクスポートするように IoT Central アプリケーションを構成します。
  • Logic Apps を使用して、イベント ハブから Power BI ストリーミング データセットにデータを送信します。
  • ストリーミング データセットのデータを視覚化するための Power BI ダッシュボードを作成します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

リソース グループを作成する

イベント ハブとロジック アプリを作成する前に、リソース グループを作成して管理する必要があります。 そのリソース グループは、ストア内の分析 - チェックアウト IoT Central アプリケーションと同じ場所に存在する必要があります。 リソース グループを作成するには:

  1. Azure portal にサインインします。
  2. 左側のナビゲーションで、 [リソース グループ] を選択します。 その後、 [追加] を選択します。
  3. [サブスクリプション] で、IoT Central アプリケーションの作成に使用した Azure サブスクリプションの名前を選択します。
  4. [リソース グループ] の名前として、「retail-store-analysis」と入力します。
  5. [リージョン] で、IoT Central アプリケーションに対して選択したのと同じリージョンを選択します。
  6. [確認および作成] を選択します。
  7. [確認および作成] ページで、 [作成] を選択します。

これで、サブスクリプションに retail-store-analysis という名前のリソース グループが作成されました。

イベント ハブの作成

テレメトリをエクスポートするようにリテール監視アプリケーションを構成する前に、エクスポートされたデータを受け取るイベント ハブを作成する必要があります。 次の手順では、イベント ハブを作成する方法を示します。

  1. Azure portal で、画面の左上にある [リソースの作成] を選択します。
  2. [Marketplace を検索] に「Event Hubs」と入力し、Enter キーを押します。
  3. [Event Hubs] ページで [作成] を選択します。
  4. [名前空間の作成] ページで、次の手順のようにします。
    • 名前空間の一意の名前を入力します (yourname-retail-store-analysis など)。 この名前を使用できるかどうかが確認されます。
    • [Basic] 価格レベルを選択します。
    • IoT Central アプリケーションの作成に使用したものと同じ [サブスクリプション] を選択します。
    • retail-store-analysis リソース グループを選択します。
    • IoT Central アプリケーションに使用したものと同じ場所を選択します。
    • [作成] を選択します システムによってリソースが完全にプロビジョニングされるまで、数分間待たなければならない場合があります。
  5. ポータルで、retail-store-analysis リソース グループに移動します。 デプロイが完了するまで待ちます。 場合によっては、 [最新の情報に更新] を選択してデプロイの状態を更新する必要があります。 また、 [通知] で、イベント ハブ名前空間の作成の状態を確認することもできます。
  6. retail-store-analysis リソース グループで、 [Event Hubs 名前空間] を選択します。 ポータルで Event Hubs 名前空間のホーム ページが表示されます。

IoT Central から接続するには、送信アクセス許可を持つ接続文字列が必要です。 接続文字列の作成方法:

  1. Azure portal の Event Hubs 名前空間で、[共有アクセス ポリシー] を選択します。 ポリシーの一覧には、既定の RootManageSharedAccessKey ポリシーが含まれています。
  2. [+ 追加] を選択します。
  3. ポリシー名として「SendPolicy」と入力し、[送信] を選択してから、[作成] を選択します。
  4. ポリシーの一覧で [SendPolicy] を選択します。
  5. 接続文字列 - 主キーの値をメモします。 これは、IoT Central でエクスポート先を構成するときに使用します。

ロジック アプリからイベント ハブに接続するには、管理とリッスンのアクセス許可を持つ接続文字列が必要です。 接続文字列の取得方法:

  1. Azure portal の Event Hubs 名前空間で、[共有アクセス ポリシー] を選択します。 ポリシーの一覧には、既定の RootManageSharedAccessKey ポリシーが含まれています。
  2. ポリシーの一覧で RootManageSharedAccessKey を選択します。
  3. 接続文字列 - 主キーの値をメモします。 イベント ハブからテレメトリをフェッチするようにロジック アプリを構成するときに使用します。

Event Hubs 名前空間が作成されたので、IoT Central アプリケーションで使用するイベント ハブを作成できます。

  1. ポータルの Event Hubs 名前空間のホーム ページで、 [+ イベント ハブ] を選択します。
  2. [イベント ハブの作成] ページで、名前として「store-telemetry」と入力し、 [作成] を選択します。

これで、IoT Central アプリケーションからのデータ エクスポートを構成するときに使用できるイベント ハブが作成されました。

Azure portal のイベント ハブ名前空間を示すスクリーンショット。

データのエクスポートを構成する

イベント ハブを作成したので、接続されているデバイスからテレメトリをエクスポートするように、ストア内の分析 - チェックアウト アプリケーションを構成できます。 次の手順では、エクスポートを構成する方法を示します。

  1. ストア内の分析 - チェックアウト IoT Central アプリケーションにサインインします。
  2. 左側のウィンドウで、 [データのエクスポート] を選択します。
  3. [+ 新しいエクスポート] を選択します。
  4. エクスポート名として「Telemetry Export」と入力します。
  5. エクスポートするデータの種類として [テレメトリ] を選択します。
  6. [宛先] セクションで、[新規作成] を選択します。
  7. 宛先名として「ストア データ イベント ハブ」と入力します。
  8. 宛先の種類として [Azure Event Hubs] を選択します。
  9. 認可の種類として [接続文字列] を選択します。
  10. イベント ハブの作成時に保存した SendPolicy の接続文字列を貼り付けます。
  11. イベント ハブとして「store-telemetry」と入力します。
  12. [作成] を選択して、[保存] します。
  13. [テレメトリのエクスポート] ページで、エクスポートの状態が [正常] に変わるのを待ちます。

データのエクスポートでイベント ハブへのテレメトリの送信が開始されるまで、数分かかる場合があります。 [データのエクスポート] ページで、エクスポートの状態を確認できます。

Power BI のデータセットを作成する

Power BI ダッシュボードには、リテール監視アプリケーションからのデータが表示されます。 このソリューションでは、Power BI ダッシュボードのデータ ソースとして Power BI ストリーミング データセットを使用します。 このセクションでは、ロジック アプリでイベント ハブからのデータを転送できるように、ストリーミング データセットのスキーマを定義します。 次の手順では、環境センサー用の 2 つのストリーミング データセットと、混雑状況センサー用の 1 つのストリーミング データセットを作成する方法について説明します。

  1. Power BI アカウントにサインインします。

  2. [ワークスペース] を選択し、 [ワークスペースの作成] を選択します。

  3. [ワークスペースの作成] ページで、 [ワークスペース名] として「In-store analytics - checkout」と入力します。 [保存] を選択します。

  4. ワークスペース ページで、+ 新規 > ストリーミング データセットを選択します。

  5. [新しいストリーミング データセット] ページで [API] を選択し、 [次へ] を選択します。

  6. [データセット名] として「Zone 1 sensor」と入力します。

  7. [ストリームからの値] に、次の表の 3 つの値を入力します。

    値の名前 値の型
    Timestamp DateTime
    湿度 Number
    気温 Number
  8. [履歴データの解析] をオンにします。

  9. [作成] を選択し、 [完了] を選択します。

  10. Zone 1 sensor ストリーミング データセットと同じスキーマおよび設定を使用して、Zone 2 sensor という名前の別のストリーミング データセットを作成します。

これで、2 つのストリーミング データセットが作成されます。 ロジック アプリは、インストア アナリティクス - チェックアウト アプリケーションに接続された 2 つの環境センサーからのテレメトリを、これら 2 つのデータセットにルーティングします。

Power B I の Zone 1 sensor データセットを示すスクリーンショット。

Power BI ではストリーミング データにフィルターを適用できないため、このソリューションでは、センサーごとに 1 つのストリーミング データセットを使用します。

混雑状況テレメトリ用のストリーミング データセットも必要です。

  1. ワークスペースのページで、[作成] > [ストリーミング データセット] を選択します。

  2. [新しいストリーミング データセット] ページで [API] を選択し、 [次へ] を選択します。

  3. [データセット名] として「Occupancy sensor」と入力します。

  4. [ストリームからの値] に、次の表の 5 つの値を入力します。

    値の名前 値の型
    Timestamp DateTime
    Queue Length 1 Number
    Queue Length 2 Number
    Dwell Time 1 Number
    Dwell Time 2 Number
  5. [履歴データの解析] をオンにします。

  6. [作成] を選択し、 [完了] を選択します。

これで、シミュレートされた混雑状況センサーの値を格納する 3 番目のストリーミング データセットが作成されました。 このセンサーでは、店内の 2 つのレジの待ち行列の長さと、これらの列で客が待っている時間の長さが報告されます。

Power B I の混雑状況データセットを示すスクリーンショット。

ロジック アプリを作成します

このソリューションでは、ロジック アプリによってイベント ハブからテレメトリを読み取り、データを解析し、作成した Power BI ストリーミング データセットにそれを送信します。

ロジック アプリを作成する前に、「Azure IoT Central でストア内分析アプリケーションを作成する」チュートリアルで IoT Central アプリケーションに接続した 2 つの RuuviTag センサーのデバイス ID が必要です。

  1. ストア内の分析 - チェックアウト IoT Central アプリケーションにサインインします。
  2. 左側のウィンドウで [デバイス] を選択します。 次に、RuuviTag を選択します。
  3. [デバイス ID] を記録しておきます。 次のスクリーンショットでは、ID は 8r6vfyiv1x1rvfk4ymk6z です。

IoT Central アプリケーションのデバイス リストのデバイス ID を示すスクリーンショット。

次の手順では、Azure portal でロジック アプリを作成する方法を示します。

  1. Azure portal にサインインし、画面の左上にある [リソースの作成] を選択します。
  2. [Marketplace を検索] に「Logic App」と入力し、Enter キーを押します。
  3. [Logic App] ページで、 [作成] を選択します。
  4. [作成] ページで、次の手順を実行します。
    • ロジック アプリの一意の名前を入力します (yourname-retail-store-analysis など)。
    • IoT Central アプリケーションの作成に使用したものと同じ [サブスクリプション] を選択します。
    • retail-store-analysis リソース グループを選択します。
    • [種類][従量課金] を選択します。
    • IoT Central アプリケーションに使用したものと同じ場所を選択します。
    • [作成] を選択します システムによってリソースが完全にプロビジョニングされるまで、数分間待たなければならない場合があります。
  5. Azure portal で新しいロジック アプリに移動します。
  6. [Logic Apps デザイナー] ページで、下にスクロールして [空のロジック アプリ] を選択します。
  7. [コネクタとトリガーを検索する] に、「Event Hubs」と入力します。
  8. [トリガー] で、 [When events are available in Event Hub](イベント ハブでイベントを使用できるとき) を選択します。
  9. 接続名として「Store telemetry」と入力します。
  10. 認証の種類として [アクセス キー] を選択します。
  11. 前にメモした RootManageSharedAccessKey ポリシーのイベント ハブ接続文字列を貼り付け、[作成] を選択します。
  12. [When events are available in Event Hub]\(イベント ハブでイベントを使用できるとき\) アクションで、次のようにします。
    • [イベント ハブ名] で、store-telemetry を選択します。
    • [コンテンツ タイプ] で、 [application/json] を選択します。
    • [間隔] を 3 に設定し、 [頻度] を秒に設定します
  13. [保存] を選択して、ロジック アプリを保存します。

ロジックをロジック アプリの設計に追加するには、 [コード ビュー] を選択します。

  1. "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"
        }
    },
    
  2. [保存] を選択した後 [デザイナー] を選択して、追加したロジックのビジュアル バージョンを表示します。

    Azure portal の Logic Apps デザイナーの最初のロジック アプリが表示された画面のスクリーンショット。

  3. [Switch by DeviceID](DeviceID で切り替え) を選択して、アクションを展開します。 次に、 [Zone 1 environment](ゾーン 1 の環境) を選択し、 [アクションの追加] を選択します。

  4. [コネクタとアクションを検索する] に、「データセットに行を追加する」と入力します。

  5. Power BI の [データセットに行を追加する] アクションを選択します。

  6. [サインイン] を選択し、画面の指示に従って Power BI アカウントにサインインします。

  7. サインイン プロセスが完了した後、 [Add rows to a dataset](データセットに行を追加する) アクションで次のようにします。

    • ワークスペースとして In-store analytics - checkout を選択します。
    • データセットとして Zone 1 sensor を選択します。
    • テーブルとして RealTimeData を選択します。
    • [新しいパラメーターの追加] を選択し、TimestampHumidityTemperature の各フィールドを選択します。
    • Timestamp フィールドを選択し、[動的なコンテンツ] の一覧から enqueuedTime を選択します。
    • Humidity フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 次に、humidity を選択します。
    • Temperature フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 次に、temperature を選択します。

    [保存] を選択して変更を保存します。 [Zone 1 environment](ゾーン 1 の環境) アクションは、次のスクリーンショットのようになります。

    Logic Apps Designer のゾーン 1 の環境アクションを示すスクリーンショット。

  8. [Zone 2 environment](ゾーン 2 の環境) アクションを選択し、 [アクションの追加] を選択します。

  9. [コネクタとアクションを検索する] に、「データセットに行を追加する」と入力します。

  10. Power BI の [データセットに行を追加する] アクションを選択します。

  11. [Add rows to a dataset 2](データセット 2 に行を追加する) アクションで次のようにします。

    • ワークスペースとして In-store analytics - checkout を選択します。
    • データセットとして Zone 2 sensor を選択します。
    • テーブルとして RealTimeData を選択します。
    • [新しいパラメーターの追加] を選択し、TimestampHumidityTemperature の各フィールドを選択します。
    • Timestamp フィールドを選択し、[動的なコンテンツ] の一覧から enqueuedTime を選択します。
    • Humidity フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 次に、humidity を選択します。
    • Temperature フィールドを選択し、 [Parse Telemetry](テレメトリの解析) の横にある [See more](詳細) を選択します。 次に、temperature を選択します。

    [保存] を選択して変更を保存します。

  12. [混雑状況] アクションを選択し、[アクションの追加] を選択します。

  13. [コネクタとアクションを検索する] に、「データセットに行を追加する」と入力します。

  14. Power BI の [データセットに行を追加する] アクションを選択します。

  15. [データセット 3 に行を追加する] アクションで次のようにします。

    • ワークスペースとして In-store analytics - checkout を選択します。
    • データセットとして [混雑状況センサー] を選択します。
    • テーブルとして RealTimeData を選択します。
    • [新しいパラメーターの追加] を選択し、TimestampQueue Length 1Queue Length 2Dwell 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 を選択します。

    [保存] を選択して変更を保存します。 [混雑状況] アクションは、次のスクリーンショットのようになります。

    Logic Apps Designer の混雑状況アクションを示すスクリーンショット。

ロジック アプリは自動的に実行されます。 各実行の状態を確認するには、Azure portal でロジック アプリの [概要] ページに移動し [実行履歴] を選択します。 [最新の情報に更新] を選択して、実行の一覧を更新します。

Power BI ダッシュボードを作成する

これで、IoT Central アプリケーションからイベント ハブを通してテレメトリを送信できるようになりました。 その後、ロジック アプリによってイベント ハブ メッセージが解析され、Power BI のストリーミング データセットに追加されます。 ここでは、Power BI ダッシュボードを作成してテレメトリを視覚化します。

  1. Power BI アカウントにサインインします。
  2. [ワークスペース] > [In-store analytics - checkout] を選択します。
  3. + 新規 > 新しいダッシュボードを選択します。
  4. ダッシュボード名として「店舗分析」と入力し、 [作成] を選択します。

折れ線グラフを追加する

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 つ目のグラフの設定です。

Power B I ダッシュボードの折れ線グラフの定義を示すスクリーンショット。

環境データを表示するカードを追加する

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 つ目のカードの設定です。

Power B I ダッシュボードのカード定義を示すスクリーンショット。

レジの混雑状況データを表示するタイルを追加する

店の 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

次のスクリーンショットのように、ダッシュボード上のタイルのサイズと配置を変更します。

タイルのサイズと配置が変更された Power BI ダッシュボードを示すスクリーンショット。

グラフィックス リソースを追加して、ダッシュボードをさらにカスタマイズできます。

グラフィックスが追加された Power BI ダッシュボードを示すスクリーンショット。

リソースをクリーンアップする

IoT Central アプリケーションを終了したら、アプリケーションにサインインし、[アプリケーション] セクションの [管理] ページに移動すると、アプリケーションを削除できます。

アプリケーションを残すけれども、関連するコストを減らしたい場合は、テレメトリをイベント ハブに送信しているデータのエクスポートを無効にします。

Azure portal で retail-store-analysis という名前のリソース グループを削除することにより、イベント ハブとロジック アプリを削除できます。

Power BI のワークスペースの設定ページでワークスペースを削除することにより、Power BI のデータセットとダッシュボードを削除できます。