Condividi tramite


Incorporare un report con un database Azure Analysis Services (AAS)

SI APPLICA A: I dati sono di proprietà dell'app I dati sono di proprietà dell'utente

Questo articolo illustra come incorporare un report di Power BI che usa i dati archiviati in Azure Analysis Services (AAS), in uno scenario incorporato per i clienti. Questo articolo è rivolto a sviluppatori di software indipendenti (ISV), che vogliono incorporare un report con i dati di AAS indipendentemente dal fatto che il database implementi sicurezza a livello di riga (RLS).

Prerequisiti

È necessario un report con una connessione dinamica al database AAS, con o senza sicurezza a livello di riga (RLS).

Sicurezza dinamica - RLS

Se si vuole che il report implementi RLS dinamica, usare la funzione customeData. Poiché non è possibile eseguire l'override dell'identità effettiva, è consigliabile creare nuovi ruoli con customData. Inoltre, è possibile usare i ruoli con le funzioni di username o userPrincipalName se vengono sostituite con customData.

Seguire questa procedura per creare un nuovo ruolo e aggiungere la funzione customData al ruolo.

  1. Creare un ruolo nel server Analysis Services.

    Screenshot della creazione di un nuovo ruolo nel server Analysis Services.

  2. In Generale, assegnare Nome ruolo e impostare le autorizzazioni del database solo su Lettura.

    Screenshot che mostra come assegnare un nuovo ruolo a un nuovo nome e come impostarlo su sola lettura, nelle impostazioni generali nel server Analysis Services.

  1. Nelle impostazioni Appartenenza aggiungere gli utenti che chiameranno l'API Token di incorporamento - Genera token. Se si usa un'entità servizio che non è un amministratore, aggiungere anch’essa.

    Screenshot dell’aggiunta di utenti a un nuovo ruolo nel server Analysis Services.

  2. Nelle impostazioni di Filtri di riga impostare la query DAX usando la funzione CUSTOMDATA().

    Screenshot che mostra come aggiungere la funzione customData alla query DAX in un nuovo ruolo nel server Analysis Services.

Entità servizio

Se si usa un'entità servizio per incorporare il report, assicurarsi che l'entità servizio sia un amministratore del server o un membro del ruolo di AAS. Per concedere autorizzazioni di amministratore AAS all'entità servizio, vedere Aggiungere un'entità servizio al ruolo di amministratore del server. Per aggiungere l'entità servizio come membro del ruolo, passare alle impostazioni di appartenenza.

Usare l'ID oggetto entità servizio come nome utente (identità effettiva).

Migrazione di Analysis Services

È possibile eseguire la migrazione da AAS a Power BI Premium anche se si dispone di un report AAS incorporato. Il report incorporato non verrà interrotto durante la migrazione, purché l'entità che chiama l’API del Token di incorporamento - Genera token sia membro o amministratore dell'area di lavoro.

Nota

Se l'entità servizio non è un amministratore e non si vuole renderla un amministratore dell'area di lavoro quando si esegue la migrazione, eseguire la migrazione di tale modello in un'area di lavoro separata in cui è possibile concedere autorizzazioni di amministratore.

Generare un token di incorporamento

Usare l'API Genera token per generare un token di incorporamento che esegue l'override dell'identità effettiva.

Le informazioni necessarie per generare un token di incorporamento dipendono da come si è connessi a Power BI (entità servizio o utente master) e anche dal fatto che il database disponga di sicurezza a livello di riga (RLS).

Per generare un token di incorporamento, fornire le informazioni seguenti:

  • Nome utente (Facoltativo se non c’è sicurezza a livello di riga. Obbligatorio in caso sia presente sicurezza a livello di riga: il nome utente deve essere lo stesso del chiamante API (in questo caso, l'UPN dell'utente master). Se il database non usa la sicurezza a livello di riga e non viene specificato nessun nome utente, vengono usate le credenziali dell'utente master.
  • Ruolo (obbligatorio in caso di sicurezza a livello di riga): il report visualizzerà solo i dati se l'identità effettiva è un membro del ruolo.

Esempio:

Definire l'identità utente e i ruoli per uno dei tre scenari seguenti:

  • Se la sicurezza a livello di riga non è implementata:

Non è necessario definire alcuna identità efficace.

  • Se si usa sicurezza a livello di riga statica:

        var rlsidentity = new EffectiveIdentity(  //If static RLS
           username: "username@contoso.com", 
           roles: new List<string>{ "MyRole" },
           datasets: new List<string>{ datasetId.ToString()}
        )
    
  • Se si usa sicurezza a livello di riga dinamica:

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

    Nota

    Nel token di incorporamento, customData non può essere maggiore di 1.024 caratteri.

Usare l'identità effettiva per generare un token di incorporamento:

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

Usare il token di incorporamento per incorporare il report nell'app o nel sito Web. Il report filtra i dati in base alla sicurezza a livello di riga applicata nel report.