針對內嵌應用程式進行疑難排解
本文討論從 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;
}
建議您記錄請求識別碼(以及故障排除所需的錯誤信息)。 與 Microsoft 支援聯繫時提供請求 ID。
應用程式註冊
應用程式註冊失敗
如果您沒有足夠的許可權來註冊應用程式,Azure 入口網站或 Power BI 應用程式註冊頁面中的錯誤訊息將會通知您。 若要註冊應用程式,您必須是 Microsoft Entra 租使用者中的系統管理員,或必須為非系統管理員使用者啟用應用程式註冊。
註冊新的應用程式時,Power BI 服務不會出現在 Azure 入口網站中
至少必須要有一個使用者註冊 Power BI。 如果您在 API 清單中沒有看到 Power BI 服務,這意味著沒有任何使用者註冊 Power BI。
應用程式物件標識碼和主體物件標識碼之間的差異為何?
當您註冊Microsoft Entra 應用程式時,有兩個參數稱為 物件識別碼。 本節說明每個參數的用途,以及如何取得它。
應用程式物件識別碼
應用程式物件 標識符,也稱為 對象識別碼,是您Microsoft Entra 應用程式物件的唯一標識符。
若要取得應用程式對象識別碼,請流覽至您的 Microsoft Entra 應用程式,然後從 [概觀] 複製它。
主體物件標識碼
主體物件標識符,也稱為 物件標識符,是與Microsoft Entra 應用程式相關聯的 服務主體 物件的唯一標識符。
若要取得主體物件識別碼,請流覽至您的 Microsoft Entra 應用程式,並從 概觀中,選取本機目錄中 Managed 應用程式中的應用程式連結,。
從 [屬性] 區段中,複製 物件識別子。
認證
驗證失敗,錯誤代碼為 AADSTS70002 或 AADSTS50053
(AADSTS70002:驗證認證時發生錯誤。AADSTS50053:您嘗試使用不正確的使用者標識碼或密碼登入太多次
如果您使用 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,則需要 Role。 - 任何
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
參數中指定租用戶標識符。
用於在組織租使用者中驗證的網址:
https://login.microsoftonline.com/common/v2.0
驗證 Microsoft Entra 來賓使用者的 URL:
https://login.microsoftonline.com/<tenant ID>
若要尋找您的租用戶識別碼,您可以使用 尋找 Microsoft Entra 租用戶識別碼和主要網域名稱中的指示,。
如需詳細資訊,請參閱 讓應用程式支援多租戶。
數據源
ISV 想要擁有相同數據源的不同認證
數據源可以有一組單一認證給一個主要使用者。 如果您需要使用不同的認證,請建立更多主要使用者。 然後,將不同的認證指派給每個主要用戶的情境,並使用該使用者的 Microsoft Entra 令牌進行嵌入。
使用 IError 物件對內嵌應用程式進行疑難解答
使用 JavaScript SDK 錯誤事件所傳回的 IError 物件,對應用程式進行偵錯,並進一步瞭解錯誤的原因。
取得 IError 物件之後,您應該查看適合您所使用的內嵌類型的適當常見錯誤數據表。 將 IError 屬性 與表格中的屬性進行比較,並找出失敗的可能原因。
Power BI 使用者在嵌入過程中常見的錯誤
消息 | 詳細訊息 | 錯誤碼 | 可能的原因 |
---|---|---|---|
TokenExpired | 存取令牌已過期,使用新的存取令牌重新提交 | 403 | 過期的令牌 |
PowerBIEntityNotFound | 取得報告失敗 | 404 | |
無效的參數 | 未指定 powerbiToken 參數 | N/A | |
載入報告失敗 | 無法初始化 - 無法解析叢集 | 403 | |
PowerBINotAuthorizedException | 無法取得報告 | 401 | |
令牌已過期 | 存取令牌已過期,使用新的存取令牌重新提交。 無法呈現標題為 的報表視覺效果:視覺效果標題 | N/A | |
OpenConnectionError | 無法顯示視覺效果。 無法生成名為:視覺效果標題 的報表視覺效果。 | N/A | 當與容量相關的報表在會話中開啟時,容量可能已暫停或被刪除 |
探索容器_載入模型失敗_預設詳細資訊 | 無法載入與此報表相關聯的模型架構。 請確定您有伺服器的連線,然後再試一次。 | N/A |
非 Power BI 使用者內嵌時的典型錯誤(使用內嵌令牌)
訊息 | 詳細訊息 | 錯誤碼 | 可能的原因 |
---|---|---|---|
憑證已過期 | 存取令牌已過期,使用新的存取令牌重新提交 | 403 | 過期的令牌 |
加載報告失敗 | 取得報告失敗 | 404 | |
報告載入失敗 | 取得報告失敗 | 403 | 報告 ID 不符合令牌 |
報告加載失敗 | 取得報告失敗 | 500 | 報告所提供的 ID 不是 GUID |
無效的參數 | 未指定 powerbiToken 參數 | N/A | |
載入報告失敗 | 無法初始化 - 無法解析叢集 | 403 | 錯誤的令牌類型或無效的令牌 |
PowerBINotAuthorizedException(未獲授權例外) | 取得報告失敗 | 401 | 錯誤的/未經授權的群組標識符 |
令牌過期 | 存取令牌已過期,使用新的存取令牌重新提交。 無法呈現標題為 的報表視覺效果: 視覺效果標題 | N/A | |
OpenConnectionError | 無法顯示視覺效果。 無法呈現標題為「視覺效果標題」的報表視覺效果。 | N/A | 當與容量相關的報表在會話中開啟時,容量已被暫停或刪除。 |
ExplorationContainer_模型載入失敗_預設詳情 | 無法載入與此報表相關聯的模型架構。 請確定您有伺服器的連線,然後再試一次。 | 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 社群