嵌入式应用程序疑难解答
- 版本 :2023.1(当前版本)
嵌入式应用程序疑难解答
本文介绍了从 Power BI 嵌入内容时可能会遇到的一些常见问题。
故障排除工具
Fiddler 跟踪
Fiddler 是 Telerik 提供的一个免费工具,可以监视 HTTP 流量。 可以从客户端计算机通过 Power BI API 进行通信。 此工具可能会显示错误和其他相关信息。
浏览器中的 F12,用于前端调试
F12 键在你的浏览器中启动开发人员窗口。 通过此工具可以查看网络流量和其他有价值的信息。
从 Power BI 响应中提取错误详细信息
下面的代码片段展示了如何从 HTTP 异常中提取错误详细信息:
C#
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 应用注册页面中的错误消息将通知你。 若要注册应用程序,必须是 Azure AD 租户中的管理员,或者必须为非管理员用户启用应用程序注册。
注册新应用时 Power BI 服务不会显示在 Azure 门户中
至少一个用户必须注册 Power BI。 如果没看到 API 列表中列出 Power BI 服务,则表示没有用户注册 Power BI 。
应用程序对象 ID 与主体对象 ID 之间有何区别?
注册 Azure AD 应用时,有两个名为“对象 ID”的参数。 本节介绍每个参数的用途以及如何获取该参数。
应用程序对象 ID
应用程序对象 ID(也可简称为“对象 ID”)是 Azure AD 应用程序对象的唯一 ID。
要获取应用程序对象 ID,请导航到 Azure AD 应用,然后从“概述”中复制它。
主体对象 ID
主体对象 ID(也可简称为“对象 ID”)是与 Azure AD 应用程序关联的服务主体对象的唯一 ID。
要获取主体对象 ID,请导航到 Azure AD 应用,并从“概述”中选择“本地目录中的托管应用程序”中的应用链接。
在“属性”部分,复制“对象 ID”。
身份验证
身份验证失败并显示 AADSTS70002 或 AADSTS50053
(AADSTS70002:验证凭据时出错。AADSTS50053:使用不正确的用户 ID 或密码尝试登录的次数过多)
如果你正在使用 Power BI Embedded 和 Azure AD 直接身份验证,则在尝试登录时可能会收到上述消息,因为直接身份验证已不再使用。
可以使用组织或服务主体范围内的 Azure AD 策略重新启用直接身份验证。
建议仅逐个应用地启用此策略。
若要创建此策略,需要具有在其中创建和分配此策略的目录的全局管理员身份。 以下为创建策略并将其分配到此应用程序的 SP 的示例脚本:
安装 Azure AD 预览版 PowerShell 模块。
逐行运行以下 PowerShell 命令(确保变量 $sp 的结果只有一个应用程序)。
PowerShell
Connect-AzureAD
PowerShell
$sp = Get-AzureADServicePrincipal -SearchString "Name_Of_Application"
PowerShell
$policy = New-AzureADPolicy -Definition @("{`"HomeRealmDiscoveryPolicy`":{`"AllowCloudPasswordValidation`":true}}")
-DisplayName EnableDirectAuth -Type HomeRealmDiscoveryPolicy -IsOrganizationDefault $false
PowerShell
Add-AzureADServicePrincipalPolicy -Id $sp.ObjectId -RefObjectId $policy.Id
分配策略后,请等待传播完成(大约 15 到 20 秒),然后再进行测试。
提供有效标识时生成令牌失败
由于几个不同的原因,GenerateToken
可能会失败,并提供有效标识。
数据集不支持有效标识
未提供 Username
未提供 Role
未提供 DatasetId
用户没有正确的权限
若要确定问题,请尝试以下步骤:
执行获取数据集。 属性 IsEffectiveIdentityRequired 是否为 true?
Username 是任何 EffectiveIdentity 必需的。
如果 IsEffectiveIdentityRolesRequired 为 true,则 Role 是必需的。
DatasetId 是任何 EffectiveIdentity 必需的。
对于 Analysis Services,主用户必须是网关管理员。
AADSTS90094:授予需要管理员权限
表现:
非管理员用户首次尝试登录到应用程序并授予许可时,会收到以下错误之一:
ConsentTest 需要具有访问组织中的资源的权限,而只有管理员才能授予此权限。 请让管理员授予访问此应用的权限,否则你将无法使用该应用。
AADSTS90094:授予需要管理员权限。
管理员用户可以成功登录并授予许可。
根本原因:
对租户禁用用户同意。
可能会出现几个修补程序:
对整个租户(所有用户和所有应用程序)启用用户同意
在 Azure 门户中,导航到“Azure Active Directory”= >“用户和组”= >“用户设置”
启用“用户可以同意应用代表他们访问公司数据”设置并保存更改
管理员可以授予(整个租户或特定用户)访问应用程序的权限。
CS1061 错误
如果遇到“'AuthenticationContext' 不包含 'AcquireToken' 的定义,并且找不到接受 'AuthenticationContext' 类型的第一个参数的可访问 'AcquireToken' (是否缺少 using 指令或程序集引用?)”错误,请下载 Microsoft.IdentityModel.Clients.ActiveDirectory。
其他租户的 Azure AD 令牌(来宾用户)
当你为组织嵌入时,若要允许 Azure AD 来宾用户访问内容,你需要在 authorityUri
参数中指定租户 ID。
用于在组织的租户中进行身份验证的 URL:
https://login.microsoftonline.com/common/v2.0
用于对来宾 Azure AD 用户进行身份验证的 URL:
https://login.microsoftonline.com/
若要查找租户 ID,可以按照查找 Microsoft Azure AD 租户 ID 和主域名中的说明进行操作。
有关详细信息,请参阅如何使用多租户应用程序模式使任何 Azure Active Directory 用户登录。
数据源
ISV 希望相同的数据源有不同的凭据
数据源可以为一个主用户提供一组凭据。 如果你需要使用不同的凭据,请创建其他的主用户。 然后,在每个主用户上下文中分配不同的凭据,并使用该用户的 Azure AD 标记嵌入。
使用 IError 对象对嵌入式应用程序进行故障排查
使用 JavaScript SDK 的 error 事件中返回的 IError 对象 调试应用程序,并更好地了解错误的原因。
获取 IError 对象之后,应查找适合你使用的嵌入类型的对应常见错误表。 将 IError 属性 与表中的该属性进行比较,查找失败的可能原因。
为 Power BI 用户嵌入内容时的典型错误
消息 | 详细的消息 | 错误代码 | 可能的原因 |
---|---|---|---|
TokenExpired | 访问令牌已过期,请使用新的访问令牌重新提交 | 403 | 令牌已过期 |
PowerBIEntityNotFound | 获取报表失败 | 404 |
|
参数无效 | 未指定 powerbiToken 参数 | 不适用 |
|
LoadReportFailed | 初始化失败,无法解析群集 | 403 |
|
PowerBINotAuthorizedException | 获取报表失败 | 401 |
|
TokenExpired | 访问令牌已过期,请使用新的访问令牌重新提交。 无法呈现以下标题的报表视觉对象:视觉对象标题 | 不适用 | 查询数据令牌已过期 |
OpenConnectionError | 无法显示视觉对象。 无法呈现以下标题的报表视觉对象:视觉对象标题 | 不适用 | 在会话中打开与容量相关的报表时,容量遭暂停或删除 |
ExplorationContainer_FailedToLoadModel_DefaultDetails | 无法加载与此报表关联的模型架构。 请确保你已连接到服务器,然后重试。 | 不适用 |
|
(使用嵌入令牌)为非 Power BI 用户嵌入内容时的典型错误
消息 | 详细的消息 | 错误代码 | 原因 |
---|---|---|---|
TokenExpired | 访问令牌已过期,请使用新的访问令牌重新提交 | 403 | 令牌已过期 |
LoadReportFailed | 获取报表失败 | 404 |
|
LoadReportFailed | 获取报表失败 | 403 | 报表 ID 与令牌不匹配 |
LoadReportFailed | 获取报表失败 | 500 | 提供的报表 ID 不是 guid |
参数无效 | 未指定 powerbiToken 参数 | 不适用 |
|
LoadReportFailed | 初始化失败,无法解析群集 | 403 | 令牌类型错误,令牌不正确 |
PowerBINotAuthorizedException | 获取报表失败 | 401 | 错误/为组 ID 取消授权 |
TokenExpired | 访问令牌已过期,请使用新的访问令牌重新提交。 无法呈现以下标题的报表视觉对象:视觉对象标题 | 不适用 | 查询数据令牌已过期 |
OpenConnectionError | 无法显示视觉对象。 无法呈现以下标题的报表视觉对象:视觉对象标题 | 不适用 | 在会话中打开与容量相关的报表时,容量遭暂停或删除 |
ExplorationContainer_FailedToLoadModel_DefaultDetails | 无法加载与此报表关联的模型架构。 请确保你已连接到服务器,然后重试。 | 不适用 |
|
获取报告失败 - 错误 401 - 自行解决
有时,“用户拥有数据”场景的用户会收到 401 错误,该错误会在用户访问 Power BI 门户后自行解决。 发生这种情况时,请按照更新用户权限中的说明在应用添加 RefreshUser Permissions 调用。
数据集
管理用户可以看到的数据部分
任何对数据集具有读取权限的用户都可以查看整个架构(表、列和度量值)和所有数据。 不能单独控制对同一数据集中原始数据和聚合数据的查看权限。
若要管理用户可以查看的数据部分,请使用以下方法之一:
使用 Power BI 行级安全性 (RLS) 的行级筛选。
对象级安全性 (OLS)。
将数据分隔到不同的数据集中。 例如,可以创建一个仅包含聚合数据的数据集,并向用户授予仅对该数据集的访问权限。
内容呈现
若要解决嵌入式 Power BI 项(如报表和仪表板)的呈现问题,请查看本部分。
验证是否在 Power BI 服务中加载 Power BI 项
若要排除应用程序或嵌入 API 的问题,请验证是否可以在 Power BI 服务 (powerbi.com) 中查看该项。
验证是否在 Power BI 嵌入式分析操场中加载 Power BI 项
若要排除应用程序的问题,请验证是否可以在 Power BI 嵌入式分析操场中查看 Power BI 项。
验证访问令牌是否未过期
出于安全目的,访问令牌(Azure AD 令牌或嵌入令牌)具有有限的生存期。 应持续监视访问令牌,并根据需要刷新它。 有关详细信息,请参阅刷新访问令牌。
性能
若要获取性能最佳的嵌入式内容,我们建议遵循 Power BI 嵌入式分析最佳做法。
嵌入安装工具
可使用嵌入安装程序工具快速下载示例应用程序。 然后,即可将你的应用程序与示例进行比较。
先决条件
请先验证你具备所有适当先决条件,然后再使用嵌入安装程序工具。 需要 Power BI Pro 帐户和 Microsoft Azure 订阅 。
如果未注册 Power BI Pro ,请在开始之前注册以获得免费试用。
如果没有 Azure 订阅,请在开始之前先创建一个免费帐户。
需要设置自己的 Azure Active Directory 租户。
你需要安装 Visual Studio(2013 版或更高版本)。
常见问题
使用嵌入安装程序工具进行测试时,可能遇到的一些常见问题包括:
使用“为客户嵌入”示例应用程序
若要采用“为客户嵌入” 体验,请保存并解压缩 PowerBI-Developer-Samples.zip 文件。 然后打开 PowerBI-Developer-Samples-master\App Owns Data 文件夹并运行 PowerBIEmbedded_AppOwnsData.sln 文件 。
选择“授予权限”(“授予权限”步骤)时,将收到以下错误 :
输出复制
AADSTS70001: Application with identifier wasn't found in the directory
解决方案是关闭弹出窗口,等待几秒钟再重试。 可能需要多次重复此操作。 造成此问题的原因是,从完成应用程序注册过程到该应用程序对外部 API 可用之间存在时间间隔。
运行示例应用时,将显示以下错误消息:
输出复制
Password is empty. Please fill password of Power BI username in web.config.
由于未注入示例应用程序的唯一值是用户密码,因此会发生此错误。 在解决方案中打开 Web.config 文件,并用用户密码填充 pbiPassword 字段。
如果收到错误 - AADSTS50079:用户需要使用多重身份验证。
需要使用没有启用 MFA 的 Azure AD 帐户。
将 Embed 用于组织示例应用程序
若要采用“为组织嵌入”体验,请保存并解压缩 PowerBI-Developer-Samples.zip 文件。 然后打开 PowerBI-Developer-Samples-master\App Owns Data\integrate-report-web-app 文件夹并运行 pbi-saas-embed-report.sln 文件。
运行“为组织嵌入”示例应用时,将收到以下错误:
输出复制
AADSTS50011: The reply URL specified in the request doesn't match the reply URLs configured for the application:
此错误是因为为 web-server 应用程序指定的重定向 URL 不同于示例的 URL。 如果想要注册示例应用程序,请使用 https://localhost:13526/
作为重定向 URL。
如果想要编辑已注册的应用程序,请更新已注册 Azure AD 的应用程序,使应用程序可以向 Web API 提供访问权限。
如果想要编辑 Power BI 用户配置文件或数据,请了解如何编辑 Power BI 数据。
如果收到错误 - AADSTS50079:用户需要使用多重身份验证。
需要使用没有启用 MFA 的 Azure AD 帐户。
有关详细信息,请参阅 Power BI Embedded 常见问题。
更多问题? 尝试参与 Power BI 社区
如需进一步的帮助,请联系支持人员或通过 Azure 门户创建支持票证,并提供你遇到的错误消息。