共用方式為


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

適用於: 應用程式擁有資料 使用者擁有資料

本文描述如何將 Power BI 內容與內部部署 Analysis Services 表格式模型即時連線內嵌至標準 Power BI 應用程式擁有的資料應用程式。 本文適用所有即時連線 SSAS 模型,而無論實作 RLS 與否。

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

本文的適用對象

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

ISV 設定

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

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

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

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

設定閘道

將資料來源連線新增至 SSAS 閘道

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

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

在閘道上授與服務主體或主要使用者權限

產生內嵌權杖的使用者也需要下列其中一項權限:

  • 閘道管理員權限

  • 資料來源模擬權限 (ReadOverrideEffectiveIdentity)

    具有模擬 (覆寫) 權限的使用者在其名稱旁邊會有一個鑰匙圖示。

    名稱旁邊有鑰匙圖示的閘道成員的螢幕擷取畫面。

遵循這些指示,將閘道權限授與主要使用者、服務主體或服務主體設定檔。

執行下列其中一項

對應使用者名稱

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

如需詳細資訊,請參閱對應 Analysis Services 資料來源的使用者名稱

建立即時連線

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

  1. 啟動 Power BI Desktop,並選取 [取得資料] > [資料庫]

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

    連線至 SQL Server Analysis Services 資料庫。

  3. 填寫您的 Analysis Services 表格式執行個體詳細資料,然後選取 [即時連線]。 然後選取確定

    Analysis Services 詳細資料的螢幕擷取畫面。

產生內嵌權杖

若要在客戶的內嵌案例中內嵌報表,請產生內嵌權杖,以將有效的身分識別傳遞至 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。

產生內嵌權杖