Power BI 中的实时流式处理

通过具有实时流式处理功能的 Power BI,可以流式处理数据并实时更新仪表板。 在 Power BI 中创建的任何视觉对象或仪表板都可以显示和更新实时数据和视觉对象。 流式处理数据的设备和源可以是工厂传感器、社交媒体源、服务使用情况指标或许多其他时间敏感型数据收集器或发送器。

本文介绍如何在 Power BI 中设置和使用实时流式处理语义模型。

Screenshot of the Environmental sensors dashboard, showing the results of the data in real-time.

实时语义模型的类型

首先,务必了解设计为在磁贴和仪表板中显示的实时语义模型的类型以及这些语义模型的不同之处。

以下三种实时语义模型设计用于在实时仪表板上显示:

  • 推送语义模型
  • 流式传输语义模型
  • PubNub 流式处理语义模型

本部分介绍这些语义模型互相有何差异。 后面的部分介绍如何将数据推送到其中每个语义模型中。

推送语义模型

借助推送语义模型,数据将推送到 Power BI 服务。 创建语义模型后,Power BI 服务会在服务中自动创建一个新数据库以存储数据。

由于有一个基础数据库在数据到达时存储数据,因此你可以使用数据创建报表。 这些报表及其视觉对象与任何其他报表视觉对象一样。 可以使用 Power BI 的所有报表生成功能,例如 Power BI 视觉对象、数据警报和固定仪表板磁贴。

使用推送语义模型创建报表后,可以将任何报表视觉对象固定到仪表板。 在该仪表板上,每当数据更新时,视觉对象就会实时更新。 在 Power BI 服务中,仪表板每次接收新数据时都会触发磁贴刷新。

关于推送语义模型中的固定磁贴,有以下两点注意事项:

  • 使用“固定实时页”选项固定整个报表不会导致数据自动更新。
  • 将视觉对象固定到仪表板后,可以使用 Q&A,以自然语言询问有关推送语义模型的问题。 进行 Q&A 查询后,你可以将生成的视觉对象再次固定到仪表板,并且该视觉对象还会实时更新

流式传输语义模型

流式处理语义模型也会将数据推送到 Power BI 服务,但有一个重要区别:Power BI 仅将数据存储到临时缓存中,该缓存很快就会过期。 临时缓存仅用于显示具有一些短暂历史的视觉对象,例如具有一小时时间窗口的折线图。

流式处理语义模型没有基础数据库,因此无法使用从流中流入的数据来生成报表视觉对象。 因此,不能使用报表功能,例如筛选、Power BI 视觉对象和其他报表功能。

将流式处理语义模型可视化的唯一方法是添加磁贴,并将流式处理语义模型用作自定义流式处理数据源。 基于流式处理语义模型的自定义流式处理磁贴被优化用于快速显示实时数据。 将数据推送到 Power BI 服务和更新视觉对象之间几乎没有延迟,因为不需要将数据输入数据库或从数据库读取数据。

实际上,在需要最大限度地减少推送和可视化数据之间的延迟的情况下,最好使用流式处理语义模型及其随附的流式处理视觉对象。 应以可以直观显示的格式推送数据,而无需任何更多聚合。 准备好的数据的示例包括温度和预计算的平均值。

PubNub 流式处理语义模型

使用 PubNub 流式处理语义模型,Power BI Web 客户端使用 PubNub SDK 读取现有的 PubNub 数据流。 Power BI 服务不存储任何数据。 由于 Web 客户端直接进行此调用,因此,如果仅允许来自网络的已批准出站流量,则必须将流向 PubNub 的流量列为允许的流量。 有关说明,请参阅有关批准 PubNub 出站流量的支持文章

与流式处理语义模型一样,PubNub 流式处理语义模型没有基础 Power BI 数据库。 无法针对流入的数据生成报表视觉对象,也无法使用筛选或 Power BI 视觉对象等报表功能。 只需向仪表板添加磁贴并将 PubNub 数据流配置为源,即可可视化 PubNub 流式处理语义模型。

已优化基于 PubNub 流式处理语义模型的磁贴,以便快速显示实时数据。 由于 Power BI 直接连接到 PubNub 数据流,因此将数据推送到 Power BI 服务和更新视觉对象之间几乎没有延迟。

流式处理语义模型矩阵

下表描述了用于实时流式处理的三种语义模型,并列出了它们的功能和限制。

功能 推送 流式处理 PubNub
仪表板磁贴在推送数据时实时更新 是。
用于通过报表生成然后固定到仪表板的视觉对象。
是。
用于直接添加到仪表板的自定义流式处理磁贴。
是。
用于直接添加到仪表板的自定义流式处理磁贴。
使用平滑动画更新仪表板磁贴 编号 是。 是。
数据永久存储在 Power BI 中用于历史分析 是。 编号
数据临时存储一小时以呈现视觉对象。
编号
基于数据生成 Power BI 报表 是。 编号 编号
最大数据引入速率 1 个请求
16 MB/请求
5 个请求
15 KB/请求
空值
数据不会推送到 Power BI 中。
数据吞吐量限制 1 百万行/小时 无。 空值
数据不会推送到 Power BI 中。

将数据推送到语义模型

本部分介绍如何创建数据,并将其推送到可在实时流式处理中使用的三种主要类型的实时语义模型。

可以使用以下方法将数据推送到语义模型中:

  • Power BI REST API
  • Power BI 流式处理语义模型 UI
  • Azure 流分析

使用 Power BI REST API 推送数据

可以使用 Power BI REST API 创建数据并将其发送到推送语义模型和流式传输语义模型。 使用 Power BI REST API 创建语义模型时,defaultMode 标志指定了语义模型是推送还是流式传输。

如果未设置 defaultMode 标志,则语义模型默认为推送语义模型。 如果 defaultMode 值设置为 pushStreaming,则语义模型同时是推送和流式处理语义模型,并且拥有这两种语义模型的优势。

注意

使用 defaultMode 标志设置为 pushStreaming 的语义模型时,如果某请求超过流式处理语义模型的 15 KB 大小限制,但小于推送语义模型的 16 MB 大小限制,则该请求将成功,并且数据将在推送语义模型中更新。 但是,任何流式处理磁贴都会暂时失败。

创建语义模型后,可以使用 PostRows REST API 推送数据。 对 REST API 的所有请求都使用 Microsoft Entra ID OAuth 进行保护。

使用流式处理语义模型 UI 推送数据

在 Power BI 服务中,可以通过选择 API 方法创建语义模型,如以下屏幕截图所示

Screenshot of the New streaming semantic model choices, showing the API selection.

创建新的流式处理语义模型时,可以启用“历史数据分析”,如以下屏幕截图所示。 此选择具有重大影响。

Screenshot of the New streaming semantic model, showing Historic data analysis enabled.

禁用“历史数据分析”时(默认为禁用),你将创建一个流式处理语义模型,如前面所述。 启用“历史数据分析”后,创建的语义模型将同时成为流式处理语义模型和推送语义模型。 此设置相当于使用 Power BI REST API 创建其 defaultMode 设置为 pushStreaming 的语义模型,如前面所述。

注意

使用 Power BI 服务 UI 创建的流式处理语义模型不需要 Microsoft Entra 身份验证。 在此类语义模型中,语义模型所有者接收具有 rowkey 的 URL,该 rowkey 授权请求者无需使用 Microsoft Entra ID OAuth 持有者令牌即可将数据推送到语义模型中。 不过,采用 Microsoft Entra ID 方法仍可将数据推送到语义模型中。

使用 Azure 流分析推送数据

可以在 Azure 流分析中将 Power BI 添加为输出,然后实时可视化 Power BI 服务中的这些数据流。 本部分介绍该过程的技术详细信息。

Azure 流分析使用 Power BI REST API 创建其到 Power BI 的输出数据流,其中 defaultMode 设置为 pushStreaming。 生成的语义模型可以使用推送和流式处理。 创建语义模型时,Azure 流分析会将 retentionPolicy 标志设置为 basicFIFO。 使用该设置时,支持推送语义模型的数据库可存储 200,000 行,并以先进先出 (FIFO) 的方式删除行。

重要

如果 Azure 流分析查询对 Power BI 产生非常快速的输出(例如,每秒一次或两次),则 Azure 流分析会开始将这些输出批处理到单个请求中。 此批处理可能会导致请求大小超过流式处理磁贴限制,流式处理磁贴可能无法呈现。 在这种情况下,最佳做法是降低向 Power BI 输出数据的速率。 例如,请求超过 10 秒的最大值,而不是每秒的最大值。

在 Power BI 中设置实时流式处理语义模型

若要开始使用实时流式处理,可以选择以下方式之一在 Power BI 中使用流式处理数据:

  • 附带流式处理数据中的视觉对象的磁贴
  • 从 Power BI 中持续存在的流式处理数据中创建的语义模型

对于两种选项,都需要在 Power BI 中设置流式处理数据。 若要在 Power BI 中运行实时流式处理语义模型:

  1. 在现有仪表板或新的仪表板中,选择“添加磁贴”。

  2. 在“添加磁贴”页上,选择“自定义流式处理数据”,然后选择“下一步”。

    Screenshot of the Add a tile page, showing the Custom Streaming Data selection.

  3. 在“添加自定义流式数据磁贴”页上,可以选择现有语义模型,或者选择“管理语义模型”以导入流式语义模型(如果已创建)。 如果尚未设置流式处理数据,请选择“添加流式处理语义模型”开始设置

    Screenshot of the dashboard, showing the Add streaming semantic model link in the Add a custom streaming data tile.

  4. 在“新建流式处理语义模型”页上,选择“API”、“Azure 流”或“PubNub”,然后选择“下一步”

    Screenshot of the New streaming semantic model choices, showing API, Azure Stream, and PubNub options.

创建流式处理语义模型

可以通过三种方式创建 Power BI 可以使用和可视化的实时流式处理数据源:

  • 使用实时流式处理终结点的 Power BI REST API
  • Azure 流
  • PubNub

本部分介绍 Power BI REST API 和 PubNub 选项,并说明如何从流式处理数据源创建流式处理磁贴或语义模型。 然后,可以使用语义模型生成报表。 有关 Azure 流选项的详细信息,请参阅 Azure 流分析的 Power BI 输出

使用 Power BI REST API

借助 Power BI REST API,开发人员可以更轻松地进行实时流式处理。 在“新建流式处理语义模型”屏幕上选择“API”和“下一步”后,可以提供使 Power BI 能够连接和使用你的终结点的条目。 有关 API 的详细信息,请参阅使用 Power BI REST API

Screenshot of the New streaming semantic model dialog, showing the Power BI REST API entries for a connection.

如果希望 Power BI 存储此数据流发送的数据,以便你可以针对收集的数据生成报表和进行分析,请启用“历史数据分析”。

成功创建数据流后,将获得一个 REST API URL 终结点。 应用程序可以通过使用 POST 请求将流式处理数据推送到 Power BI 语义模型来调用终结点。 在 POST 请求中,请确保请求正文与 Power BI 用户界面提供的示例 JSON 匹配。 例如,将 JSON 对象包装在一个数组中。

注意

对于在 Power BI 服务 UI 中创建的流式处理语义模型,语义模型所有者会获得包含资源密钥的 URL。 此密钥授权请求者在不使用 Microsoft Entra ID OAuth 持有者令牌的情况下将数据推送到语义模型中。 使用此类语义模型和方法时,请记住在 URL 中包含密钥的含义。

使用 PubNub

PubNub 流式处理与 Power BI 的集成可帮助你在 Power BI 中创建和使用低延迟 PubNub 数据流。 在“新建流式处理语义模型”屏幕上选择“PubNub”和“下一步”时,你会看到以下屏幕

Screenshot of the New streaming semantic model dialog, showing the PubNub entries for connection.

重要

可以使用 PubNub 访问管理器 (PAM) 身份验证密钥来保护 PubNub 通道。 此密钥与有权访问仪表板的所有用户共享。 有关 PubNub 访问控制的详细信息,请参阅管理访问

PubNub 数据流通常容量很大,并不总是适合以其原始形式进行存储和历史分析。 若要使用 Power BI 对 PubNub 数据进行历史分析,必须聚合原始 PubNub 流并将其发送到 Power BI,例如使用 Azure Stream Analytics

Power BI 中的实时流式处理的示例

以下示例说明了 Power BI 中实时流式处理的工作原理。 此示例使用 PubNub 中公开提供的流。 可以遵循此示例,查看自己的实时流式处理的值。

  1. 在 Power BI 服务中,选择或创建新的仪表板。 在屏幕顶部,选择“编辑”>“添加磁贴”。

  2. 在“添加磁贴”屏幕上,选择“自定义流式处理数据”,然后选择“下一步”。

    Screenshot of the dashboard, showing the Add tile with the Custom streaming data selection.

  3. 在“添加自定义流式处理数据磁贴”页上,选择“添加流式处理语义模型”

    Screenshot of the dashboard, showing the Add streaming semantic model link in the Add a custom streaming data tile.

  4. 在“新建流式处理语义模型”页上,选择“PubNub”,然后选择“下一步”

  5. 在下一个屏幕上,输入语义模型名称,在接下来的两个字段中输入以下值,然后选择“下一步”

    • 订阅密:sub-c-99084bc5-1844-4e1c-82ca-a01b18166ca8
    • 通道名称:pubnub-sensor-network

    Screenshot of the New streaming semantic model dialog, showing how to create a Semantic model name and entries in the Sub-key and Channel name fields.

  6. 在下一个屏幕上,保留自动填充的值,然后选择“创建”。

    Screenshot of the New streaming semantic model dialog, showing defaults for the Semantic model name and Values from stream fields.

  7. 返回 Power BI 工作区,创建新的仪表板,然后在屏幕顶部选择“编辑”>“添加磁贴”。

  8. 依次选择“自定义流式处理数据”和“下一步”。

  9. 在“添加自定义流式处理数据磁贴”页上,选择新的流式处理语义模型,然后选择“下一步”

    使用示例语义模型。 通过向折线图添加值字段,然后添加其他磁贴,可以获得类似于以下屏幕截图的实时仪表板:

    Screenshot of the Environmental sensors dashboard, showing the results in real-time.

继续创建你自己的语义模型,并将实时数据流式传输到 Power BI。

问题与解答

以下是有关 Power BI 中的实时流式处理的一些常见问题和解答。

是否可以对推送或流式处理语义模型使用筛选器?

流式处理语义模型不支持筛选。 对于推送语义模型,你可以创建报表、筛选报表,然后将筛选的视觉对象固定到仪表板。 然而,没有办法更改仪表板上视觉对象的筛选器。

可以将实时报表磁贴单独固定到仪表板,然后你可以更改筛选器。 但是,实时报表磁贴不会随着数据的推送而实时更新。 必须通过选择仪表板页面右上角的“刷新”图标来手动更新视觉对象。

将筛选器应用于具有毫秒级精度的 DateTime 字段的语义模型时,不支持等效运算符。 大于 > 或小于 < 等运算符可以正常运行。

如何查看推送或流式处理语义模型的最新值?

流式处理语义模型设计用于显示最新数据。 可以使用“卡片”流式处理视觉对象类型轻松查看最新的数值。 卡片视觉对象不支持 DateTimeText 数据类型。

对于推送语义模型,如果架构中有时间戳,你可以尝试使用 last N 筛选器创建报表视觉对象。

如何对实时语义模型进行建模?

由于数据不会永久存储,因此不能对流式处理语义模型进行建模。 对于推送数据集,可以使用创建语义模型 REST API 创建具有关系和度量值的语义模型,并使用更新表 REST API 将度量值添加到现有表。

如何清除推送或流式处理语义模型上的所有值?

在推送语义模型中,可以使用删除行 REST API 调用。 没有办法从流式处理语义模型中清除数据,但数据将在一个小时后自行清除。

如果设置了到 Power BI 的 Azure 流分析输出,但没有看到它显示在 Power BI 中,这是怎么回事?

执行以下步骤来排查问题:

  1. 重启 Azure 流分析作业。
  2. 尝试在 Azure 流分析中重新授权 Power BI 连接。
  3. 确保在 Power BI 服务中检查为 Azure 流分析输出指定的同一工作区。
  4. 确保 Azure 流分析查询使用 INTO 关键字显式输出到 Power BI 输出。
  5. 确定是否有数据流流经 Azure 流分析作业。 只有在传输数据时才会创建语义模型。
  6. 查看 Azure 流分析日志,以了解是否存在任何警告或错误。

自动页面刷新

可以在报表页面级别使用自动页面刷新,为仅在使用页面时才处于活动状态的视觉对象设置刷新间隔。 自动页面刷新仅适用于 DirectQuery 数据源。 最小刷新间隔取决于发布报表的工作区的类型,以及高级工作区的容量管理设置。

有关自动页面刷新的详细信息,请参阅 Power BI 中的自动页面刷新