Inserción de un informe con una base de datos de Azure Analysis Services (AAS)

SE APLICA A: La aplicación es la propietaria de los datos El usuario es el propietario de los datos

En este artículo se explica cómo insertar un informe de Power BI que usa datos almacenados en Azure Analysis Services (AAS) en un escenario de inserción para los clientes. Este artículo está dirigido a desarrolladores de software independientes (ISV) que quieran insertar un informe con datos de AAS, independientemente de si la base de datos implementa o no la seguridad de nivel de fila (RLS).

Requisitos previos

Necesitará un informe con una conexión dinámica a la base de datos de AAS, con o sin RLS.

Seguridad dinámica: RLS

Si quiere que el informe implemente un elemento RLS dinámico, use la función customeData. Puesto que no se puede invalidar la identidad efectiva, se recomienda crear nuevos roles con customData. También puede usar roles que tengan las funciones username o userPrincipalName, si las reemplaza por customData.

Siga estos pasos para crear un nuevo rol y agregar la función customData al rol.

  1. Cree un rol en el servidor de Analysis Services.

    A screenshot of creating a new role in Analysis Services server.

  2. En la configuración General, proporcione un nombre de rol y establezca los permisos de la base de datos en Solo lectura.

    A screenshot of giving a new role a new name and setting it to read only, in the general settings in Analysis Services server.

  1. En la configuración de pertenencia, agregue los usuarios que van a llamar a la API Embed Token - Generate Token. Si usa una entidad de servicio que no es un administrador, agréguela también.

    A screenshot of adding users to a new role in Analysis Services server.

  2. En la configuración Filtros de fila, establezca la consulta DAX mediante la función CUSTOMDATA().

    A screenshot showing how to add the function customData to the DAX query in a new role in Analysis Services server.

Entidad de servicio

Si usa una entidad de servicio para insertar el informe, asegúrese de que la entidad de servicio es un administrador del servidor o miembro de rol de AAS. Para conceder permisos de administrador de AAS a la entidad de servicio, consulte Incorporación de una entidad de servicio al rol de administrador del servidor. Para agregar la entidad de servicio como miembro de rol, vaya a la configuración de pertenencia.

Use el identificador de objeto de la entidad de servicio como nombre de usuario (identidad efectiva).

Migración de Analysis Service

Puede migrar de AAS a Power BI Premium incluso si tiene un informe de AAS insertado. El informe insertado no se interrumpirá durante la migración, siempre y cuando la entidad de seguridad que llama a la API Embed Token - Generate Token sea miembro o administrador del área de trabajo.

Nota:

Si la entidad de servicio no es el administrador y no quiere convertirla en administrador del área de trabajo al realizar la migración, migre ese modelo a un área de trabajo independiente donde pueda concederle permisos de administrador.

Generación de un token de inserción

Use la API Generar token para generar un token de inserción que invalide la identidad efectiva.

La información necesaria para generar un token de inserción depende de si está conectado a Power BI (mediante una entidad de servicio o como usuario principal) y también si la base de datos tiene RLS.

Para generar un token de inserción, proporcione la siguiente información:

  • Nombre de usuario (opcional si no hay RLS. Obligatorio para RLS): el nombre de usuario debe ser el mismo que el autor de la llamada de API (en este caso, el UPN del usuario principal). Si la base de datos no usa RLS y no se proporciona ningún nombre de usuario, se usarán las credenciales del usuario maestro.
  • Rol (necesario para RLS): el informe solo mostrará datos si la identidad efectiva es miembro del rol.

Ejemplo:

Defina la identidad y los roles de usuario para uno de los tres escenarios siguientes:

  • Si no se implementa RLS:

No es necesario definir ninguna identidad efectiva.

  • Si usa RLS estático:

        var rlsidentity = new EffectiveIdentity(  //If static RLS
           username: "username@contoso.com", 
           roles: new List<string>{ "MyRole" },
           datasets: new List<string>{ datasetId.ToString()}
        )
    
  • Si usa RLS dinámico:

        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 en el token de inserción no puede tener más de 1024 caracteres.

Use la identidad efectiva para generar un token de inserción:

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 el token de inserción para insertar el informe en la aplicación o el sitio web. El informe filtrará los datos según el RLS que se aplicó en el informe.

Pasos siguientes