前の 2 つのチュートリアルでは、 ストア内分析 - チェックアウト アプリケーション テンプレートを使用して IoT Central アプリケーションを作成し、カスタマイズしました。 このチュートリアルでは、デバイスから収集されたテレメトリをエクスポートするように IoT Central アプリケーションを構成します。 次に、Power BI を使用してストア マネージャー用のカスタム ダッシュボードを作成し、テレメトリから派生した分析情報を視覚化します。
このチュートリアルでは、以下の内容を学習します。
- テレメトリをイベント ハブにエクスポートするように IoT Central アプリケーションを構成します。
- Logic Apps を使用して、イベント ハブから Power BI ストリーミング データセットにデータを送信します。
- ストリーミング データセット内のデータを視覚化する Power BI ダッシュボードを作成します。
[前提条件]
このチュートリアルを完了するには、次のものが必要です。
- 前の 2 つのチュートリアルを完了するには、 ストア内分析アプリケーション テンプレートを作成してデプロイし 、 ダッシュボードをカスタマイズし、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 アプリケーションの作成に使用したのと同じ サブスクリプション を選択します。
- 小売店舗分析リソース グループを選択します。
- IoT Central アプリケーションに使用したのと同じ場所を選択します。
- を選択してを作成します。 システムがリソースをプロビジョニングするまで数分待つ必要がある場合があります。
- ポータルで、 小売店舗分析 リソース グループに移動します。 デプロイが完了するまで待ちます。 展開の状態を更新するには、[ 最新の情報に更新 ] を選択する必要がある場合があります。 通知でイベント ハブ名前空間の作成の状態を確認することもできます。
- 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 の接続文字列を貼り付けます。
- イベント ハブとしてストア テレメトリを入力します。
- [ 作成 ] を選択し、[ 保存] を選択します。
- [ テレメトリのエクスポート ] ページで、エクスポートの状態が [正常] に変わるのを待ちます。
イベント ハブへのテレメトリの送信を開始するには、データのエクスポートに数分かかる場合があります。 エクスポートの状態は、[ データ エクスポート] ページで確認できます。
Power BI データセットを作成する
Power BI ダッシュボードには、小売監視アプリケーションのデータが表示されます。 このソリューションでは、Power BI ダッシュボードのデータ ソースとして Power BI ストリーミング データセットを使用します。 このセクションでは、ロジック アプリがイベント ハブからデータを転送できるように、ストリーミング データセットのスキーマを定義します。 次の手順では、環境センサー用に 2 つのストリーミング データセットを作成し、占有率センサー用に 1 つのストリーミング データセットを作成する方法を示します。
Power BI アカウントにサインインします。
[ ワークスペース] を選択し、[ ワークスペースの作成] を選択します。
[ ワークスペースの作成 ] ページで、ワークスペース名として 「ストア内分析 - チェックアウト 」と入力 します。 保存 を選択します。
ワークスペース ページで、[ + 新しい > ストリーミング データセット] を選択します。
[ 新しいストリーミング データセット ] ページで、[ API] を選択し、[ 次へ] を選択します。
データセット名としてゾーン 1 センサーを入力します。
次の表に、 ストリームの 3 つの値を入力します。
値の名前 値の型 タイムスタンプ DateTime 湿度 Number 気温 Number 履歴データ分析をオンに切り替えます。
[ 作成 ] を選択し、[ 完了] を選択します。
ゾーン 1 センサー ストリーミング データセットと同じスキーマと設定を使用して、ゾーン 2 センサーと呼ばれる別のストリーミング データセットを作成します。
これで、2 つのストリーミング データセットが作成されました。 ロジック アプリは、 ストア内分析 に接続されている 2 つの環境センサー (チェックアウト アプリケーション) から次の 2 つのデータセットにテレメトリをルーティングします。
このソリューションでは、Power BI のストリーミング データにフィルターを適用できないため、センサーごとに 1 つのストリーミング データセットを使用します。
また、占有率テレメトリのストリーミング データセットも必要です。
ワークスペース ページで、[ ストリーミング データセット > 作成] を選択します。
[ 新しいストリーミング データセット ] ページで、[ API] を選択し、[ 次へ] を選択します。
データセット名として「占有率センサー」と入力します。
次の表に、 ストリームの 5 つの値を入力します。
値の名前 値の型 タイムスタンプ DateTime キューの長さ 1 Number Queue Length 2 Number 滞留時間 1 Number 滞留時間 2 Number 履歴データ分析をオンに切り替えます。
[ 作成 ] を選択し、[ 完了] を選択します。
これで、シミュレートされた占有率センサーの値を格納する 3 番目のストリーミング データセットが作成されました。 このセンサーは、ストア内の 2 つのチェックアウトのキューの長さと、顧客がこれらのキューで待機している時間を報告します。
ロジック アプリを作成します
このソリューションでは、ロジック アプリはイベント ハブからテレメトリを読み取り、データを解析して、作成した Power BI ストリーミング データセットに送信します。
ロジック アプリを作成する前に、「 ストア内分析アプリケーション テンプレートの作成とデプロイ 」チュートリアルで IoT Central アプリケーションに接続した 2 つの RuuviTag センサーのデバイス ID が必要です。
- ストア内分析 - チェックアウト の IoT Central アプリケーションにサインインします。
- 左側のウィンドウで [デバイス ] を選択します。 次に、 RuuviTag を選択します。
- デバイス ID を書き留めます。 次のスクリーンショットでは、ID は 8r6vfyiv1x と 1rvfk4ymk6z です。
次の手順では、Azure portal でロジック アプリを作成する方法を示します。
- Azure portal にサインインし、画面の左上にある [リソースの作成] を選択します。
- Marketplace の検索で、「ロジック アプリ」と入力し、Enter キーを押します。
- [ ロジック アプリ ] ページで、[ 作成] を選択します。
- [ 作成 ] ページで、次の手順を実行します。
- ロジック アプリの一意の名前 ( yourname-retail-store-analysis など) を入力します。
- IoT Central アプリケーションの作成に使用したのと同じ サブスクリプション を選択します。
- 小売店舗分析リソース グループを選択します。
- [ 種類 ] を [ 消費] として選択します。
- IoT Central アプリケーションに使用したのと同じ場所を選択します。
- を選択してを作成します。 システムがリソースをプロビジョニングするまで数分待つ必要がある場合があります。
- Azure portal で、新しいロジック アプリに移動します。
- Logic Apps デザイナー ページで、下にスクロールし、空のロジック アプリ を選択します。
- 検索コネクタとトリガーに「Event Hubs」と入力します。
- [トリガー] で、[イベント ハブでイベントが使用可能な場合] を選択します。
- 接続名として「Store telemetry」と入力します。
- 認証の種類として [アクセス キー ] を選択します。
- 前にメモ した RootManageSharedAccessKey ポリシーのイベント ハブ接続文字列を貼り付けて、[ 作成] を選択します。
- [ イベント ハブでイベントが使用可能な場合] アクションで、次の操作を 行います。
- [イベント ハブ名] で、[store-telemetry] を選択します。
- コンテンツ タイプで、application/json を選択します。
- 間隔を 3 に設定し、頻度を秒に設定します。
- [ 保存] を 選択してロジック アプリを保存します。
ロジック アプリの設計にロジックを追加するには、[ コード ビュー] を選択します。
"actions": {},を次の JSON に置き換えます。 次に、[YOUR RUUVITAG DEVICE ID 1]と[YOUR RUUVITAG DEVICE ID 2]の 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" } },[保存] を選択し、[デザイナー] を選択して、追加したロジックのビジュアル バージョンを表示します。
[ DeviceID で切り替える ] を選択してアクションを展開します。 次に、[ ゾーン 1 環境] を選択し、[ アクションの追加] を選択します。
[検索コネクタとアクション] に、「データセットに行を追加する」と入力します。
Power BI の [データセットへの行の追加] アクションを 選択します。
[ サインイン ] を選択し、プロンプトに従って Power BI アカウントにサインインします。
サインイン プロセスが完了したら、[ データセットへの行の追加 ] アクションで次の操作を行います。
- ワークスペースとして [ストア内分析 - チェックアウト ] を選択します。
- データセットとして ゾーン 1 センサー を選択します。
- テーブルとして RealTimeData を選択します。
- [ 新しいパラメーターの追加] を選択し、[ タイムスタンプ]、[ 湿度]、および [温度] フィールドを選択します。
- [タイムスタンプ] フィールドを選択し、[動的コンテンツ] リストから enqueuedTime を選択します。
- [湿度] フィールドを選択し、[テレメトリの解析] の横にある [詳細を表示] を選択します。 次に湿度を選択します。
- [温度] フィールドを選択し、[テレメトリの解析] の横にある [詳細] を選択します。 次に 、温度を選択します。
[保存] を選択して変更を保存します。 ゾーン 1 環境アクションは、次のスクリーンショットのようになります。
ゾーン 2 環境アクションを選択し、[アクションの追加] を選択します。
[検索コネクタとアクション] に、「データセットに行を追加する」と入力します。
Power BI の [データセットへの行の追加] アクションを 選択します。
[ データセット 2 に行を追加する ] アクションで、次の操作を行います。
- ワークスペースとして [ストア内分析 - チェックアウト ] を選択します。
- データセットとして ゾーン 2 センサー を選択します。
- テーブルとして RealTimeData を選択します。
- [ 新しいパラメーターの追加] を選択し、[ タイムスタンプ]、[ 湿度]、および [温度] フィールドを選択します。
- [タイムスタンプ] フィールドを選択し、[動的コンテンツ] リストから enqueuedTime を選択します。
- [湿度] フィールドを選択し、[テレメトリの解析] の横にある [詳細を表示] を選択します。 次に湿度を選択します。
- [温度] フィールドを選択し、[テレメトリの解析] の横にある [詳細] を選択します。 次に 、温度を選択します。
[保存] を選択して変更を保存します。
[占有率] アクションを選択し、[アクションの追加] を選択します。
[検索コネクタとアクション] に、「データセットに行を追加する」と入力します。
Power BI の [データセットへの行の追加] アクションを 選択します。
[ データセット 3 に行を追加する ] アクションで、次の操作を行います。
- ワークスペースとして [ストア内分析 - チェックアウト ] を選択します。
- データセットとして [占有率センサー ] を選択します。
- テーブルとして RealTimeData を選択します。
- [ 新しいパラメーターの追加] を選択し、[ タイムスタンプ]、[ キューの長さ 1]、[ キューの長さ 2]、[ ドウェル時間 1]、および [ ドウェル時間 2 ] フィールドを選択します。
- [タイムスタンプ] フィールドを選択し、[動的コンテンツ] リストから enqueuedTime を選択します。
- [キューの長さ 1] フィールドを選択し、[テレメトリの解析] の横にある [詳細を表示] を選択します。 次に 、count1 を選択します。
- [キューの長さ 2] フィールドを選択し、[テレメトリの解析] の横にある [詳細を表示] を選択します。 次に 、count2 を選択します。
- [ドウェル時間 1] フィールドを選択し、[テレメトリの解析] の横にある [詳細を表示] を選択します。 次に、 DwellTime1 を選択します。
- [ドウェル時間 2] フィールドを選択し、[テレメトリの解析] の横にある [詳細を表示] を選択します。 次に、 DwellTime2 を選択します。
[保存] を選択して変更を保存します。 占有率アクションは次のスクリーンショットのようになります。
ロジック アプリは自動的に実行されます。 各実行の状態を確認するには、Azure portal でロジック アプリの [概要 ] ページに移動し、[ 実行履歴] を選択します。 [ 最新の情報に更新] を選択して、実行の一覧を更新します。
Power BI ダッシュボードを作成する
これで、IoT Central アプリケーションからイベント ハブを経由してテレメトリが流れるようになりました。 その後、ロジック アプリによってイベント ハブ メッセージが解析され、Power BI ストリーミング データセットに追加されます。 これで、テレメトリを視覚化する Power BI ダッシュボードを作成できます。
- Power BI アカウントにサインインします。
- [ワークスペース] > [ストア内分析 - チェックアウト] を選択します。
- + 新規 > ダッシュボードを選択します。
- ダッシュボード名として 「ストア分析」 と入力し、[ 作成] を選択します。
折れ線グラフを追加する
4 つの折れ線グラフ タイルを追加して、2 つの環境センサーの温度と湿度を表示します。 次の表の情報を使用して、タイルを作成します。 各タイルを追加するには、まず [編集] > [タイルの追加] を選択します。 [ カスタム ストリーミング データ] を選択し、[ 次へ] を選択します。
| Setting | グラフ 1 | グラフ 2 | グラフ #3 | グラフ #4 |
|---|---|---|---|---|
| Dataset | ゾーン 1 センサー | ゾーン 1 センサー | ゾーン 2 センサー | ゾーン 2 センサー |
| 視覚化の種類 | 折れ線グラフ | 折れ線グラフ | 折れ線グラフ | 折れ線グラフ |
| 軸 | タイムスタンプ | タイムスタンプ | タイムスタンプ | タイムスタンプ |
| 価値観 | 気温 | 湿度 | 気温 | 湿度 |
| 時間枠 | 約 60 分 | 約 60 分 | 約 60 分 | 約 60 分 |
| Title | 温度 (1 時間) | 湿度 (1 時間) | 温度 (1 時間) | 湿度 (1 時間) |
| サブタイトル | ゾーン 1 | ゾーン 1 | ゾーン 2 | ゾーン 2 |
次のスクリーンショットは、最初のグラフの設定を示しています。
環境データを表示するカードを追加する
4 つのカード タイルを追加して、2 つの環境センサーの最新の温度と湿度の値を表示します。 次の表の情報を使用して、タイルを作成します。 各タイルを追加するには、まず [編集] > [タイルの追加] を選択します。 [ カスタム ストリーミング データ] を選択し、[ 次へ] を選択します。
| Setting | カード #1 | カード #2 | カード #3 | カード #4 |
|---|---|---|---|---|
| Dataset | ゾーン 1 センサー | ゾーン 1 センサー | ゾーン 2 センサー | ゾーン 2 センサー |
| 視覚化の種類 | Card | Card | Card | Card |
| Fields | 気温 | 湿度 | 気温 | 湿度 |
| Title | 温度 (F) | 湿度 (%) | 温度 (F) | 湿度 (%) |
| サブタイトル | ゾーン 1 | ゾーン 1 | ゾーン 2 | ゾーン 2 |
次のスクリーンショットは、最初のカードの設定を示しています。
チェックアウトの占有率データを表示するタイルを追加する
ストア内の 2 つのチェックアウトのキューの長さとドウェル時間を示す 4 つのカード タイルを追加します。 次の表の情報を使用して、タイルを作成します。 各タイルを追加するには、まず [編集] > [タイルの追加] を選択します。 [ カスタム ストリーミング データ] を選択し、[ 次へ] を選択します。
| Setting | カード #1 | カード #2 | カード #3 | カード #4 |
|---|---|---|---|---|
| Dataset | 占有率センサー | 占有率センサー | 占有率センサー | 占有率センサー |
| 視覚化の種類 | 集合縦棒グラフ | 集合縦棒グラフ | ゲージ | ゲージ |
| 軸 | タイムスタンプ | タイムスタンプ | N/A | N/A |
| 価値 | 滞留時間 1 | 滞留時間 2 | キューの長さ 1 | Queue Length 2 |
| 時間枠 | 約 60 分 | 約 60 分 | N/A | N/A |
| Title | 滞留時間 | 滞留時間 | キューの長さ | キューの長さ |
| サブタイトル | チェックアウト 1 | チェックアウト 2 | チェックアウト 1 | チェックアウト 2 |
次のスクリーンショットのように、ダッシュボードのタイルのサイズを変更して並べ替えます。
いくつかのグラフィックス リソースを追加して、ダッシュボードをさらにカスタマイズできます。
リソースをクリーンアップする
IoT Central アプリケーションの使用が完了したら、アプリケーションにサインインし、[アプリケーション] セクションの[管理] ページに移動して削除できます。
アプリケーションを維持しながら、それに関連するコストを削減する場合は、イベント ハブにテレメトリを送信するデータ エクスポートを無効にします。
Azure portal でイベント ハブとロジック アプリを削除するには、 retail-store-analysis というリソース グループを削除します。
ワークスペースの Power BI 設定ページからワークスペースを削除することで、Power BI データセットとダッシュボードを削除できます。