Bädda in en rapport med en Azure Analysis Services-databas (AAS)
GÄLLER FÖR: Appen äger data Användaren äger data
Den här artikeln beskriver hur du bäddar in en Power BI-rapport som använder data som lagras i Azure Analysis Services (AAS) i en inbäddning för dina kunder . Den här artikeln riktar sig till oberoende programvaruutvecklare (ISV:er), som vill bädda in en rapport med AAS-data oavsett om databasen implementerar säkerhet på radnivå (RLS) eller inte.
Förutsättningar
Du behöver en rapport med en live-anslutning till AAS-databasen, med eller utan RLS.
Dynamisk säkerhet – RLS
Om du vill att rapporten ska implementera dynamisk RLS använder du customeData
funktionen. Eftersom du inte kan åsidosätta den effektiva identiteten rekommenderar vi att du skapar nya roller med customData
. Du kan också använda roller som har username
funktionerna eller userPrincipalName
om du ersätter dem med customData
.
Följ dessa steg för att skapa en ny roll och lägga till customData
funktionen i rollen.
Skapa en roll i Analysis Services-servern.
I inställningarna Allmänt anger du ett rollnamn och anger databasbehörigheterna till Skrivskyddad.
I medlemskapsinställningarna lägger du till de användare som ska anropa API:et Bädda in token – Generera token. Om du använder ett huvudnamn för tjänsten som inte är administratör lägger du också till det.
I inställningarna för radfilter anger du DAX-frågan med hjälp av
CUSTOMDATA()
funktionen .
Tjänstens huvudnamn
Om du använder ett huvudnamn för tjänsten för att bädda in rapporten kontrollerar du att tjänstens huvudnamn är serveradministratör eller rollmedlem i AAS. Information om hur du beviljar AAS-administratörsbehörigheter till tjänstens huvudnamn finns i Lägga till ett huvudnamn för tjänsten till serveradministratörsrollen. Om du vill lägga till tjänstens huvudnamn som rollmedlem går du till medlemskapsinställningarna.
Använd objekt-ID:t för tjänstens huvudnamn som användarnamn (gällande identitet).
Analysis Service-migrering
Du kan migrera från AAS till Power BI Premium även om du har en inbäddad AAS-rapport. Den inbäddade rapporten bryts inte under migreringen, så länge huvudnamnet som anropar API:et För inbäddningstoken – Generera token är medlem eller administratör för arbetsytan.
Kommentar
Om tjänstens huvudnamn inte är administratör och du inte vill göra det till administratör för arbetsytan när du migrerar migrerar du modellen till en separat arbetsyta där du kan ge den administratörsbehörighet.
Generera en inbäddningstoken
Använd API:et Generera token för att generera en inbäddningstoken som åsidosätter den effektiva identiteten.
Vilken information som behövs för att generera en inbäddningstoken beror på hur du är ansluten till Power BI (tjänstens huvudnamn eller huvudanvändare) och även om databasen har RLS.
Om du vill generera en inbäddningstoken anger du följande information:
- Användarnamn (valfritt om inget RLS. Krävs för RLS) – Användarnamnet måste vara samma som API-anroparen (i det här fallet huvudanvändarens UPN). Om databasen inte använder RLS och inget användarnamn anges används huvudanvändarens autentiseringsuppgifter.
- Roll (krävs för RLS) – Rapporten visar endast data om den effektiva identiteten är medlem i rollen.
Exempel:
Definiera användaridentiteten och rollerna för något av följande tre scenarier:
- Om RLS inte implementeras:
Det finns inget behov av att definiera någon effektiv identitet.
Om du använder statisk RLS:
var rlsidentity = new EffectiveIdentity( //If static RLS username: "username@contoso.com", roles: new List<string>{ "MyRole" }, datasets: new List<string>{ datasetId.ToString()} )
Om du använder dynamisk RLS:
var rlsidentity = new EffectiveIdentity( // If dynamic RLS username: "username@contoso.com", roles: new List<string>{ "MyRoleWithCustomData" }, customData: "SalesPersonA" datasets: new List<string>{ datasetId.ToString()} )
Kommentar
customData
i inbäddningstoken får inte vara större än 1 024 tecken.
Använd den effektiva identiteten för att generera en inbäddningstoken:
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;
}
Använd inbäddningstoken för att bädda in rapporten i din app eller webbplats. Rapporten filtrerar data enligt tillämpad RLS i rapporten.