对嵌入式应用程序进行故障排除
本文讨论从 Power BI 嵌入内容时可能出现的一些常见问题。
故障排除工具
Fiddler 跟踪
Fiddler 是 Telerik 的免费工具,用于监视 HTTP 流量。 可以使用来自客户端计算机的 Power BI API 查看流量。 此工具可能会显示错误和其他相关信息。
浏览器中用于前端调试的 F12 键
F12 密钥会在浏览器中启动开发人员窗口。 此工具允许查看网络流量并查看其他有价值的信息。
从 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(以及故障排除的错误详细信息)。 联系微软客服时提供请求 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 应用,并从 概述复制它。
主体对象 ID
主体对象 ID(也称为 对象 ID)是与 Microsoft Entra 应用程序关联的 服务主体 对象的唯一 ID。
若要获取主体对象 ID,请导航到Microsoft Entra 应用,然后从 概述中选择本地目录中 托管应用程序中的应用链接。
在 属性 部分中,复制 对象 ID。
认证
身份验证失败并显示 AADSTS70002 或 AADSTS50053
(AADSTS70002:验证凭据时出错。AADSTS50053:尝试使用不正确的用户 ID 或密码登录次数过多)
如果使用 Power BI Embedded 并Microsoft Entra 直接身份验证,则尝试登录时可能会收到类似于上一条消息的消息,因为未启用直接身份验证。
可以使用组织或服务主体范围内的 Microsoft Entra 策略重新启用直接身份验证。
建议仅按应用启用此策略。
若要创建此策略,需要具有在其中创建和分配此策略的目录的全局管理员身份。 下面是用于创建策略并将其分配给此应用程序的 SP 的示例脚本:
逐行运行以下 PowerShell 命令行(确保变量
$sp
结果中没有多个应用程序)。Connect-MgGraph -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://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/$policy.Id" } New-MgBetaServicePrincipalClaimMappingPolicyByRef -ServicePrincipalId $sp.Id ` -BodyParameter $params
分配策略后,在测试之前等待大约 15-20 秒的传播。
提供有效标识时生成令牌失败
由于以下各种原因,GenerateToken
可能会失败,并提供有效标识:
- 语义模型不支持有效的标识。
- 未提供用户名。
- 未提供角色。
- 未提供
DatasetId
。 - 用户没有正确的权限。
若要确定问题,请尝试以下步骤:
- 运行 获取数据集。 属性
IsEffectiveIdentityRequired
是否为真? - 任何
EffectiveIdentity
都需要用户名。 - 如果
IsEffectiveIdentityRolesRequired
为 true,则角色是必需的。 - 任何
EffectiveIdentity
都需要DatasetId
。 - 对于 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 门户中,导航到“Microsoft Entra ID”>“用户和组”>“用户设置”。
- 启用“用户可以同意应用代表他们访问公司数据”设置并保存更改。
- 管理员可以向应用程序授予权限 - 针对整个租户或特定用户。
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.microsoftonline.com/common/v2.0
用于对来宾Microsoft Entra 用户进行身份验证的 URL:
https://login.microsoftonline.com/<tenant ID>
若要查找租户 ID,请参阅 查找 Microsoft Entra 租户 ID 和主域名的具体指引。
有关详细信息,请参阅使应用程序成为多租户。
数据源
ISV 希望为同一数据源使用不同的凭据
数据源可以为一个主用户提供一组凭据。 如果需要使用不同的凭据,请创建更多主用户。 然后,将不同的凭据分配给每个主用户的使用环境,并使用该用户的 Microsoft Entra 令牌进行集成。
使用 IError 对象对嵌入式应用程序进行故障排除
使用 JavaScript SDK 中错误事件返回的 IError 对象来调试应用程序,并更好地了解错误的原因。
获取 IError 对象后,应查看适合所使用的嵌入类型的相应常见错误表。 将 IError 属性与表中 属性进行比较,并找到失败的可能原因。
Power BI 用户在嵌入时常见的错误
消息 | 详细消息 | 错误代码 | 可能的原因 |
---|---|---|---|
令牌已过期 | 访问令牌已过期,使用新的访问令牌重新提交 | 403 | 过期的令牌 |
PowerBIEntityNotFound | 获取报表失败 | 404 | |
参数无效 | 未指定 powerbiToken 参数 | N/A | |
加载报告失败 | 无法初始化 - 无法解析群集 | 403 | |
PowerBINotAuthorizedException | 获取报表失败 | 401 | |
令牌过期 | 访问令牌已过期,使用新的访问令牌重新提交。 无法呈现以下标题的报表视觉对象:视觉对象标题 | N/A | |
OpenConnectionError | 无法显示视觉对象。 无法呈现以下标题的报表视觉对象:视觉对象标题 | N/A | 在会话中打开与容量相关的报表时,容量遭暂停或删除 |
ExplorationContainer_FailedToLoadModel_DefaultDetails | 无法加载与此报表关联的模型架构。 请确保已连接到服务器,然后重试。 | N/A |
(使用嵌入令牌)为非 Power BI 用户嵌入内容时的典型错误
消息 | 详细消息 | 错误代码 | 可能的原因 |
---|---|---|---|
令牌过期 | 访问令牌已过期,使用新的访问令牌重新提交 | 403 | 过期的令牌 |
加载报告失败 | 获取报表失败 | 404 | |
加载报告失败 | 获取报表失败 | 403 | 报表 ID 与令牌不匹配 |
加载报告失败 | 获取报表失败 | 500 | 提供的报表 ID 不是 GUID |
参数无效 | 未指定 powerbiToken 参数 | N/A | |
报告加载失败 | 无法初始化 - 无法解析群集 | 403 | 令牌类型不正确或令牌无效 |
PowerBINotAuthorizedException | 获取报表失败 | 401 | 组 ID 错误/未经授权 |
令牌已过期 | 访问令牌已过期,使用新的访问令牌重新提交。 无法呈现以下标题的报表视觉对象:视觉对象标题 | N/A | |
OpenConnectionError | 无法显示视觉对象。 无法呈现以下标题的报表视觉对象:视觉对象标题 | N/A | 在会话中打开与容量相关的报表时,容量遭暂停或删除 |
ExplorationContainer_FailedToLoadModel_DefaultDetails | 无法加载与此报表关联的模型架构。 请确保已连接到服务器,然后重试。 | N/A |
获取报告失败 - 错误 401 - 自行解决
在 用户拥有数据 方案中,有时用户会收到 401 错误,该错误会在用户访问 Power BI 门户后自行解决。 发生 401 错误时,在应用中添加 RefreshUser 权限 调用,如 更新用户权限中所述。
语义模型
管理用户能看到的哪部分数据
任何具有语义模型的读取权限的用户都可以查看整个架构(表、列和度量值)和所有数据。 不能控制在同一语义模型中单独查看原始和聚合数据的权限。
若要管理用户可以查看的数据部分,请使用以下方法之一:
使用 Power BI 行级安全性 (RLS) 的行级筛选。
将数据分成不同的语义模型。 例如,可以创建仅包含聚合数据的语义模型,并让用户仅访问该语义模型。
内容呈现
若要解决嵌入式 Power BI 项(如报表和仪表板)中的呈现问题,请查看本部分。
验证 Power BI 项是否在 Power BI 服务中加载
若要排除应用程序 或嵌入 API的问题,请验证该项是否可以在 Power BI 服务(powerbi.com)中查看。
验证是否在 Power BI 嵌入式分析操场中加载 Power BI 项
若要排除应用程序的问题,请验证是否可以在 Power BI 嵌入式分析操场中查看 Power BI 项。
验证访问令牌是否未过期
出于安全考虑,访问令牌(Microsoft Entra 令牌或嵌入令牌)的生存期有限。 应不断监视访问令牌,并在需要时刷新它。 有关详细信息,请参阅刷新访问令牌。
性能
若要获得性能最佳的嵌入内容,建议遵循 Power BI 嵌入式分析最佳做法。
相关内容
更多问题? 在 Power BI 社区提问