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

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

必备条件

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

此功能需要导出解决方案、进行修改以添加 XML 片段,然后重新导入到环境。 请务必仅通过托管解决方案在您的目标环境中导入所做的更改。 请参阅导入、更新和导出解决方案获取为现有托管解决方案安装更新的指导。

不使用上下文筛选嵌入

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

不使用上下文筛选的嵌入式 Power BI 报表。

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

  1. 在您的开发环境中,创建一个解决方案并添加包含您希望嵌入的 Power BI 报表显示的主窗体的表。

    • 如果表已存在于您将导入解决方案的目标环境中,在将表添加到解决方案时,选择选择组件选项。 然后,只添加表的主窗体。
    • 如果表不存在于您将导入解决方案的目标环境中,在将表添加到解决方案时,选择包括所有组件
  2. 将该解决方案作为托管解决方案导出。

  3. 提取解决方案包 zip 文件中的所有文件。 然后,编辑 customizations.xml 文件,并将下面提供的 XML 代码添加到 customizations.xml 文件中 <forms type="main"> 节点内的 <sections> 块内。

<section id="{d411658c-7450-e1e3-bc80-07021a04bcc2}" locklevel="0" showlabel="true" IsUserDefined="0" name="tab_4_section_1" labelwidth="115" columns="1" layout="varwidth" showbar="false">
    <labels>
        <label languagecode="1033" description="Unfiltered Power BI embedding demo"/>
    </labels>
    <rows>
        <row>
            <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>
        </row>
        <row/>
    </rows>
</section>

重要

请务必使用 XML 示例中所示的控件 classid="{8C54228C-1B25-4909-A12A-F2B968BB0D62}"

  1. 对复制到 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
solutionaction="Added" 如果表已存在于目标环境中,保留 XML 示例中提供的单元格元素的 solutionaction=Added 参数。 如果表不存在于目标环境中,删除 solutionaction=Added 参数。
  1. 使用之前提取的所有解决方案文件创建一个 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。

导入前删除未经修改的属性

将解决方案导入到目标环境之前,确保 customizations.xml 文件的 formXml 部分中不包含未经修改的属性。 如果包含 Power BI控件 XML 的 XML 中有未经修改的属性,请先删除该属性,再将解决方案导入到目标环境中。 例如,将 <systemform unmodified="1"> 替换为 <systemform>

查找 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 应用结合使用

备注

您能告诉我们您的文档语言首选项吗? 进行简短调查。(请注意,此调查是英文版调查)

此调查大约需要七分钟。 不会收集个人数据(隐私声明)。