Power BI – Datenanzeige für angemeldeten User steuern

Power BI Berichte lassen sich auf unterschiedlichste Weise filtern, die Daten per Parameter einschränken, oder über Sicherheit auf Zeilenebene im Kontext des aufrufenden Benutzers einschränken, anders ausgedrückt gefiltert anzeigen.

In diesem Blog setze ich mich mit der Fragestellung auseinander, wie sich Daten in Berichten beim Aufruf des jeweiligen Users automatisch filtern lassen, sprich, der angemeldete User erhält die für ihn vorgesehenen (gefilterten) Daten angezeigt.

Die Möglichkeiten dem nachzukommen sind sicher vielfältig, jedoch z.T. hinsichtlich der Einstellungen, um dies umzusetzen recht aufwendig Rollen zu definieren, umfangreiche Parametrisierung vorzunehmen, oder eben nicht automatisch beim Aufruf zu empfangen.

Ausgangslage ist die Northwind-Datenbank, die schon einige Relationen mitbringt. Diese habe ich vollständig in die Power BI Instanz übernommen, sie ist die Grundlage. Weiterführend kommen weitere Tabellen als Relationen hinzu. Diese liste ich nachfolgend auf:

Tabelle „User Access“:

clip_image003

In eine beliebige Tabelle wird ein Measure mit dem Namen „User“ mittels der Function „USERNAME()“ erstellt.

clip_image005

Tabelle „C_Categories“:

clip_image007

Tabelle „C_Categories + Others“:

Diese Tabelle wird über die Registerkarte „Tabellentools“ -> „Neue Tabelle“ mittels eines
DAX-Ausdruck erzeugt.

clip_image009

Die Syntax hierfür:

C_Categories + Others = union(all(C_Categories[CustCatName]);row("CustCatName"; "Others"))

Die untenstehende Tabelle fügt die Informationen aus der Tabelle C_Categories zusammen inklusive der Kategorie “Others” die neu hinzugefügt wird. Die Function “Union” fügt diese Informationen zusammen, zusätzlich liefert die Function “Row” den Eintrag “Others”.

clip_image011

Nun wird ein weiteres Measure „SumSales vs Others“ erzeugt.

clip_image013

Die Syntax hierfür:

SumSales vs Others =

Var CurrentUserCategory = Calculate(Max('User Access'[Category]); 'User Access'[Username] = USERNAME())

Var CurrentCategoryFilter = Filter(C_Categories; C_Categories[CustCatName] = CurrentUserCategory)

Var OthersFilter = Filter(C_Categories; C_Categories[CustCatName] <> CurrentUserCategory)

Return

Switch(

TRUE();

Selectedvalue('C_Categories + Others'[CustCatName]) = CurrentUserCategory; Calculate('Order Details'[SumSales]; CurrentcategoryFilter);

Selectedvalue('C_Categories + Others'[CustCatName]) = "Others"; Calculate('Order Details'[SumSales]; Othersfilter);

Blank()

)

Um hinterher die Ausgabe je nach angemeldetem User gewährleisten zu können, wurden drei Variablen erstellt. Diese münden dann in der „Switch“ Function. Sie sorgt dafür, dass der User anhand der ihm zugeordneten Kategorie „CurrentUserCategory“ entsprechende Daten angezeigt bekommt.

Damit die Filterung tatsächlich so wie vorgesehen funktioniert, ist darauf zu achten, dass die Tabelle mit der Northwind Datenbank Struktur verknüpft wird.

Nachfolgend wird die Verknüpfung vorgenommen.

clip_image015

clip_image017

Anhand der beiden Screenshots ist zu sehen wie die Beziehungen zu definieren sind.

Nun ist es an der Zeit eine Visualisierung zu erstellen, um die Filterungseffekte userbezogen betrachten zu können.

Das Measure „SumSales“ sollte zuvor noch erstellt werden, dieses bringt die Northwind Datenbank standardmäßig nicht mit.

clip_image022

Für das vorliegende Beispiel verwende ich zwei Visualisierungen.

Die Visualisierung „Karte“ stellt das Measure „User“ aus der Tabelle „User Access“ dar.

clip_image020

Die zweite Visualisierung ist ein „Ringdiagramm“. Das Diagramm enthält für das Datenfeld „Legende“ das Feld „CustCatName“ aus der Tabelle „C_Categories + Others“ zugeordnet und das Datenfeld „Werte“ das Measure „SumSales“.

clip_image024 clip_image026

Auf den nachfolgenden Screenshots wird sichtbar, dass mit einem lokal angemeldeten User andere Zahlen angezeigt werden als auf dem zweiten Screenshot, wo der Bericht bereits veröffentlicht worden ist. Dort sehen die Zahlen aufgrund des Identitätswechsels anders aus, somit funktioniert die Idee.

Vor dem Identitätswechsel auf lokaler Ebene

clip_image029

Nach dem Identitätswechsel auf in der Power BI App

clip_image031

Es gilt abschließend anzumerken, dass lediglich die Relation mit User Access mit den entsprechenden Kategorien und Benutzernamen gepflegt werden müssen, um Ziel der Anzeige nach Kategorie zu erreichen.

Viel Spaß beim Umsetzen.

Kommentare sind geschlossen