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.
Erstellen Sie eine Rolle auf dem Analysis Services-Server.
Geben Sie in den allgemeinen Einstellungen einen Rollennamen an, und legen Sie die Datenbankberechtigungen auf Schreibgeschützt fest.
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.
Legen Sie in den Einstellungen für Zeilenfilter Ihre DAX-Abfrage mithilfe der Funktion
CUSTOMDATA()
fest.
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.