在模型驱动应用主窗体中嵌入 Power BI 报表
您可以使用 Power Apps 模型驱动应用中的 Power BI 报表将丰富的报表和分析带入您的主窗体,让用户完成更多任务。 这可以解锁跨系统聚合数据的能力,并将其自定义到单个记录的上下文。
必备条件
嵌入 Power BI 内容是一个可选功能,默认情况下所有环境均禁用。 在嵌入 Power BI 内容之前,必须将其启用。 详细信息:在组织中启用 Power BI 可视化效果化。
此功能需要导出解决方案,修改后替换 XML 片段,然后再导入到环境中。 请确保仅通过非托管解决方案在开发环境中导入更改。 请参阅导入、更新和导出解决方案,了解如何为现有的非托管解决方案安装更新。
不使用上下文筛选嵌入
您可以通过嵌入 Power BI 报表来使用它们,并获取完全相同的报表。 这不会将它们置于当前模型驱动窗体的上下文中,因此,您将在表的所有记录中获取相同报表。 例如,下列报表一次可以显示所有客户的地理位置,对于显示摘要信息很有用。
您可以通过以下步骤自定义主窗体 XML controls
节点,让它可以托管嵌入的 Power BI 报表和磁贴:
在您的开发环境中,创建一个解决方案并添加包含您希望嵌入的 Power BI 报表显示的主窗体的表。 将表添加到解决方案时,选择选择组件选项。 然后,只添加表的主窗体。
在解决方案中编辑表格的主表单,并在要嵌入 Power BI 报表的位置添加一个占位符子网格。
- 在窗体设计器中更新子网格的标签和名称。
将解决方案导出为非托管解决方案,并提取解决方案包 zip 文件中的所有文件。 然后,编辑 customizations.xml 文件并找到子网格的名称。 替换自定义.xml 文件中
<control>
块内提供的 XML 代码。 可以调整父cell
节点中的rowspan
以改变嵌入 Power BI 报告的大小。<cell id="{7d18b61c-c588-136c-aee7-03e5e74a09a1}" showlabel="true" rowspan="20" colspan="1" auto="false" solutionaction="Added"> <labels> <label languagecode="1033" description="Accounts (Parent Account)"/> </labels> <control id="unfilteredreport" classid="{8C54228C-1B25-4909-A12A-F2B968BB0D62}"> <parameters> <PowerBIGroupId>00000000-0000-0000-0000-000000000000</PowerBIGroupId> <PowerBIReportId>544c4162-6773-4944-900c-abfd075f6081</PowerBIReportId> <TileUrl>https://app.powerbi.com/reportEmbed?reportId=544c4162-6773-4944-900c-abfd075f6081</TileUrl> </parameters> </control> </cell>
重要提示
请务必使用 XML 示例中所示的控件
classid="{8C54228C-1B25-4909-A12A-F2B968BB0D62}"
。- 对复制到 Power BI 报表的 customizations.xml 文件中的窗体 XML 进行以下更改。 此表介绍您需要更改为上一个 XML 示例中的元素的值。
属性 说明 PowerBIGroupId Power BI 工作区 ID。 如果您的报告位于我的工作区中,则工作区 ID 为 00000000-0000-0000-0000-000000000000。 否则,添加工作区 ID。 您可以在 Power BI 服务 URL 中查找工作区 ID。 详细信息:查找 Power BI 工作区和报表 ID。 PowerBIReportId Power BI 报表 ID。 将此替换为要嵌入的报表。 您可以在 Power BI 服务 URL 中找到您的报表的 ID。 详细信息:查找 Power BI 工作区和报表 ID TileUrl 您要嵌入的 Power BI 报表 URL。 请确保使用正确的 Power BI 子域名称(您可能需要将 app.powerbi.com 替换为您自己的名称)和报表 ID(将 reportId=544c4162-6773-4944-900c-abfd075f6081 替换为您自己的信息)。 例如, https://app.powerbi.com/reportEmbed?reportId=544c4162-6773-4944-900c-abfd075f6081
。- 对复制到 Power BI 报表的 customizations.xml 文件中的窗体 XML 进行以下更改。 此表介绍您需要更改为上一个 XML 示例中的元素的值。
使用之前提取的所有解决方案文件创建一个 zip 文件。 然后,将解决方案导入开发环境。
使用上下文筛选嵌入
您可以通过对当前的模型驱动窗体应用上下文筛选器来使 Power BI 报表更有意义,以使报表根据当前行的属性进行筛选。 例如,通过使用客户名称筛选 Power BI 报表,以下报表显示客户的地理位置。 此选项允许单个报表显示表的所有行的加入上下文的信息。
筛选通过在 <parameter>
块中添加 <PowerBIFilter>
元素进行,如此处所示。 您可以使用窗体表的任何属性来构造筛选器表达式。 详细信息:通过构造筛选器了解如何创建您自己的筛选器。
<control id="filteredreport" classid="{8C54228C-1B25-4909-A12A-F2B968BB0D62}">
<parameters>
<PowerBIGroupId>00000000-0000-0000-0000-000000000000</PowerBIGroupId>
<PowerBIReportId>544c4162-6773-4944-900c-abfd075f6081</PowerBIReportId>
<TileUrl>https://xyz.powerbi.com/reportEmbed?reportId=544c4162-6773-4944-900c-abfd075f6081</TileUrl>
<PowerBIFilter>{"Filter": "[{\"$schema\":\"basic\",\"target\":{\"table\":\"table_name_of_power_bi_dataset\",\"column\":\"power_bi_field\"},\"operator\":\"In\",\"values\":[$a],\"filterType\":1}]", "Alias": {"$a": "field_name_in_powerapps_to_filter"}}</PowerBIFilter>
</parameters>
</control>
请注意,这使用与未筛选的报表嵌入相同的控件,因此控件类 ID 保持不变。
此表介绍前一个 XML 示例中使用的所有其他属性。
属性 | 描述 |
---|---|
PowerBIFilter | 通过作为参数传递窗体属性将 Power BI 报表置于上下文的筛选器表达式。 为了更加易读,筛选器按如下方式构造。 筛选表达式不能是逗号分隔的值列表。 |
{
"Filter": "[{
\"$schema\":\"basic\",
\"target\":{
\"table\":\"table_name_of_power_bi_dataset\",
\"column\":\"power_bi_field\"
},
\"operator\":\"In\",
\"values\":[$a, $b],
\"filterType\":1
}]",
"Alias": {
"$a": "field1_name_in_powerapps_to_filter",
"$b":"field2_name_in_powerapps_to_filter"
}
}
前一个表达式的目标部分标识应用筛选器的表和列。 运算符标识确定从 Power Apps 模型驱动型应用传递的数据的逻辑和值。 若要以通用方式参数化,通过使用别名构造值。 在上一个表达式中,传递了客户的 firstname 和 lastname,二者都在 Power BI 报表中的客户名称列搜索。 请注意 firstname 和 lastname 是客户表的属性的唯一名称,其值将在此处传递。
可以通过查看构造筛选器中的示例并为 $schema 和 filterType 提供适当的值来创建更复杂的筛选器表达式。 确保使用 " 转义过滤器部分中的每个字面,以便正确生成 JSON。
查找 Power BI 工作区和报表 ID
- 此示例的工作区 ID 为 efc85277-2bdb-47bc-9762-363f64335108。
- 此示例的报表 ID 为 643ab643-7126-4a57-bd82-ca8f1fb676fc。
已知问题和限制
此集成只在统一接口客户端可用,并且在支持的 Web 浏览器和移动设备上。
在 Power Apps 窗体设计器中打开此窗体将不会以有意义的方式显示控件。 这是因为此控件在窗体设计器外自定义。
系统将使用用户的 Power Apps 用户名和密码自动进行身份验证后进入 Power BI。 如果具有匹配凭据的 Power BI 客户不存在,登录提示显示如下。
如果使用错误的账户登录 Power BI,则不会显示任何数据。 若要使用正确的凭据登录,请先注销,然后再次登录。
显示在 Power Apps 内的报表数据的视图与 Power BI 相同,Power Apps 安全角色和特权不会影响显示的数据。 因此,数据基本上与 Power BI 数据集创建者看到的相同。 若要应用类似于 Power Apps 安全角色和团队的数据访问限制,请使用使用 Power BI 的行级安全性 (RLS)。
如果窗体在导入解决方案并发布自定义项之后未显示 Power BI 报表,请在模型驱动窗体编辑器中打开它并保存,以便窗体 JSON 重新生成。
只有在没有上下文筛选的情况下才支持在窗体上嵌入 Power BI 磁贴。
嵌入 Power BI 报表不支持跨租户引用。 例如,即使已通过 Power BI 与 Fabrikam 租户中的用户共享了要嵌入的报表,当前仍不支持将属于 Contoso 租户的 Power BI 报表嵌入到属于 Fabrikam 租户的模型驱动应用中。
作为 Power BI 仪表板一部分的固定报表并不意味着它们就是交互式报表。 如果您希望使用交互式 Power BI 报表,请直接嵌入它们,而不是将其固定到仪表板。
常见问题
- 在可能需要时,未在控制参数的
TileUrl
节点中指定组 ID。 此示例包含组 ID。
<parameters>
<PowerBIGroupId>fd266a4c-9a02-4553-9310-80e05ee844f3</PowerBIGroupId>
<PowerBIReportId>544c4162-6773-4944-900c-abfd075f6081</PowerBIReportId>
<TileUrl>https://xyz.powerbi.com/reportEmbed?reportId=544c4162-6773-4944-900c-abfd075f6081&groupId=fd266a4c-9a02-4553-9310-80e05ee844f3</TileUrl>
</parameters>
- 字段在 Power BI 和 Dataverse 中具有不同的数据类型。 它们需要是相同类型,例如 Power BI 中的字符串和 Dataverse 中的字符串。
- 字符串字段在 Power BI 筛选器中没有转义引号。 请注意
values
具有[\"$a\"]
,而非[$a]
。
{
"Filter": "[{
\"$schema\":\"basic\",
\"target\":{
\"table\":\"table_name_of_power_bi_dataset\",
\"column\":\"power_bi_field\"
},
\"operator\":\"In\",
\"values\":[\"$a\"],
\"filterType\":1
}]",
"Alias": {
"$a": "field_name_in_powerapps_to_filter",
}
}