共用方式為


將報表內嵌到 Azure Analysis Services (AAS) 資料庫

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

本文說明如何在為客戶內嵌案例中,內嵌使用儲存在 Azure Analysis Services (AAS) 中資料的 Power BI 報表。 本文目標在於獨立軟體開發人員 (ISV),其無論資料庫是否實作列層級安全性 (RLS),都想要內嵌具有 AAS 資料的報表。

必要條件

您將需要具有與 AAS 資料庫即時連線的報表,不論具不具有 RLS。

動態安全性 - RLS

如果您想要讓報表實作動態 RLS,請使用 customeData 函式。 由於您無法覆寫有效的身分識別,建議您使用 customData 建立新角色。 如果您將角色取代為 customData,您也可以使用具有 usernameuserPrincipalName 函數的角色。

遵循下列步驟來建立新角色,並將 customData 函數新增至角色。

  1. 在 Analysis Services 伺服器中建立角色。

    螢幕擷取畫面顯示在 Analysis Services 伺服器中建立新角色。

  2. 在 [一般] 設定中,提供角色名稱,並將資料庫權限設定為 [唯讀]

    螢幕擷取畫面顯示在 Analysis Services 伺服器的 [一般] 設定中,為新角色提供新名稱並將其設定為唯讀。

  1. 在 [成員資格] 設定中,新增即將呼叫內嵌權杖 - 產生權杖 API 的使用者。 如果您使用的服務主體不是系統管理員,請同時新增。

    螢幕擷取畫面顯示在 Analysis Services 伺服器中將使用者新增至新角色。

  2. 在 [資料列篩選] 設定中,使用 CUSTOMDATA() 函數設定 DAX 查詢。

    螢幕擷取畫面顯示如何在 Analysis Services 伺服器的新角色中,將函數 customData 新增至 DAX 查詢。

服務主體

如果您使用服務主體來內嵌報表,請確定服務主體是 AAS 的伺服器管理員或角色成員。 若要將 AAS 系統管理員權限授與服務主體,請參閱 將服務主體新增至伺服器管理員角色。 若要將服務主體新增為角色成員,請移至[成員資格]設定

使用服務主體物件識別碼作為使用者名稱 (有效身分識別)。

Analysis Service 移轉

即使您有內嵌的 AAS 報表,您也可以從 AAS 移轉至 Power BI Premium。 只要呼叫內嵌權杖 - 產生權杖 API 的主體是工作區的成員或管理員,您的內嵌報表就不會在移轉期間中斷。

注意

如果服務主體不是系統管理員,而且您不想在移轉時將其設為工作區的系統管理員,請將該模型移轉至您可以為其提供系統管理員權限的個別工作區。

產生內嵌權杖

使用產生權杖 API 來產生可覆寫有效身分識別的內嵌權杖。

產生內嵌權杖所需的資訊取決於您連線到 Power BI 的方式 (服務主體主要使用者),以及資料庫是否有 RLS。

若要產生內嵌權杖,請提供下列資訊:

  • 使用者名稱 (如果沒有 RLS 則為選用。RLS 為必要):使用者名稱必須與 API 呼叫端相同 (在此案例中為主要使用者的 UPN)。 如果資料庫未使用 RLS,且未提供使用者名稱,則會使用主要使用者的認證。
  • 角色 (RLS 為必要):只有在有效身分識別是角色的成員時,報表才會顯示資料。

範例:

針對下列三個案例之一定義使用者身分識別和角色:

  • 如果未實作 RLS:

不需要定義任何有效的身分識別。

  • 如果使用靜態 RLS:

        var rlsidentity = new EffectiveIdentity(  //If static RLS
           username: "username@contoso.com", 
           roles: new List<string>{ "MyRole" },
           datasets: new List<string>{ datasetId.ToString()}
        )
    
  • 如果使用動態 RLS:

        var rlsidentity = new EffectiveIdentity(  // If dynamic RLS
           username: "username@contoso.com",
           roles: new List<string>{ "MyRoleWithCustomData" },
           customData: "SalesPersonA"
           datasets: new List<string>{ datasetId.ToString()}
        )
    

    注意

    在內嵌權杖中的 customData 不能大於 1,024 個字元。

使用有效的身分識別來產生內嵌權杖:

public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
{
    PowerBIClient pbiClient = this.GetPowerBIClient();
    // 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 } // Only in cases of RLS
    );
    // Generate an embed token
    var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
    return embedToken;
}

使用內嵌權杖將報表內嵌至您的應用程式或網站。 您的報表會根據報表中套用的 RLS 來篩選資料。