Einbetten eines Berichts mit einer AAS-Datenbank (Azure Analysis Services)

GILT FÜR: Die App besitzt die Daten Der Benutzer besitzt die Daten

In diesem Artikel wird erläutert, wie Sie in Sie einen Power BI-Bericht, der Daten verwendet, die in Azure Analysis Services (AAS) gespeichert sind, in ein Szenario zum Einbetten für Ihre Kunden einbetten können. Dieser Artikel richtet sich an unabhängige Softwareentwickler (Independent Software Developers, ISVs), die einen Bericht mit AAS-Daten einbetten möchten, unabhängig davon, ob die Datenbank Sicherheit auf Zeilenebene (Row-Level Security, RLS) implementiert.

Voraussetzungen

Sie benötigen einen Bericht mit einer Liveverbindung mit der AAS-Datenbank mit oder ohne RLS.

Dynamische Sicherheit: RLS

Wenn Ihr Bericht dynamische RLS implementieren soll, verwenden Sie die Funktion customeData. Da Sie die effektive Identität nicht außer Kraft setzen können, empfehlen wir das Erstellen neuer Rollen mit customData. Sie können auch Rollen verwenden, die über die Funktionen username oder userPrincipalName verfügen, wenn Sie sie durch customData ersetzen.

Führen Sie die folgenden Schritte aus, um eine neue Rolle zu erstellen und der Rolle die Funktion customData hinzuzufügen.

  1. Erstellen Sie eine Rolle auf dem Analysis Services-Server.

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

  2. Geben Sie in den allgemeinen Einstellungen einen Rollennamen an, und legen Sie die Datenbankberechtigungen auf Schreibgeschützt fest.

    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. Fügen Sie in den Einstellungen für die Mitgliedschaft die Benutzer hinzu, die die API zum Einbetten/Generieren von Token aufrufen. Wenn Sie einen Dienstprinzipal verwenden, der kein Administrator ist, fügen Sie diesen ebenfalls hinzu.

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

  2. Legen Sie in den Einstellungen für Zeilenfilter Ihre DAX-Abfrage mithilfe der Funktion CUSTOMDATA() fest.

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

Dienstprinzipal

Wenn Sie einen Dienstprinzipal verwenden, um den Bericht einzubetten, stellen Sie sicher, dass der Dienstprinzipal ein Serveradministrator oder Rollenmitglied von AAS ist. Informationen zum Erteilen von AAS-Administratorberechtigungen für den Dienstprinzipal finden Sie unter Hinzufügen eines Dienstprinzipals zur Serveradministratorrolle. Um den Dienstprinzipal als Rollenmitglied hinzuzufügen, wechseln Sie zu den Einstellungen für die Mitgliedschaft.

Verwenden Sie die Dienstprinzipalobjekt-ID als Benutzername (effektive Identität).

Analysis Service-Migration

Sie können von AAS zu Power BI Premium migrieren, auch wenn Sie über einen eingebetteten AAS-Bericht verfügen. Ihr eingebetteter Bericht wird während der Migration nicht unterbrochen, solange der Prinzipal, der die API zum Einbetten/Generieren von Token aufruft, ein Mitglied oder Administrator des Arbeitsbereichs ist.

Hinweis

Wenn der Dienstprinzipal kein Administrator ist und Sie ihn nicht zum Administrator des Arbeitsbereichs machen möchten, wenn Sie die Migration durchführen, migrieren Sie dieses Modell zu einem separaten Arbeitsbereich, in dem Sie ihm Administratorberechtigungen erteilen können.

Generieren eines Einbettungstokens

Verwenden Sie die API zum Generieren von Token, um ein Einbettungstoken zu generieren, das die effektive Identität außer Kraft setzt.

Die Informationen, die zum Generieren eines Einbettungstokens erforderlich sind, hängen davon ab, wie Sie mit Power BI (Dienstprinzipal oder Masterbenutzer) verbunden sind, sowie davon, ob für die Datenbank RLS festgelegt ist.

Um ein Einbettungstoken zu generieren, geben Sie die folgenden Informationen an:

  • Benutzername (Optional ohne RLS. Erforderlich für RLS): Der Benutzername muss mit dem API-Aufrufer (in diesem Fall dem UPN des Masterbenutzers) identisch sein. Wenn die Datenbank keine RLS verwendet und kein Benutzername bereitgestellt wird, werden die Anmeldeinformationen des Masterbenutzers verwendet.
  • Rolle (für RLS erforderlich): Der Bericht zeigt nur Daten an, wenn die effektive Identität ein Mitglied der Rolle ist.

Beispiel:

Definieren Sie die Benutzeridentität und -rollen für eins der folgenden drei Szenarien:

  • RLS ist nicht implementiert:

Es muss keine effektive Identität definiert werden.

  • Es wird statische RLS verwendet:

        var rlsidentity = new EffectiveIdentity(  //If static RLS
           username: "username@contoso.com", 
           roles: new List<string>{ "MyRole" },
           datasets: new List<string>{ datasetId.ToString()}
        )
    
  • Es wird dynamische RLS verwendet:

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

    Hinweis

    customData im Einbettungstoken darf nicht größer als 1.024 Zeichen sein.

Verwenden Sie die effektive Identität, um ein Einbettungstoken zu generieren:

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

Verwenden Sie das Einbettungstoken, um den Bericht in Ihre App oder Website einzubetten. Ihr Bericht filtert Daten nach der angewendeten RLS im Bericht.

Nächste Schritte