Incorporar um relatório com um banco de dados do Azure Analysis Services (AAS)

APLICA-SE A: A aplicação é proprietária dos dados O utilizador é proprietário dos dados

Este artigo explica como incorporar um relatório do Power BI que usa dados armazenados no Azure Analysis Services (AAS), em um cenário de incorporação para seus clientes . Este artigo destina-se a desenvolvedores de software independentes (ISVs), que desejam incorporar um relatório com dados AAS, independentemente de o banco de dados implementar ou não segurança em nível de linha (RLS).

Pré-requisitos

Precisas de um relatório com ligação ativa à base de dados AAS, com ou sem RLS.

Segurança dinâmica - RLS

Se você quiser que seu relatório implemente RLS dinâmico, use a customeData função. Como não é possível sobrepor a identidade efetiva, recomendamos que crie novas funções com customData. Você também pode usar funções que tenham as username funções ou userPrincipalName , se substituí-las por customData.

Siga estes passos para criar um novo perfil e adicionar a função customData ao perfil.

  1. Crie uma função no servidor do Analysis Services.

    Uma captura de tela da criação de uma nova função no servidor do Analysis Services.

  2. Nas configurações Gerais, forneça um Nome da Função e defina as permissões do banco de dados como Somente leitura.

    Uma captura de tela mostrando dar um novo nome a uma nova função e defini-la como somente leitura, nas configurações gerais do servidor do Analysis Services.

  1. Nas definições de Filiação, adicione os utilizadores que irão chamar a API Embed Token - Generate Token. Se estiver a usar um principal de serviço que não seja administrador, adicione-o também.

    Uma captura de tela da adição de usuários a uma nova função no servidor do Analysis Services.

  2. Nas definições de Filtros de linha, defina a sua consulta DAX utilizando a função CUSTOMDATA().

    Uma captura de tela mostrando como adicionar a função customData à consulta DAX em uma nova função no servidor do Analysis Services.

Service principal

Se você estiver usando uma entidade de serviço para incorporar o relatório, verifique se a entidade de serviço é um administrador de servidor ou membro de função do AAS. Para conceder permissões de administrador do AAS à entidade de serviço, consulte Adicionar uma entidade de serviço à função de administrador do servidor. Para adicionar o principal de serviço como membro de uma função, vá para as definições de Afiliação.

Use o ID do objeto principal do serviço como o nome de usuário (identidade efetiva).

Migração do Analysis Service

Você pode migrar do AAS para o Power BI Premium mesmo se tiver um relatório AAS incorporado. O teu relatório incorporado não se quebra durante a migração, desde que o principal que chama a API Embed Token - Generate Token seja membro ou administrador do workspace.

Nota

Se o principal de serviço não for administrador, e não quiser torná-lo administrador do espaço de trabalho quando migrar, migre esse modelo para um espaço de trabalho separado onde possa dar-lhe permissões de administrador.

Gerar um token de incorporação

Utilize a API Generate Token para gerar um token de incorporação que substitui a identidade efetiva.

A informação necessária para gerar um token de incorporação depende de como está ligado ao Power BI (principal de serviço ou utilizador principal) e também de a base de dados ter RLS.

Para gerar um token de incorporação, forneça as seguintes informações:

  • Nome de utilizador (Opcional se não houver RLS. Obrigatório para RLS) - O nome de usuário deve ser o mesmo que o chamador da API (neste caso, o UPN do usuário mestre). Se o banco de dados não usar RLS e nenhum nome de usuário for fornecido, as credenciais do usuário mestre serão usadas.
  • Função (obrigatória para RLS) - O relatório só mostra dados se a identidade efetiva for membro da função.

Exemplo:

Defina a identidade e as funções do usuário para um dos três cenários a seguir:

  • Se a RLS não for implementada:

Não precisas de definir uma identidade eficaz.

  • Se estiver a utilizar RLS estática:

        var rlsidentity = new EffectiveIdentity(  //If static RLS
           username: "username@contoso.com", 
           roles: new List<string>{ "MyRole" },
           datasets: new List<string>{ datasetId.ToString()}
        )
    
  • Se estiver usando RLS dinâmica:

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

    Nota

    customData O token de incorporação não pode ter mais de 1.024 caracteres.

Utilize a identidade efetiva para gerar um token de incorporação:

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;
}

Use o token de incorporação para incorporar o relatório em seu aplicativo ou site. O seu relatório filtra os dados de acordo com o RLS aplicado no relatório.