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

適用於:✅供您的客戶使用的 Power BI 嵌入式分析(App-owns-data)

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

必要條件

你需要一份能即時連接 AAS 資料庫的報告,不管有沒有 RLS。

動態安全性 - RLS

如果您想要讓報表實作動態 RLS,請使用 customeData 函式。 由於您無法覆寫有效的身分識別,建議您使用 customData 建立新角色。 如果您將它們替換為 username,也可以使用具有 userPrincipalName 或 customData 功能的角色。

遵循下列步驟來建立新角色,並將 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。 只要呼叫 Embed Token - Generate Token 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 來過濾資料。