Partage via


Incorporer un rapport avec une base de données Azure Analysis Services (AAS)

S’APPLIQUE À : L’application est propriétaire des données L’utilisateur est propriétaire des données

Cet article explique comment incorporer un rapport Power BI qui utilise des données stockées dans Azure Analysis Services (AAS) dans un scénario Incorporé pour vos clients. Cet article est destiné aux développeurs de logiciels indépendants (ISV), qui souhaitent incorporer un rapport avec des données AAS, que la base de données implémente ou non la sécurité au niveau des lignes (RLS).

Prérequis

Vous aurez besoin d’un rapport avec une connexion active à la base de données AAS, avec ou sans RLS.

Sécurité dynamique - RLS

Si vous souhaitez que votre rapport implémente la sécurité au niveau des lignes dynamique, utilisez la fonction customeData. Étant donné que vous ne pouvez pas remplacer l’identité effective, nous vous recommandons de créer de nouveaux rôles avec customData. Vous pouvez également utiliser des rôles qui ont les fonctions username ou userPrincipalName, si vous les remplacez par customData.

Suivez ces étapes pour créer un rôle et ajouter la fonction customData au rôle.

  1. Créez un rôle dans le serveur Analysis Services.

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

  2. Dans les paramètres Général, fournissez un Nom de rôle et définissez les autorisations de base de données sur Lecture uniquement.

    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. Dans les paramètres Appartenance, ajoutez les utilisateurs qui vont appeler l’API Jeton d’incorporation - Générer un jeton. Si vous utilisez un principal de service qui n’est pas un administrateur, ajoutez-le également.

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

  2. Dans les paramètres Filtres de lignes, définissez votre requête DAX à l’aide de la fonction CUSTOMDATA().

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

Principal du service

Si vous utilisez un principal de service pour incorporer le rapport, assurez-vous que le principal de service est un administrateur de serveur ou membre du rôle AAS. Pour accorder des autorisations d’administrateur AAS au principal de service, consultez Ajouter un principal de service au rôle d’administrateur de serveur. Pour ajouter le principal de service en tant que membre de rôle, accédez aux Paramètres d’appartenance.

Utilisez l’ID d’objet du principal de service comme nom d’utilisateur (identité effective).

Migration Analysis Service

Vous pouvez migrer d’AAS vers Power BI Premium même si vous avez un rapport AAS incorporé. Votre rapport incorporé ne s’interrompt pas pendant la migration, tant que le principal qui appelle l’API Jeton d’incorporation - Générer le jeton est membre ou administrateur de l’espace de travail.

Notes

Si le principal de service n’est pas un administrateur et que vous ne souhaitez pas en faire un administrateur de l’espace de travail lors de la migration, migrez ce modèle vers un espace de travail distinct dans lequel vous pouvez lui accorder des autorisations d’administrateur.

Générer un jeton d’intégration

Utilisez l’API Générer un jeton pour générer un jeton d’incorporation qui remplace l’identité effective.

Les informations nécessaires à la génération d’un jeton d’incorporation dépendent de la façon dont vous êtes connecté à Power BI (principal de service ou utilisateur principal), et également si la base de données a la sécurité au niveau des lignes.

Pour générer un jeton incorporé, fournissez les informations suivantes :

  • Nom d’utilisateur (Facultatif en absence de sécurité au niveau des lignes. Obligatoire pour la sécurité au niveau des lignes) : le nom d’utilisateur doit être identique à celui de l’appelant de l’API (dans ce cas, l’UPN de l’utilisateur principal). Si la base de données n’utilise pas la sécurité au niveau des lignes et qu’aucun nom d’utilisateur n’est fourni, les informations d’identification de l’utilisateur principal sont utilisées.
  • Rôle (obligatoire pour la sécurité au niveau des lignes) : le rapport affiche uniquement les données si l’identité effective est membre du rôle.

Exemple :

Définissez l’identité et les rôles de l’utilisateur pour l’un des trois scénarios suivants :

  • Si la sécurité au niveau des lignes n’est pas implémentée :

Il n’est pas nécessaire de définir une identité effective.

  • Si vous utilisez la sécurité au niveau des lignes statique :

        var rlsidentity = new EffectiveIdentity(  //If static RLS
           username: "username@contoso.com", 
           roles: new List<string>{ "MyRole" },
           datasets: new List<string>{ datasetId.ToString()}
        )
    
  • Si vous utilisez la sécurité au niveau des lignes dynamique :

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

    Notes

    customData dans le jeton incorporé ne peut excéder 1 024 caractères.

Utilisez l’identité effective pour générer un jeton incorporé :

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

Utilisez le jeton d’incorporation pour incorporer le rapport dans votre application ou site web. Votre rapport filtre les données en fonction de la sécurité au niveau des lignes appliquée dans le rapport.

Étapes suivantes