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.

  1. Skapa en roll i Analysis Services-servern.

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

  2. I inställningarna Allmänt anger du ett rollnamn och anger databasbehörigheterna till Skrivskyddad.

    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. 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.

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

  2. I inställningarna för radfilter anger du DAX-frågan med hjälp av CUSTOMDATA() funktionen .

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

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.