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.
Gerelateerde inhoud
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor