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.
Maak een rol op de Analysis Services-server.
Geef in de algemene instellingen een rolnaam op en stel de databasemachtigingen in op Alleen-lezen.
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.
Stel in de instellingen voor rijfilters uw DAX-query in met behulp van de
CUSTOMDATA()
functie.
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.