在模型驱动应用主窗体中嵌入 Power BI 报表

您可以使用 Power Apps 模型驱动应用中的 Power BI 报表将丰富的报表和分析带入您的主窗体,让用户完成更多任务。 这可以解锁跨系统聚合数据的能力,并将其自定义到单个记录的上下文。  

必备条件

嵌入 Power BI 内容是一个可选功能,默认情况下所有环境均禁用。 在嵌入 Power BI 内容之前,必须将其启用。 详细信息:在组织中启用 Power BI 可视化效果化

此功能需要导出解决方案,修改后替换 XML 片段,然后再导入到环境中。 请确保仅通过非托管解决方案在开发环境中导入更改。 请参阅导入、更新和导出解决方案,了解如何为现有的非托管解决方案安装更新。

不使用上下文筛选嵌入

您可以通过嵌入 Power BI 报表来使用它们,并获取完全相同的报表。 这不会将它们置于当前模型驱动窗体的上下文中,因此,您将在表的所有记录中获取相同报表。 例如,下列报表一次可以显示所有客户的地理位置,对于显示摘要信息很有用。

不使用上下文过滤的嵌入式 Power BI 报告。

您可以通过以下步骤自定义主窗体 XML controls 节点,让它可以托管嵌入的 Power BI 报表和磁贴:

  1. 在您的开发环境中,创建一个解决方案并添加包含您希望嵌入的 Power BI 报表显示的主窗体的表。 将表添加到解决方案时,选择选择组件选项。 然后,只添加表的主窗体。

  2. 在解决方案中编辑表格的主表单,并在要嵌入 Power BI 报表的位置添加一个占位符子网格。

    • 在窗体设计器中更新子网格的标签和名称。

    Power BI 嵌入占位符

  3. 将解决方案导出为非托管解决方案,并提取解决方案包 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
  4. 使用之前提取的所有解决方案文件创建一个 zip 文件。 然后,将解决方案导入开发环境。

使用上下文筛选嵌入

您可以通过对当前的模型驱动窗体应用上下文筛选器来使 Power BI 报表更有意义,以使报表根据当前行的属性进行筛选。 例如,通过使用客户名称筛选 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 模型驱动型应用传递的数据的逻辑和值。 若要以通用方式参数化,通过使用别名构造值。 在上一个表达式中,传递了客户的 firstnamelastname,二者都在 Power BI 报表中的客户名称列搜索。 请注意 firstnamelastname 是客户表的属性的唯一名称,其值将在此处传递。

可以通过查看构造筛选器中的示例并为 $schema 和 filterType 提供适当的值来创建更复杂的筛选器表达式。 确保使用 " 转义过滤器部分中的每个字面,以便正确生成 JSON。

查找 Power BI 工作区和报表 ID

  1. 此示例的工作区 ID 为 efc85277-2bdb-47bc-9762-363f64335108。
  2. 此示例的报表 ID 为 643ab643-7126-4a57-bd82-ca8f1fb676fc。 Power BI 工作区 Id 和报告 Id 示例

已知问题和限制

  • 此集成只在统一接口客户端可用,并且在支持的 Web 浏览器和移动设备上。

  • 在 Power Apps 窗体设计器中打开此窗体将不会以有意义的方式显示控件。 这是因为此控件在窗体设计器外自定义。

  • 系统将使用用户的 Power Apps 用户名和密码自动进行身份验证后进入 Power BI。 如果具有匹配凭据的 Power BI 客户不存在,登录提示显示如下。

    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&amp;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",
	        }
	}

另请参见

在 Power Apps 模型驱动的个人仪表板中嵌入 Power BI 仪表板

将 Power BI 与 Dynamics 365 应用结合使用