Een rapport insluiten met een AAS-database (Azure Analysis Services)

VAN TOEPASSING OP: App is eigenaar van gegevens die gebruiker eigenaar is van gegevens

In dit artikel wordt uitgelegd hoe u een Power BI-rapport insluit dat gebruikmaakt van gegevens die zijn opgeslagen in Azure Analysis Services (AAS) in een insluiting voor uw klantenscenario . Dit artikel is gericht op onafhankelijke softwareontwikkelaars (ISV's), die een rapport willen insluiten met AAS-gegevens, ongeacht of de database beveiliging op rijniveau (RLS) implementeert.

Vereisten

U hebt een rapport met een liveverbinding met een AAS-database nodig, met of zonder beveiliging op rijniveau.

Dynamische beveiliging - beveiliging op rijniveau

Als u wilt dat uw rapport dynamische beveiliging op rijniveau implementeert, gebruikt u de customeData functie. Omdat u de effectieve identiteit niet kunt overschrijven, raden we u aan nieuwe rollen te maken met customData. U kunt ook rollen gebruiken die de username of userPrincipalName functies hebben, als u ze vervangt door customData.

Volg deze stappen om een nieuwe rol te maken en de customData functie toe te voegen aan de rol.

  1. Maak een rol op de Analysis Services-server.

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

  2. Geef in de algemene instellingen een rolnaam op en stel de databasemachtigingen in op Alleen-lezen.

    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. Voeg in de lidmaatschapsinstellingen de gebruikers toe die het Insluittoken - Token genereren-API gaan aanroepen. Als u een service-principal gebruikt die geen beheerder is, voegt u dat ook toe.

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

  2. Stel in de instellingen voor rijfilters uw DAX-query in met behulp van de CUSTOMDATA() functie.

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

Service-principal

Als u een service-principal gebruikt om het rapport in te sluiten, moet u ervoor zorgen dat de service-principal een serverbeheerder of rollid van AAS is. Als u AAS-beheerdersmachtigingen wilt verlenen aan de service-principal, raadpleegt u Een service-principal toevoegen aan de beheerdersrol van de server. Als u de service-principal wilt toevoegen als rollid, gaat u naar de lidmaatschapsinstellingen.

Gebruik de object-id van de service-principal als de gebruikersnaam (effectieve identiteit).

Analysis Service-migratie

U kunt migreren van AAS naar Power BI Premium , zelfs als u een ingesloten AAS-rapport hebt. Uw ingesloten rapport wordt niet verbroken tijdens de migratie, zolang de principal die het insluittoken aanroept - Token-API genereren, lid of beheerder is van de werkruimte.

Notitie

Als de service-principal geen beheerder is en u er geen beheerder van wilt maken wanneer u migreert, migreert u dat model naar een afzonderlijke werkruimte waar u deze beheerdersmachtigingen kunt verlenen.

Een insluittoken genereren

Gebruik de Generate Token-API om een insluittoken te genereren dat de effectieve identiteit overschrijft.

De informatie die nodig is om een insluittoken te genereren, is afhankelijk van hoe u bent verbonden met Power BI (service-principal of hoofdgebruiker), en ook als de database RLS heeft.

Als u een insluittoken wilt genereren, geeft u de volgende informatie op:

  • Gebruikersnaam (optioneel als er geen RLS is. Vereist voor beveiliging op rijniveau: de gebruikersnaam moet hetzelfde zijn als de API-aanroeper (in dit geval de UPN van de hoofdgebruiker). Als de database geen RLS gebruikt en er geen gebruikersnaam is opgegeven, worden de referenties van de hoofdgebruiker gebruikt.
  • Rol (vereist voor beveiliging op rijniveau): in het rapport worden alleen gegevens weergegeven als de effectieve identiteit lid is van de rol.

Voorbeeld:

Definieer de gebruikersidentiteit en -rollen voor een van de volgende drie scenario's:

  • Als RLS niet is geïmplementeerd:

U hoeft geen effectieve identiteit te definiëren.

  • Als u statische beveiliging op rijniveau gebruikt:

        var rlsidentity = new EffectiveIdentity(  //If static RLS
           username: "username@contoso.com", 
           roles: new List<string>{ "MyRole" },
           datasets: new List<string>{ datasetId.ToString()}
        )
    
  • Als u dynamische beveiliging op rijniveau gebruikt:

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

    Notitie

    customData in het insluittoken mag niet groter zijn dan 1024 tekens.

Gebruik de effectieve identiteit om een insluittoken te genereren:

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

Gebruik het insluittoken om het rapport in te sluiten in uw app of website. Uw rapport filtert gegevens op basis van de toegepaste beveiliging op rijniveau in het rapport.