对嵌入式应用程序进行故障排除

本文讨论从 Power BI 嵌入内容时可能出现的一些常见问题。

故障排除工具

Fiddler 跟踪

Fiddler 是 Telerik 的免费工具,用于监视 HTTP 流量。 可以使用来自客户端计算机的 Power BI API 查看流量。 此工具可能会显示错误和其他相关信息。

Fiddler 工具输出窗口的屏幕截图,其中显示了 Power BI API HTTP 流量。

用于前端调试的浏览器中的 F12

F12 密钥会在浏览器中启动开发人员窗口。 此工具允许查看网络流量并查看其他有价值的信息。

Web 浏览器开发人员窗口的“网络”选项卡的屏幕截图,其中显示了网络流量。

从 Power BI 响应中提取错误详细信息

此代码片段演示如何从 HTTP 异常中提取错误详细信息:

public static string GetExceptionText(this HttpOperationException exc)
{
    var errorText = string.Format("Request: {0}\r\nStatus: {1} ({2})\r\nResponse: {3}",
    exc.Request.Content, exc.Response.StatusCode, (int)exc.Response.StatusCode, exc.Response.Content);
    if (exc.Response.Headers.ContainsKey("RequestId"))
    {
        var requestId = exc.Response.Headers["RequestId"].FirstOrDefault();
        errorText += string.Format("\r\nRequestId: {0}", requestId);
    }

    return errorText;
}

建议记录请求 ID(以及故障排除的错误详细信息)。 联系 Microsoft 支持时提供请求 ID。

应用注册

应用注册失败

如果没有足够的权限注册应用,Azure 门户或 Power BI 应用注册页中的错误消息将通知你。 若要注册应用程序,你必须是 Microsoft Entra 租户中的管理员,或者必须为非管理员用户启用应用程序注册。

注册新应用时,Power BI 服务不会显示在 Azure 门户中

至少有一个用户必须注册 Power BI。 如果您未在 API 列表中看到 Power BI 服务,说明没有用户注册 Power BI。

应用程序对象 ID 和主体对象 ID 之间的区别是什么?

注册 Microsoft Entra 应用时,有两个名为 对象 ID 的参数。 本部分介绍每个参数的用途以及如何获取它。

应用程序对象 ID

应用程序对象 ID(也称为对象 ID)是Microsoft Entra 应用程序对象的唯一 ID。

若要获取应用程序对象 ID,请导航到Microsoft Entra 应用,并从 “概述”复制它。

Azure 门户窗口的屏幕截图,其中显示了Microsoft Entra 应用程序的“概述”边栏选项卡中的对象 ID。

主体对象 ID

主体对象 ID(也称为 对象 ID)是与 Microsoft Entra 应用程序关联的 服务主体对象 的唯一 ID。

若要获取主体对象 ID,请导航到 Microsoft Entra 应用,然后从 “概述”中选择 本地目录中托管应用程序中的应用链接。

Azure 门户窗口的屏幕截图,其中显示了 Microsoft Entra 应用程序的“概述”边栏选项卡中的“在本地目录中托管的应用程序”选项。

“属性” 部分复制 对象 ID

Azure 门户窗口的屏幕截图,其中显示了Microsoft Entra 应用程序的“概述”边栏选项卡中“属性”部分中的主体对象 ID。

Authentication

身份验证失败,AADSTS70002或AADSTS50053

(AADSTS70002:验证凭据时出错。AADSTS50053:尝试使用不正确的用户 ID 或密码登录次数过多)

如果使用 Power BI Embedded 并Microsoft Entra 直接身份验证,则尝试登录时可能会收到类似于上一条消息的消息,因为未启用直接身份验证。

可以使用应用于组织的Microsoft Entra 策略或应用于服务主体的策略重新启用直接身份验证。

建议仅按应用启用此策略。

要创建此策略,您需要是所在目录的 全局管理员,这是您创建并分配该策略的地方。 下面是用于创建策略并将其分配给此应用程序的 SP 的示例脚本:

  1. 安装 Microsoft Graph PowerShell SDK

  2. 逐行运行以下 PowerShell 命令行(确保变量 $sp 没有多个应用程序)。

    Connect-MgGraph -Environment China -ClientId 'YOUR_CLIENT_ID' -TenantId 'YOUR_TENANT_ID' -Scopes "Directory.Read.All","Policy.ReadWrite.ApplicationConfiguration"
    
    $sp = Get-MgServicePrincipal -Filter "DisplayName eq 'Name_Of_Application'"
    
    $policy = New-MgBetaPolicyActivityBasedTimeoutPolicy -Definition @("{`"AllowCloudPasswordValidation`":true}") `
       -DisplayName EnableDirectAuth -IsOrganizationDefault:$false
    
    $params = @{
       "@odata.id" = "https://microsoftgraph.chinacloudapi.cn/v1.0/policies/claimsMappingPolicies/$policy.Id"
    }
    New-MgBetaServicePrincipalClaimMappingPolicyByRef -ServicePrincipalId $sp.Id `
       -BodyParameter $params
    

分配策略后,在测试之前等待大约 15-20 秒的传播。

在提供有效标识时生成令牌失败

GenerateToken 由于以下几个不同原因,提供的有效标识可能会失败:

  • 语义模型不支持有效的标识。
  • 未提供用户名。
  • 未提供角色。
  • DatasetId 未提供。
  • 用户没有正确的权限。

若要确定问题,请尝试以下步骤:

  • 运行 获取数据集。 属性 IsEffectiveIdentityRequired 是否为 true?
  • 必须为任何 EffectiveIdentity 提供用户名。
  • 如果 IsEffectiveIdentityRolesRequired 为 true,则需要角色。
  • DatasetId 是任何 EffectiveIdentity 必需的。
  • 对于 Analysis Services,主用户必须是网关管理员。

AADSTS90094:授予需要管理员权限

症状:

当非管理员用户在授予许可时首次尝试登录到应用程序时,则获取以下错误之一:

  •   ConsentTest needs permission to access resources in your organization that only an admin can grant. Ask an admin to grant permission to this app before you can use it.
    
  •   AADSTS90094: The grant requires admin permission.
    

    Azure 门户窗口登录对话框的屏幕截图,其中显示了同意测试权限错误。

管理员用户可以登录并成功授予许可。

根源:

租户的用户同意功能已被禁用。

可以修复以下几个问题:

  • 为整个租户启用用户同意(所有用户、所有应用程序):
  1. 在 Azure 门户中,导航到 Microsoft Entra ID>用户和组>用户设置
  2. 启用 用户可以同意应用程序代表他们访问公司数据 的设置,并保存更改。

Azure 门户的屏幕截图。

  • 管理员可以向应用程序授予权限 - 针对整个租户或特定用户。

CS1061 错误

如果遇到以下错误,请下载 Microsoft.IdentityModel.Clients.ActiveDirectory

'AuthenticationContext' does not contain a definition for 'AcquireToken' and no accessible 'AcquireToken' accepting a first argument of type 'AuthenticationContext' could be found (are you missing a using directive or an assembly reference?)

针对不同租户(来宾用户)的 Microsoft Entra 令牌

为组织嵌入内容时,若要允许 Microsoft Entra 的来宾用户访问您的内容,需要在authorityUri参数中指定租户 ID。

  • 用于在组织的租户中进行身份验证的 URL:

    https://login.partner.microsoftonline.cn/common/v2.0

  • 用于对来宾Microsoft Entra 用户进行身份验证的 URL:

    https://login.partner.microsoftonline.cn/<tenant ID>

若要查找租户 ID,可以使用 “查找Microsoft Entra 租户 ID 和主域名”中的说明。

有关详细信息,请参阅 “创建应用程序多租户”。

数据源

ISV 希望为同一数据源使用不同的凭据

数据源可以为一个主用户提供一组凭据。 如果需要使用不同的凭据,请创建更多主用户。 然后,将不同的凭据分配给每个主用户的上下文,并使用该用户的 Microsoft Entra 令牌进行嵌入。

使用 IError 对象对嵌入式应用程序进行故障排除

使用 JavaScript SDK 中错误事件返回的 IError 对象 调试应用程序,并更好地了解错误的原因。

获取 IError 对象后,应查看适合所使用的嵌入类型的相应常见错误表。 将 IError 属性 与表中的属性进行比较,并找到失败的可能原因。

Power BI 用户嵌入时的常见错误

Message 详细消息 错误代码 可能的原因
令牌已过期 访问令牌已过期,使用新的访问令牌重新提交 403 过期的令牌
PowerBI 实体未找到 获取报告失败 404
  • 错误的报表 ID
  • 报表不存在
  • 参数无效 未指定 powerbiToken 参数 N/A
  • 未提供访问令牌
  • 未提供报告标识
  • 加载报告失败 无法初始化 - 无法解析群集 403
  • 无效的访问令牌
  • 嵌入类型与标记类型不匹配
  • PowerBI未授权异常 获取报告失败 401
  • 组 ID 错误
  • 未授权组
  • 令牌已过期 访问令牌已过期,使用新的访问令牌重新提交。 无法呈现名为视觉标题的报表视觉对象 N/A
  • 查询数据
  • 过期的令牌
  • OpenConnectionError 无法显示图像。 无法呈现标题为视觉名称的报表视觉对象 N/A 在与容量相关的报表在会话中打开时,该容量被暂停或删除。
    探索容器_无法加载模型_默认详情 无法加载与此报表关联的模型架构。 请确保已连接到服务器,然后重试。 N/A
  • 功能暂停
  • 已删除容量
  • 为非 Power BI 用户嵌入时的典型错误(使用嵌入令牌)

    Message 详细消息 错误代码 可能的原因
    令牌已过期 访问令牌已过期,使用新的访问令牌重新提交 403 过期的令牌
    报告加载失败 获取报告失败 404
  • 错误的报表 ID
  • 报表不存在
  • 加载报告失败 获取报告失败 403 报表 ID 与令牌不匹配
    加载报告失败 获取报告失败 500 报告提供的 ID 不是 GUID
    参数无效 未指定 powerbiToken 参数 N/A
  • 未提供访问令牌
  • 未提供报告 ID
  • 报告加载失败 无法初始化 - 无法解析群集 403 令牌类型错误或无效令牌
    PowerBINotAuthorizedException 获取报告失败 401 错误或未经授权的组ID
    令牌已过期 访问令牌已过期,使用新的访问令牌重新提交。 无法渲染题为visual title的报表视觉对象 N/A
  • 查询数据
  • 过期的令牌
  • OpenConnectionError 无法显示图像。 无法呈现名为visual title的报表可视化。 N/A 在会话中打开与容量相关的报表期间,容量被暂停或删除
    ExplorationContainer_FailedToLoadModel_DefaultDetails 无法加载与此报表关联的模型架构。 请确保已连接到服务器,然后重试。 N/A
  • 容量已暂停
  • 已删除的容量
  • 获取报告失败 - 错误 401 - 自行解决

    用户拥有数据 方案中,有时用户会收到 401 错误,该错误会在用户访问 Power BI 门户后自行解决。 发生 401 错误时,在应用中添加 RefreshUser 权限 调用,如 更新用户权限中所述。

    语义模型

    管理用户能查看的数据部分

    任何具有语义模型的读取权限的用户都可以查看整个架构(表、列和度量值)和所有数据。 不能控制在同一语义模型中单独查看原始和聚合数据的权限。

    若要管理用户可以查看的数据部分,请使用以下方法之一:

    • 将数据分成不同的语义模型。 例如,可以创建仅包含聚合数据的语义模型,并让用户仅访问该语义模型。

    内容呈现

    若要解决嵌入式 Power BI 项(如报表和仪表板)中的呈现问题,请查看本部分。

    验证 Power BI 项是否在 Power BI 服务中加载

    若要排除应用程序 或嵌入 API 的问题,请验证该项是否可以在 Power BI 服务(powerbi.com)中查看。

    验证 Power BI 项目是否在 Power BI 嵌入式分析沙盒中加载

    若要排除应用程序的问题,请验证 Power BI 项是否可以在 Power BI 嵌入式分析场中查看。

    验证访问令牌是否未过期

    出于安全考虑,访问令牌(Microsoft Entra 令牌或嵌入令牌)的生存期有限。 应不断监视访问令牌,并在需要时刷新它。 有关详细信息,请参阅 “刷新访问令牌”。

    Performance

    若要获得最佳的嵌入式内容,建议遵循 Power BI 嵌入式分析最佳做法

    Power BI Embedded 常见问题解答

    更多问题? 在 Power BI 社区提问