分享方式:


在內部部署 SQL Server Analysis Services 上內嵌報表 (SSAS)

適用於: 應用程式擁有數據 用戶擁有數據

本文說明如何將Power BI內容與 內部部署Analysis Services 表格式模型 即時連線內嵌至標準 Power BI 應用程式擁有數據應用程式。 本文適用於 所有 實作 RLS 的即時連線 SSAS 模型。

在此案例中,資料庫位於 SSAS(內部部署)模型上,而 Power BI 引擎會透過 閘道連線到該模型。 安全性角色 (RLS) 和許可權,如果有的話,會在 SSAS 模型中定義, 而不是 在 Power BI Desktop 中定義。

本文適用於 神秘

本文主要與已設定內部部署 (SSAS) 資料庫設定的ISV相關,且想要直接從該處內嵌內容。

ISV 設定

內部部署數據列層級安全性僅適用於即時連線,但不論是否實作 RLS,您都可以建立任何資料庫的即時連線。 這包括:

  • 未設定 RLS 角色的資料庫
  • 具有屬於一或多個角色之成員的資料庫
  • 具有靜態或動態安全性角色的資料庫

若要從 SSAS 模型內嵌報表,您需要執行下列動作:

  1. 設定閘道
  2. 建立即時連線
  3. 產生內嵌令牌

設定閘道

將數據源連線新增至 SSAS 閘道

輸入 Active Directory 可辨識的數據來源名稱、數據來源類型、伺服器、資料庫、使用者名稱和密碼。

如需建立和管理網關的詳細資訊,請參閱 新增或移除閘道數據源

在閘道上授與服務主體或主要用戶權力

產生內嵌令牌的使用者也需要 下列其中一個 許可權:

  • 閘道管理員許可權

  • 資料源模擬許可權 (ReadOverrideEffectiveIdentity)

    具有模擬(覆寫)許可權的使用者在其名稱旁邊有一個索引鍵圖示。

    Screenshot of a gateway member with a key icon next to their name.

請遵循這些指示,將閘道許可權授與主要使用者、服務主體或服務主體配置檔。

執行 下列其中一項 動作:

對應用戶名稱

如果內部部署目錄和 Microsoft Entra 目錄的使用者名稱不同,而且您想要在入口網站中檢視數據,您必須建立使用者對應數據表,將 Microsoft Entra ID 中的每個使用者或角色對應至內部部署資料庫中的使用者。 如需對應使用者名稱的指示,請移至 手動用戶名稱重新對應

如需詳細資訊,請參閱 對應 Analysis Services 數據源的用戶名稱。

建立即時連線

設定環境之後,請在 Power BI Desktop與SQL Server之間建立即時連線 ,並建立報表。

  1. 啟動 Power BI Desktop,然後選取 [取得數據>資料庫]。

  2. 從數據源清單中,選取 [SQL Server Analysis Services 資料庫],然後選取 [連線]。

    Connect to SQL Server Analysis Services Database.

  3. 填入 Analysis Services 表格式實例詳細數據,然後選取 [即時 連線]。 然後選取確定

    Screenshot of Analysis Services details.

產生內嵌令牌

若要在客戶案例的內嵌中內嵌報表,請產生內嵌令牌,以將有效的身分識別傳遞至 Power BI。 與 AS 引擎的所有實時連線都需要有效的身分識別,即使沒有實作 RLS 也一樣。

如果沒有設定 RLS,則只有 管理員 具有資料庫的存取權,因此您想要使用 管理員 作為有效的身分識別。

產生內嵌令牌所需的信息取決於您是否使用服務主體或作為主要用戶連線到 Power BI,以及資料庫是否有 RLS。

若要產生內嵌令牌,請提供下列資訊:

  • 使用者名稱 (如果沒有 RLS 則為選擇性。RLS 的必要專案 - SSAS 辨識的有效用戶名稱,將用來作為有效身分識別。 如果資料庫未使用 RLS,且未提供使用者名稱,則會使用主要使用者的認證。
  • 角色 (RLS 必要) - 只有在有效身分識別是角色的成員時,報表才會顯示數據。

範例:

public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
{
    PowerBIClient pbiClient = this.GetPowerBIClient();

    // Define the user identity and roles. Use one of the following:

    var rlsidentity = new EffectiveIdentity(  //If no RLS
       username: "Domain\\Username", // can also be username@contoso.com
       datasets: new List<string>{ datasetId.ToString()}
    )

    var rlsidentity = new EffectiveIdentity(  // If RLS
       username: "username@contoso.com",
       roles: new List<string>{ "MyRole" },
       datasets: new List<string>{ datasetId.ToString()}
    )
    
    // Create a request for getting an embed token for the rls identity defined above
    var tokenRequest = new GenerateTokenRequestV2(
        reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
        datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
        targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
        identities: new List<EffectiveIdentity> { rlsIdentity }
    );

    // Generate an embed token
    var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

    return embedToken;
}

現在您可以將報表內嵌在應用程式中,而報表會根據存取報表的使用者許可權來篩選數據。

考量與限制

不支援 CustomData。

產生內嵌令牌