你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:从 Azure IoT Central 导出数据,并在 Power BI 中可视化见解

在前面的两个教程中,你使用“店内分析 - 结帐” 应用程序模板创建并自定义了 IoT Central 应用程序。 本教程将介绍如何配置 IoT Central 应用程序以导出从设备收集的遥测数据。 然后,可以使用 Power BI 创建用于存储管理器的自定义仪表板,以可视化从遥测数据派生的见解。

在本教程中,你将了解如何执行以下操作:

  • 配置 IoT Central 应用程序以将遥测数据导出到事件中心。
  • 使用逻辑应用将数据从事件中心发送到 Power BI 流数据集。
  • 创建一个 Power BI 仪表板,用于可视化流数据集中的数据。

先决条件

要完成本教程,需要:

创建资源组

在创建事件中心和逻辑应用之前,需要创建一个资源组来对其进行管理。 资源组应与“店内分析 - 结帐” IoT Central 应用程序的位置相同。 创建资源组:

  1. 登录 Azure 门户
  2. 在左侧导航栏中,选择“资源组” 。 然后选择“添加” 。
  3. 对于“订阅” ,请选择用于创建 IoT Central 应用程序的 Azure 订阅的名称。
  4. 对于“资源组”名称,请输入“retail-store-analysis”。
  5. 对于“区域” ,选择为 IoT Central 应用程序所选的同一区域。
  6. 选择“查看 + 创建” 。
  7. 在“查看 + 创建”页上,选择“创建”。

在订阅中,你现在已有一个名为“retail-store-analysis” 的资源组。

创建事件中心

在将零售监视应用程序配置为导出遥测数据之前,需要创建一个事件中心来接收导出的数据。 下列步骤展示了如何创建事件中心:

  1. 在 Azure 门户中,选择屏幕左上角的“创建资源” 。
  2. 在“搜索市场” 中,输入“事件中心” ,然后按 Enter 。
  3. 在“事件中心” 页上,选择“创建” 。
  4. 在“创建命名空间”页上执行以下步骤:
    • 输入命名空间的唯一名称,例如“yourname” 。 系统会检查该名称是否可用。
    • 选择“基本” 定价层。
    • 对于“订阅” ,请选择用于创建 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. 输入“存储数据事件中心”作为目标名称。
  8. 选择“Azure 事件中心”作为目标类型。
  9. 选择“连接字符串”作为授权类型。
  10. 粘贴你在创建事件中心时保存的 SendPolicy 的连接字符串。
  11. 输入“store-telemetry”作为事件中心。
  12. 选择“创建”,然后选择“保存”。
  13. 在“遥测数据导出”页上,等待导出状态更改为“正常”。

数据导出可能需要几分钟才能开始向事件中心发送遥测数据。 可以在“数据导出”页查看导出状态。

创建 Power BI 数据集

Power BI 仪表板显示零售监视应用程序中的数据。 在此解决方案中,将使用 Power BI 流数据集作为 Power BI 仪表板的数据源。 在本部分中,将定义流数据集的架构,以便逻辑应用可以从事件中心转发数据。 以下步骤展示了如何为环境传感器创建两个流数据集,并为占用传感器创建一个流数据集:

  1. 登录到 Power BI 帐户。

  2. 选择“工作区” ,然后选择“创建工作区” 。

  3. 在“创建工作区” 页上的“工作区名称” 中,输入“In-store analytics - checkout” 。 选择“保存” 。

  4. 在工作区页上,选择“+ 新建”>“流数据集”。

  5. 在“新建流数据集” 页上,选择“API” ,然后选择“下一步” "。

  6. 对于“数据集名称” ,输入“Zone 1 sensor” 。

  7. 在下表中输入三个“流中的值” :

    值名称 值类型
    时间戳 DateTime
    湿度 Number
    温度 Number
  8. 启用“历史数据分析” 。

  9. 选择“创建” ,然后选择“完成” 。

  10. 创建另一个名为“Zone 2 sensor” 的流数据集,其架构和设置与“Zone 1 sensor” 流数据集相同。

现在有两个流数据集。 逻辑应用将遥测数据从连接到“店内分析 - 结帐”应用程序的两个环境传感器路由到以下两个数据集:

该屏幕截图显示了 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 应用程序(位于在 Azure IoT Central 中创建店内分析应用程序教程中)的两个 RuuviTag 传感器的设备 ID:

  1. 登录到“店内分析 - 结帐” IoT Central 应用程序。
  2. 在左窗格中,选择“设备” 。 然后选择“RuuviTag” 。
  3. 记下“设备 ID” 。 在以下屏幕截图中,ID 为 8r6vfyiv1x 和 1rvfk4ymk6z:

此屏幕截图显示了 IoT Central 应用程序的设备列表中的设备 ID。

以下步骤展示了如何在 Azure 门户中创建逻辑应用:

  1. 登录到 Azure 门户中,选择屏幕左上角的“创建资源” 。
  2. 在“搜索市场” 中,输入“逻辑应用” ,然后按 Enter 。
  3. 在“逻辑应用” 页上,选择“创建” 。
  4. 在“创建”页上执行以下操作
    • 输入逻辑应用的唯一名称,例如“yourname-retail-store-analysis” 。
    • 对于“订阅” ,请选择用于创建 IoT Central 应用程序的订阅的名称。
    • 选择“retail-store-analysis” 资源组。
    • 选择“类型”为“消耗”。
    • 请选择用于创建 IoT Central 应用程序的位置。
    • 选择“创建” 。 可能需要等待几分钟让系统预配资源。
  5. 在 Azure 门户中,导航到新的逻辑应用。
  6. 在“逻辑应用设计器” 页上,向下滚动并选择“空白逻辑应用” 。
  7. 在“搜索连接器和触发器” 中,输入“事件中心” 。
  8. 在“触发器” 中,选择“当事件在事件中心可用时” 。
  9. 输入“存储遥测数据”作为连接名称。
  10. 选择“访问密钥”作为身份验证类型。
  11. 粘贴之前记下的 RootManageSharedAccessKey 策略的事件中心连接字符串,并选择“创建”。
  12. 在“当事件在事件中心可用时”操作中:
    • 在“事件中心名称” 中,选择“store-telemetry” 。
    • 在“内容类型” 中,选择“应用程序/json” 。
    • 将“间隔” 设置为 3,将“频率” 设置为秒
  13. 选择“保存” 以保存逻辑应用。

若要将逻辑添加到逻辑应用设计,请选择“代码视图” :

  1. "actions": {}, 替换为以下 JSON。 然后将两个占位符 [YOUR RUUVITAG DEVICE ID 1][YOUR RUUVITAG DEVICE ID 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 门户中的逻辑应用设计器,含初始逻辑应用。

  3. 选择“按设备 ID 切换” 以展开操作。 然后选择“Zone 1 environment” ,并选择“添加操作” 。

  4. 在“搜索连接器和操作”中,输入“向数据集添加行”。

  5. 选择 Power BI“向数据集添加行”操作。

  6. 选择“登录” 并按照提示登录到 Power BI 帐户。

  7. 完成登录过程后,在“向数据集添加行” 操作中:

    • 选择“店内分析 - 结帐” 作为工作区。
    • 选择“Zone 1 sensor” 作为数据集。
    • 选择“RealTimeData” 作为表。
    • 选择“添加新参数” ,然后选择“时间戳” 、“湿度” 和“温度” 字段。
    • 选择“时间戳”字段,然后从“动态内容”列表中选择“enqueuedTime”。
    • 选择“湿度” 字段,然后选择“分析遥测” 旁边的“查看更多” 。 然后选择“湿度” 。
    • 选择“温度” 字段,然后选择“分析遥测” 旁边的“查看更多” 。 然后选择“温度” 。

    选择“保存” 以保存更改。 “区域 1 环境”操作如以下屏幕截图所示:

    该屏幕截图显示了逻辑应用设计器中的区域一环境操作。

  8. 选择“Zone 2 environment” 操作,然后选择“添加操作” 。

  9. 在“搜索连接器和操作”中,输入“向数据集添加行”。

  10. 选择 Power BI“向数据集添加行”操作。

  11. 在“向数据集添加行 2” 操作中:

    • 选择“店内分析 - 结帐” 作为工作区。
    • 选择“Zone 2 sensor” 作为数据集。
    • 选择“RealTimeData” 作为表。
    • 选择“添加新参数” ,然后选择“时间戳” 、“湿度” 和“温度” 字段。
    • 选择“时间戳”字段,然后从“动态内容”列表中选择“enqueuedTime”。
    • 选择“湿度” 字段,然后选择“分析遥测” 旁边的“查看更多” 。 然后选择“湿度” 。
    • 选择“温度” 字段,然后选择“分析遥测” 旁边的“查看更多” 。 然后选择“温度” 。

    选择“保存” 以保存更改。

  12. 选择“占用”操作,然后选择“添加操作”。

  13. 在“搜索连接器和操作”中,输入“向数据集添加行”。

  14. 选择 Power BI“向数据集添加行”操作。

  15. 在“向数据集添加行 3”操作中:

    • 选择“店内分析 - 结帐” 作为工作区。
    • 选择“占用传感器”作为数据集。
    • 选择“RealTimeData” 作为表。
    • 选择“添加新参数”,然后选择“时间戳”、“队列长度 1”、“队列长度 2”、“停留时间 1”和“停留时间 2”字段。
    • 选择“时间戳”字段,然后从“动态内容”列表中选择“enqueuedTime”。
    • 选择“队列长度 1” 字段,然后选择“分析遥测” 旁边的“查看更多” 。 然后,选择“count1” 。
    • 选择“队列长度 2” 字段,然后选择“分析遥测” 旁边的“查看更多” 。 然后,选择“count2” 。
    • 选择“停留时间 1” 字段,然后选择“分析遥测” 旁边的“查看更多” 。 然后选择“DwellTime1” 。
    • 选择“停留时间 2” 字段,然后选择“分析遥测” 旁边的“查看更多” 。 然后选择“DwellTime2” 。

    选择“保存” 以保存更改。 “占用”操作如以下屏幕截图所示:

    该屏幕截图显示了逻辑应用设计器中的占用操作。

逻辑应用会自动运行。 要查看每个运行的状态,请导航到 Azure 门户中逻辑应用的“概述”页,然后选择“运行历史记录”。 选择“刷新”可更新运行列表。

创建 Power BI 仪表板

现在,你已通过事件中心从 IoT Central 应用程序流动了遥测数据。 然后,逻辑应用会分析事件中心消息并将其添加到 Power BI 流数据集。 现在,可以创建一个 Power BI 仪表板来可视化遥测数据:

  1. 登录到 Power BI 帐户。
  2. 选择“工作区”>“店内分析 - 结帐”>
  3. 选择“+ 新建”>“仪表板”。
  4. 输入“Store analytics” 作为仪表板名称,然后选择“创建” 。

添加折线图

添加四个折线图磁贴,以显示两个环境传感器的温度和湿度。 使用下表中的信息创建磁贴。 要添加每个磁贴,请先选择“编辑”>“添加磁贴”。 依次选择“自定义流数据” 和“下一步” :

设置 图表 #1 图表 #2 图表 #3 图表 #4
数据集 Zone 1 sensor Zone 1 sensor Zone 2 sensor Zone 2 sensor
可视化类型 折线图 折线图 折线图 折线图
时间戳 时间戳 时间戳 时间戳
温度 湿度 温度 湿度
时间范围 60 分钟 60 分钟 60 分钟 60 分钟
标题 温度(1小时) 湿度(1小时) 温度(1小时) 湿度(1小时)
副标题 区域 1 区域 1 区域 2 区域 2

以下屏幕截图显示了第一个图表的设置:

该屏幕截图显示了 Power B I 仪表板中的折线图定义。

添加卡以显示环境数据

添加四个卡磁贴,以显示两个环境传感器的温度和湿度值。 使用下表中的信息创建磁贴。 要添加每个磁贴,请先选择“编辑”>“添加磁贴”。 依次选择“自定义流数据” 和“下一步” :

设置 卡 #1 卡 #2 卡 #3 卡 #4
数据集 Zone 1 sensor Zone 1 sensor Zone 2 sensor Zone 2 sensor
可视化类型 卡片 卡片 卡片 卡片
字段 温度 湿度 温度 湿度
标题 温度 (F) 湿度 (%) 温度 (F) 湿度 (%)
副标题 区域 1 区域 1 区域 2 区域 2

以下屏幕截图显示了第一个卡的设置:

该屏幕截图显示了 Power B I dashboard.tings 中的卡定义。

添加磁贴以显示结帐占用数据

添加四个卡磁贴,以显示店内两个结帐之间的队列长度和停留时间。 使用下表中的信息创建磁贴。 要添加每个磁贴,请先选择“编辑”>“添加磁贴”。 依次选择“自定义流数据” 和“下一步” :

设置 卡 #1 卡 #2 卡 #3 卡 #4
数据集 占用传感器 占用传感器 占用传感器 占用传感器
可视化类型 簇状柱形图 簇状柱形图 仪表 仪表
时间戳 时间戳 空值 空值
停留时间 1 停留时间 2 队列长度 1 队列长度 2
时间范围 60 分钟 60 分钟 空值 空值
标题 停留时间 停留时间 队列长度 队列长度
副标题 结帐 1 结帐 2 结帐 1 结帐 2

在仪表板上调整磁贴的大小并重新排列,如以下屏幕截图所示:

此屏幕截图显示了带有已调整大小和已重新排列磁贴的 Power BI 仪表板。

可以添加一些图形资源来进一步自定义仪表板:

此屏幕截图显示了带有附加图的 Power BI 仪表板。

清理资源

如果已完成 IoT Central 应用程序,可以通过登录到应用程序并导航到“应用程序”部分中的“管理”页来删除它。

如果要保留应用程序,但降低与之相关的成本,请禁用将遥测数据发送到事件中心的数据导出。

可以通过删除名为“retail-store-analysis” 的资源组来删除 Azure 门户中的事件中心和逻辑应用。

通过从工作区的 Power BI 设置页中删除工作区,可以删除你的 Power BI 数据集和仪表板。