教學課程:從 Azure IoT Central 匯出資料,並在 Power BI 中視覺化深入解析

在前面的兩個教學課程中,您使用 店內分析 - 結帳 應用程式範本來建立和自訂 IoT Central 應用程式。 在本教學課程中,您會設定 IoT Central 應用程式,以匯出從裝置收集的遙測。 然後,您可以使用 Power BI 為商店經理建立客製化儀錶板,以視覺化從遙測中衍生出的洞察。

在本教學課程中,您將瞭解如何:

  • 設定 IoT Central 應用程式,以將遙測匯出至事件中樞。
  • 使用 Logic Apps 將資料從事件中樞傳送至 Power BI 串流資料集。
  • 建立 Power BI 儀錶板,以視覺化串流資料集中的資料。

先決條件

若要完成本教學課程,您需要:

建立資源群組

建立事件中樞和邏輯應用程式之前,您必須先建立資源群組來管理它們。 資源群組應該與 In-store analytics - checkout IoT Central 應用程式位於相同的位置。 若要建立資源群組:

  1. 登入 Azure 入口網站。
  2. 在左側導覽中,選取 [資源群組]。 然後選取 新增。
  3. 針對 [訂用帳戶],選取您用來建立 IoT Central 應用程式的 Azure 訂用帳戶名稱。
  4. 針對 資源群組名稱,輸入 retail-store-analysis。
  5. 針對 [區域],選取您為 IoT Central 應用程式選擇的相同區域。
  6. 選取檢閱 + 建立。
  7. 在 [檢閱 + 建立] 頁面上,選取 [建立]。

您現在的訂用帳戶中有一個名為 retail-store-analysis 的資源群組。

建立事件中樞

您必須先建立事件中樞來接收匯出的資料,才能將零售監視應用程式設定為匯出遙測。 下列步驟示範如何建立事件中樞:

  1. 在 Azure 入口網站中,選取畫面左上方的 [ 建立資源 ]。
  2. 在 [搜尋市集] 中,輸入 Event Hubs,然後按 Enter。
  3. 在 [事件中樞] 頁面上,選取 [建立]。
  4. 在 [建立命名空間 ] 頁面上,執行下列步驟:
    • 輸入命名空間的唯一名稱,例如 yourname-retail-store-analysis。 系統會檢查此名稱是否可用。
    • 選擇 基本 定價層。
    • 選取您用來建立 IoT Central 應用程式的相同 訂用帳戶 。
    • 選取 retail-store-analysis 資源群組。
    • 選取您用於 IoT Central 應用程式的相同位置。
    • 選取 ,創建。 您可能需要等待幾分鐘,才能讓系統佈建資源。
  5. 在入口網站中,流覽至 retail-store-analysis 資源群組。 等候部署完成。 您可能需要選取 [重新整理] 來更新部署狀態。 您也可以在 [通知] 中檢查事件中樞命名空間建立的狀態。
  6. 在 retail-store-analysis 資源群組中,選取 [事件中樞命名空間]。 您會在入口網站中看到 事件中樞命名空間 的首頁。

您需要具有傳送許可權的連接字串,才能從 IoT Central 連線。 若要建立連接字串:

  1. 在 Azure 入口網站的事件中樞命名空間中,選取 [共用存取原則]。 原則清單包含預設的 RootManageSharedAccessKey 原則。
  2. 選取 [+ 新增]。
  3. 輸入 SendPolicy 作為原則名稱,選取 [傳送],然後選取 [建立]。
  4. 在原則清單中選取 [SendPolicy ]。
  5. 記下 連接字串-主索引鍵 的值。 當您在 IoT Central 中設定匯出目的地時,您會使用它。

您需要具有管理和接聽許可權的連接字串,才能從邏輯應用程式連線到事件中樞。 若要擷取連接字串:

  1. 在 Azure 入口網站的事件中樞命名空間中,選取 [共用存取原則]。 原則清單包含預設的 RootManageSharedAccessKey 原則。
  2. 在原則清單中選取 RootManageSharedAccessKey 。
  3. 記下 連接字串-主索引鍵 的值。 當您配置邏輯應用程式以從事件中樞擷取遙測資料時,您會使用它。

現在您有 事件中樞命名空間,您可以建立事件中樞以搭配 IoT Central 應用程式使用:

  1. 在入口網站的事件中樞命名空間首頁上,選取 [+ 事件中樞]。
  2. 在 [ 建立事件中樞 ] 頁面上,輸入 store-telemetry 作為名稱,然後選取 [ 建立]。

您現在有一個事件中樞,當您從 IoT Central 應用程式設定資料匯出時可以使用:

螢幕擷取畫面,顯示 Azure 入口網站中的事件中樞命名空間。

設定資料匯出

現在您已擁有事件中樞,您可以設定 店內分析 - 結帳 應用程式,以從連線的裝置匯出遙測。 下列步驟說明如何設定匯出:

  1. 登入您的 店內分析 - 結帳 IoT Central 應用程式。
  2. 選取左窗格中的 [ 資料匯出 ]。
  3. 選取 [+ 新增匯出]。
  4. 輸入 遙測匯出 作為 匯出名稱。
  5. 選取 [遙測] 作為要匯出的資料類型。
  6. 在 目的地 區段中,選取 建立新目的地。
  7. 輸入 Store data event hub 作為 目的地名稱。
  8. 選取 [Azure 事件中樞] 作為目的地類型。
  9. 選取 [連接字串] 作為授權類型。
  10. 貼上您在建立事件中樞時儲存之 SendPolicy 的連接字串。
  11. 輸入 store-telemetry 作為 事件中樞。
  12. 選取 [建立],然後選取 [儲存]。
  13. 在 [ 遙測匯出 ] 頁面上,等候匯出狀態變更為 [狀況良好]。

資料匯出可能需要幾分鐘的時間,才能開始將遙測傳送至事件中樞。 您可以在 [資料匯出] 頁面上查看匯出的狀態。

建立 Power BI 資料集

您的 Power BI 儀錶板會顯示來自零售監視應用程式的資料。 在此解決方案中,您會使用 Power BI 串流資料集作為 Power BI 儀錶板的資料來源。 在本節中,您會定義串流資料集的結構描述,讓邏輯應用程式可以從事件中樞轉送資料。 下列步驟說明如何為環境感測器建立兩個串流資料集,以及為佔用感測器建立一個串流資料集:

  1. 登入您的 Power BI 帳戶。

  2. 選取 [工作區],然後選取 [建立工作區]。

  3. 在 建立工作區 頁面上,輸入 店內分析 - 結帳 作為 工作區名稱。 選取 [儲存]。

  4. 在工作區頁面上,選取 [+ 新增 > 串流資料集]。

  5. 在 [新增串流資料集 ] 頁面上,選擇 [API],然後選取 [ 下一步]。

  6. 輸入 Zone 1 sensor 作為 資料集名稱。

  7. 在下表中輸入三個 串流中的值 :

    值名稱 值類型
    時間戳 DateTime
    溼度 Number
    溫度 Number
  8. 開啟 [歷史資料分析]。

  9. 選取 建立,然後選取 完成。

  10. 建立另一個稱為 區域 2 感應器的 串流資料集,其結構描述和設定與 區域 1 感應器 串流資料集相同。

您現在有兩個串流資料集。 邏輯應用程式會將來自連接至您 店內分析 - 結帳系統 應用程式的兩個環境感應器的遙測數據路由到這兩個資料集:

螢幕擷取畫面,顯示 Power B I 中的區域一感應器資料集定義。

此解決方案會針對每個感應器使用一個串流資料集,因為無法將篩選套用至 Power BI 中的串流資料。

您也需要佔用量遙測資料的串流資料集:

  1. 在工作區頁面上,選取 [ 建立 > 串流資料集]。

  2. 在 [新增串流資料集 ] 頁面上,選擇 [API],然後選取 [ 下一步]。

  3. 輸入 Occupancy sensor 作為 資料集名稱。

  4. 在下表中輸入五個來自串流的值:

    值名稱 值類型
    時間戳 DateTime
    佇列長度 1 Number
    佇列長度 2 Number
    停留時間 1 Number
    停留時間 2 Number
  5. 開啟 [歷史資料分析]。

  6. 選取 建立,然後選取 完成。

您現在有第三個串流資料集,可儲存來自模擬佔用感應器的值。 此感應器會報告商店中兩次結帳時的佇列長度,以及顧客在這些佇列中等待的時間:

螢幕擷取畫面顯示 Power B I 中的佔用資料集定義。

建立邏輯應用程式

在此解決方案中,邏輯應用程式會從事件中樞讀取遙測、剖解析資料,然後將它傳送至您建立的 Power BI 串流資料集。

建立邏輯應用程式之前,您需要在 建立和部署店內分析應用程式範本 教學課程中連線至 IoT Central 應用程式的兩個 RuuviTag 感應器的裝置識別碼:

  1. 登入您的 店內分析 - 結帳 IoT Central 應用程式。
  2. 選取左窗格中的 裝置 。 然後選取 RuuviTag。
  3. 記下 裝置 ID。 在下列螢幕擷取畫面中,標識碼為 8r6vfyiv1x 和 1rvfk4ymk6z:

螢幕擷取畫面,顯示 IoT Central 應用程式中裝置清單中的裝置識別碼。

下列步驟示範如何在 Azure 入口網站中建立邏輯應用程式:

  1. 登入 Azure 入口網站 ,然後選取畫面左上方的 [ 建立資源 ]。
  2. 在 [搜尋市集] 中,輸入 [邏輯應用程式],然後按 Enter。
  3. 在 [邏輯應用程式] 頁面上,選取 [建立]。
  4. 在建立頁面上:
    • 輸入邏輯應用程式的唯一名稱,例如 yourname-retail-store-analysis。
    • 選取您用來建立 IoT Central 應用程式的相同 訂用帳戶 。
    • 選取 retail-store-analysis 資源群組。
    • 選取 [類型 ] 作為 [耗用量]。
    • 選取您用於 IoT Central 應用程式的相同位置。
    • 選取 ,創建。 您可能需要等待幾分鐘,才能讓系統佈建資源。
  5. 在 Azure 入口網站中,流覽至您的新邏輯應用程式。
  6. 在 [Logic Apps 設計工具] 頁面上,向下滾動並選擇 [空白邏輯應用程式]。
  7. 在 [搜尋連接器和觸發程式] 中,輸入 [事件中樞]。
  8. 在 [觸發程式] 中,選取 [事件中心中有可用事件時]。
  9. 輸入 Store 遙測 作為 連線名稱。
  10. 選取 [存取金鑰 ] 作為驗證類型。
  11. 貼上您先前記下之 RootManageSharedAccessKey 原則的事件中樞連接字串,然後選取 [建立]。
  12. 在 事件中樞中有事件可用時 動作中:
    • 在 事件中樞名稱 中,選取 store-telemetry。
    • 在 [內容類型] 中,選取 [application/json]。
    • 將 間隔 設定為三,並將 頻率 設定為秒
  13. 選取 [儲存] 以儲存您的邏輯應用程式。

若要將邏輯新增至邏輯應用程式設計,請選取 [ 程式碼檢視]:

  1. 取代 "actions": {}, 為下列 JSON。 然後將兩個佔位符[YOUR RUUVITAG DEVICE ID 1][YOUR RUUVITAG DEVICE ID 2]替換為兩個 RuuviTag 裝置的 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 入口網站中具有初始邏輯應用程式的 Logic Apps 設計工具螢幕擷取畫面。

  3. 選取 [依裝置識別碼切換] 以展開動作。 然後選取 區域 1 環境,然後選取 新增動作。

  4. 在搜尋連接器和動作中,輸入 將資料列新增至資料集。

  5. 選取 Power BI 將 資料列新增至資料集 動作。

  6. 選取 [登入] ,然後依照提示登入您的 Power BI 帳戶。

  7. 登入程式完成後,在 [ 將資料列新增至資料集 ] 動作中:

    • 選取 店內分析 - 結帳 作為工作區。
    • 選取 區域 1 感應器 作為資料集。
    • 選取 [RealTimeData ] 作為資料表。
    • 選取 [新增參數] ,然後選取 [ 時間戳記]、[ 濕度] 和 [溫度] 欄位。
    • 選取 時間戳記 欄位,然後從 動態內容 清單中選取 enqueuedTime。
    • 選取 [濕度] 欄位,然後選取 [剖析遙測] 旁的 [查看更多]。 然後選擇 濕度。
    • 選取 [溫度] 欄位,然後選取 剖析遙測 旁的 查看更多。 然後選擇 溫度。

    選取儲存以儲存變更。 區域 1 環境動作看起來像下列螢幕擷取畫面:

    螢幕擷取畫面,顯示 Logic Apps 設計工具中的區域一環境動作。

  8. 選取 區域 2 環境 動作,然後選取 新增動作。

  9. 在搜尋連接器和動作中,輸入 將資料列新增至資料集。

  10. 選取 Power BI 將 資料列新增至資料集 動作。

  11. 在 將資料列新增至資料集 2 動作中:

    • 選取 店內分析 - 結帳 作為工作區。
    • 選取 區域 2 感應器 作為資料集。
    • 選取 [RealTimeData ] 作為資料表。
    • 選取 [新增參數] ,然後選取 [ 時間戳記]、[ 濕度] 和 [溫度] 欄位。
    • 選取 時間戳記 欄位,然後從 動態內容 清單中選取 enqueuedTime。
    • 選取 [濕度] 欄位,然後選取 [剖析遙測] 旁的 [查看更多]。 然後選擇 濕度。
    • 選取 [溫度] 欄位,然後選取 剖析遙測 旁的 查看更多。 然後選擇 溫度。

    選取儲存以儲存變更。

  12. 選取 [佔用] 動作,然後選取 [新增動作]。

  13. 在搜尋連接器和動作中,輸入 將資料列新增至資料集。

  14. 選取 Power BI 將 資料列新增至資料集 動作。

  15. 在 將資料列新增至資料集 3 動作中:

    • 選取 店內分析 - 結帳 作為工作區。
    • 選取 [佔用感應器] 作為資料集。
    • 選取 [RealTimeData ] 作為資料表。
    • 選取 新增參數 ,然後選取 時間戳記、 佇列長度 1、 佇列長度 2、 停留時間 1 和停留 時間 2 欄位。
    • 選取 時間戳記 欄位,然後從 動態內容 清單中選取 enqueuedTime。
    • 選取 [佇列長度 1] 欄位,然後選取 [剖析遙測] 旁的 [查看更多]。 然後選取 count1。
    • 選取 [佇列長度 2] 欄位,然後選取 [剖析遙測] 旁的 [查看更多]。 然後選取 count2。
    • 選取 [停留時間 1] 欄位,然後選取 [剖析遙測] 旁的 [查看更多]。 然後選取 DwellTime1。
    • 選取 [停留時間 2] 欄位,然後在 [解析遙測] 旁選取 [查看更多]。 然後選取 DwellTime2。

    選取儲存以儲存變更。 Occupancy 動作如下所示:

    螢幕擷取畫面顯示 Logic Apps 設計工具中的佔用動作。

邏輯應用程式會自動執行。 若要查看每次執行的狀態,請流覽至 Azure 入口網站中邏輯應用程式的 [ 概觀 ] 頁面,然後選取 [執行歷程記錄]。 選取 [重新整理] 以更新執行清單。

建立 Power BI 儀錶板

現在,您有從 IoT Central 應用程式透過事件中樞傳輸的遙測資料。 然後,您的邏輯應用程式會剖析事件中樞訊息,並將其新增至 Power BI 串流資料集。 現在,您可以建立 Power BI 儀錶板來視覺化遙測:

  1. 登入您的 Power BI 帳戶。
  2. 選取 工作區 > 店內分析 - 結帳。
  3. 選取+ 新建儀表板。
  4. 輸入 Store analytics 作為儀錶板名稱,然後選取 [建立]。

新增折線圖

新增四個折線圖圖塊,以顯示兩個環境感測器的溫度和濕度。 使用下表中的資訊來建立磚。 若要新增每個磚,請先選取 [編輯 > ] [新增磚]。 選取 [自訂串流資料],然後選取 [ 下一步]:

Setting 圖表 #1 圖表 #2 圖表 #3 圖表 #4
Dataset 區域 1 感測器 區域 1 感測器 區域 2 感測器 區域 2 感測器
視覺化類型 折線圖 折線圖 折線圖 折線圖
軸 時間戳 時間戳 時間戳 時間戳
價值觀 溫度 溼度 溫度 溼度
時間範圍 60 Minuten 60 Minuten 60 Minuten 60 Minuten
Title 溫度(1小時) 濕度(1小時) 溫度(1小時) 濕度(1小時)
副標題 區域 1 區域 1 區域 2 區域 2

下列螢幕擷取畫面顯示第一個圖表的設定:

螢幕擷取畫面,顯示 Power B I 儀錶板中的折線圖定義。

新增卡片以顯示環境資料

新增四個卡片圖塊,以顯示兩個環境感測器的最新溫度和濕度值。 使用下表中的資訊來建立磚。 若要新增每個磚,請先選取 [編輯 > ] [新增磚]。 選取 [自訂串流資料],然後選取 [ 下一步]:

Setting 卡片 #1 卡片 #2 卡片 #3 卡片 #4
Dataset 區域 1 感測器 區域 1 感測器 區域 2 感測器 區域 2 感測器
視覺化類型 Card Card Card Card
Fields 溫度 溼度 溫度 溼度
Title 溫度 (F) 濕度 (%) 溫度 (F) 濕度 (%)
副標題 區域 1 區域 1 區域 2 區域 2

下列螢幕擷取畫面顯示第一張卡片的設定:

螢幕擷取畫面顯示 Power B I dashboard.tings 中的卡片定義。

新增圖磚以顯示結帳區佔用資料

新增四個卡片圖塊,以顯示商店中兩次結帳的佇列長度和停留時間。 使用下表中的資訊來建立磚。 若要新增每個磚,請先選取 [編輯 > ] [新增磚]。 選取 [自訂串流資料],然後選取 [ 下一步]:

Setting 卡片 #1 卡片 #2 卡片 #3 卡片 #4
Dataset 佔用感應器 佔用感應器 佔用感應器 佔用感應器
視覺化類型 叢集直條圖 叢集直條圖 量測計 量測計
軸 時間戳 時間戳 N/A N/A
價值觀 停留時間 1 停留時間 2 佇列長度 1 佇列長度 2
時間範圍 60 Minuten 60 Minuten N/A N/A
Title 停留時間 停留時間 佇列長度 佇列長度
副標題 結帳 1 結帳 2 結帳 1 結帳 2

調整儀表板上的磚大小並重新排列,使其看起來像下列螢幕擷取畫面:

螢幕擷取畫面顯示具有已調整大小和重新排列磚的 Power BI 儀表板。

您可以新增一些圖形資源,以進一步自訂儀表板:

螢幕擷取畫面,顯示具有其他圖形的 Power BI 儀錶板。

清理資源

完成 IoT Central 應用程式之後,您可以登入應用程式,然後流覽至 [應用程式] 區段中的 [管理] 頁面,以將其刪除。

如果您想要保留應用程式,但降低與其相關聯的成本,請停用將遙測傳送至事件中樞的資料匯出。

您可以刪除名為 retail-store-analysis 的資源群組,以刪除 Azure 入口網站中的事件中樞和邏輯應用程式。

您可以從工作區的 Power BI 設定頁面中刪除工作區,以刪除 Power BI 資料集和儀表板。