使用 Azure Analysis Services (AAS) 数据库嵌入报表

  • 版本 :2023.1(当前版本)

使用 Azure Analysis Services (AAS) 数据库嵌入报表

适用于:✔️ 应用拥有数据 ❌ 用户拥有数据

本文介绍如何在为客户嵌入内容场景中嵌入使用存储在 Azure Analysis Services (AAS) 中的数据的 Power BI 报表。 本文面向独立软件开发人员 (ISV),他们希望嵌入含有 AAS 数据的报表,无论数据库是否实现行级安全性 (RLS)。

先决条件

无论是否实现 RLS,你都将需要一个与 AAS 数据库实时连接的报表。

动态安全性 - RLS

如果希望报表实现动态 RLS,请使用 customeData 函数。 由于无法替代有效标识,我们建议使用 customData 创建新角色。 你还可以使用具有 usernameuserPrincipalName 函数(如果将它们替换为 customData)的角色。

按照以下步骤创建新角色,并将 customData 函数添加到角色。

  1. 在 Analysis Services 服务器中创建角色。

    在 Analysis Services 服务器中创建新角色的屏幕截图。

  2. 在“常规”设置中,提供“角色名称”,并将数据库权限设置为“只读”。

    在 Analysis Services 服务器的“常规”设置中为新角色指定新名称并将其设置为“只读”的屏幕截图。

  1. 在“成员身份”设置中,添加将调用嵌入令牌 - 生成令牌 API 的用户。 如果使用的服务主体不是管理员,也请添加该服务主体。

    在 Analysis Services 服务器中将用户添加到新角色的屏幕截图。

  2. 在“行筛选器”设置中,使用 CUSTOMDATA() 函数设置 DAX 查询。

    显示如何在 Analysis Services 服务器的新角色中将函数 customData 添加到 DAX 查询的屏幕截图。

服务主体

如果使用服务主体嵌入报表,请确保该服务主体是 AAS 的服务器管理员或角色成员。 若要向服务主体授予 AAS 管理员权限,请参阅将服务主体添加到服务器管理员角色。 若要将服务主体添加为角色成员,请转到成员身份设置。

使用服务主体对象 ID 作为用户名(有效标识)。

Analysis Service 迁移

即使有嵌入的 AAS 报表,也可以从 AAS 迁移到 Power BI Premium。 只要调用嵌入令牌 - 生成令牌 API 的主体是工作区的成员或管理员,嵌入的报表就不会在迁移期间中断。

备注

如果服务主体不是管理员,也不想在迁移时使其成为工作区的管理员,请将该模型迁移到一个单独的工作区,可在该工作区中授予其管理员权限。

生成嵌入令牌

使用生成令牌 API 生成替代有效标识的嵌入令牌。

生成嵌入令牌所需信息取决于连接到 Power BI(服务主体或主用户)的方式,以及数据库是否具有 RLS。

  • 主用户嵌入令牌

  • 服务主体或服务主体配置文件嵌入令牌

若要生成嵌入令牌,请提供以下信息:

  • 用户名(如果没有 RLS,则可选。对于 RLS 是必需的)- 用户名必须与 API 调用方相同(在本例中为主用户的 UPN)。 如果数据库不使用 RLS,并且未提供用户名,则使用主用户的凭据。

  • 角色(对于 RLS 是必需的)- 仅当有效标识是角色成员时,报表才会显示数据。

示例:

为以下三种场景之一定义用户标识和角色:

  • 如果未实现 RLS:

无需定义任何有效标识。

  • 如果使用静态 RLS:

    C#

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

    C#

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

使用有效标识生成嵌入令牌:

C#

public EmbedToken GetEmbedToken(Guid reportId, IList 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() { new GenerateTokenRequestV2Report(reportId) },
datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
identities: new List { rlsIdentity } // Only in cases of RLS
); // Generate an embed token
var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest); return embedToken;
}

使用嵌入令牌将报表嵌入应用或网站。 报表将根据报表中应用的 RLS 筛选数据。