将报表嵌入本地 SQL Server Analysis Services (SSAS)

适用范围:️ 应用拥有数据 用户拥有数据

本文介绍如何将具有本地 Analysis Services 表格模型实时连接的 Power BI 内容嵌入标准 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 识别的用户名和密码。

有关创建和管理网关的详细信息,请参阅添加或删除网关数据源

向服务主体或主用户提供网关权限

生成嵌入令牌的用户还需具备以下权限之一:

  • 网关管理员权限

  • Datasource 模拟权限 (ReadOverrideEffectiveIdentity)

    具有模拟(替代)权限的用户的名称旁边有一个密钥图标。

    Screenshot of a gateway member with a key icon next to their name.

按照这些说明向主用户、服务主体或服务主体配置文件授予网关权限。

执行下列操作之一:

映射用户名

如果本地目录和 Microsoft Entra 目录中的用户名不同,并且你想要在门户中查看数据,则需要创建一个用户映射表,用于将 Microsoft Entra ID 中的每个用户或角色映射到本地数据库中的用户。 有关映射用户名的说明,请转到手动重新映射用户名

有关详细信息,请参阅映射 Analysis Services 数据源的用户名

创建实时连接

设置环境后,在 Power BI Desktop 与 SQL Server 之间创建实时连接,并创建报表。

  1. 启动 Power BI Desktop 并选择“获取数据”“数据库”>。

  2. 从数据源列表中选择“SQL Server Analysis Services 数据库”,然后选择“连接” 。

    Connect to SQL Server Analysis Services Database.

  3. 填写 Analysis Services 表格实例详细信息,然后选择“实时连接” 。 然后,选择“确定” 。

    Screenshot of Analysis Services details.

生成嵌入令牌

若要在“为客户嵌入内容”场景中嵌入报表,请生成嵌入令牌,用于将有效标识传递给 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。

生成嵌入令牌