將報表內嵌到 Azure Analysis Services (AAS) 資料庫
適用於: 應用程式擁有資料 使用者擁有資料
本文說明如何在為客戶內嵌案例中,內嵌使用儲存在 Azure Analysis Services (AAS) 中資料的 Power BI 報表。 本文目標在於獨立軟體開發人員 (ISV),其無論資料庫是否實作列層級安全性 (RLS),都想要內嵌具有 AAS 資料的報表。
必要條件
您將需要具有與 AAS 資料庫即時連線的報表,不論具不具有 RLS。
動態安全性 - RLS
如果您想要讓報表實作動態 RLS,請使用 customeData
函式。 由於您無法覆寫有效的身分識別,建議您使用 customData
建立新角色。 如果您將角色取代為 customData
,您也可以使用具有 username
或 userPrincipalName
函數的角色。
遵循下列步驟來建立新角色,並將 customData
函數新增至角色。
在 Analysis Services 伺服器中建立角色。
在 [一般] 設定中,提供角色名稱,並將資料庫權限設定為 [唯讀]。
在 [成員資格] 設定中,新增即將呼叫內嵌權杖 - 產生權杖 API 的使用者。 如果您使用的服務主體不是系統管理員,請同時新增。
在 [資料列篩選] 設定中,使用
CUSTOMDATA()
函數設定 DAX 查詢。
服務主體
如果您使用服務主體來內嵌報表,請確定服務主體是 AAS 的伺服器管理員或角色成員。 若要將 AAS 系統管理員權限授與服務主體,請參閱 將服務主體新增至伺服器管理員角色。 若要將服務主體新增為角色成員,請移至[成員資格]設定。
使用服務主體物件識別碼作為使用者名稱 (有效身分識別)。
Analysis Service 移轉
即使您有內嵌的 AAS 報表,您也可以從 AAS 移轉至 Power BI Premium。 只要呼叫內嵌權杖 - 產生權杖 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 來篩選資料。