Filter erstellen

Sie können einen Filter für jede Gruppe von Zugriffsbeschränkungen erstellen, die Sie für Essbase-Datenbankwerte festlegen müssen. Sie müssen keine separaten Filter für Benutzer mit denselben Zugriffsanforderungen erstellen. Nachdem Sie einen Filter erstellt haben, können Sie ihn mehreren Benutzern oder Benutzergruppen zuweisen.

Hinweis:

Wenn Sie eine Berechnungsfunktion verwenden, die eine Gruppe von Elementen zurückgibt, z.B. untergeordnete Elemente oder abhängige Elemente, und eine Auswertung zu einer leeren Gruppe ergibt, wird der Sicherheitsfilter nicht erstellt. In das Anwendungslog wird ein Fehler geschrieben, der angibt, dass die Regionsdefinition als leeres Set ausgewertet wurde.

Bevor Sie einen Filter erstellen, führen Sie die folgenden Aktionen aus:

  • Melden Sie sich beim Server an, und wählen Sie die Datenbank aus, die mit dem Filter verknüpft ist.

  • Prüfen Sie die Benennungsregeln für Filter in Limits.

Siehe Filter erstellen.

Um einen Filter zu erstellen, können Sie auch die create filter-Anweisung MaxL verwenden.

Elemente filtern und Elementkombinationen filtern

Der Zugriff auf Essbase-Datenbankwerte kann gesteuert werden, indem ganze Elemente gefiltert oder Elementkombinationen gefiltert werden. Das separate Filtern von Elementen wirkt sich auf ganze Datenabschnitte für diese Elemente aus. Das Filtern von Elementkombinationen wirkt sich auf die Daten an den Elementschnittpunkten aus.

Abbildung 30-1: Auswirkungen von Filtern auf Daten- UND/ODER-Beziehungen


Diese Abbildung zeigt zwei Cubes: Der linke Cube veranschaulicht die Auswirkungen von OR-Beziehungen. Der rechte Cube veranschaulicht die Auswirkungen von AND-Beziehungen.

Hinweis:

Das Filtern nach Elementkombinationen (AND-Beziehung) gilt nicht für Metadateien. Metaread filtert jedes Element separat (OR-Beziehung).

Elemente separat filtern

Um alle Daten für mindestens ein Essbase-Modellstrukturelement zu filtern, definieren Sie den Zugriff für jedes Element in einer eigenen Zeile. Filterdefinitionen in separaten Zeilen eines Filters werden mit einer ODER-Beziehung behandelt.

Beispiel: Um den Zugriff auf Sales oder Jan zu blockieren, wird dem Benutzer KSands der folgende Filter zugewiesen:

  • Zugriff: Keine. Mitgliedsspezifikation: Verkauf.

  • Zugriff: Keine. Mitgliedsangabe: Jan.

Wenn sich Benutzer KSands das nächste Mal mit Sample Basic verbindet, zeigt ihre Tabellenansicht der Gewinnspanne für Qtr1, dass sie keinen Zugriff auf Datenwerte für das Mitglied Sales oder das Mitglied Jan hat, die mit #NOACCESS markiert sind. Alle Daten für Sales sind für den Januar sowie alle Daten innerhalb und außerhalb des Sales-Mitglieds gesperrt. Daten für COGS (Cost of Goods Sold), ein gleichgeordnetes Element des Umsatzes und ein untergeordnetes Element der Marge, sind verfügbar, mit Ausnahme der COGS für Januar.

Abbildung 30-2: Ergebnisse der Filterblockierung beim Zugriff auf Verkäufe oder Jan


Diese Bilder zeigen eine Tabelle, in der Zellen, die durch Filter blockiert sind, mit #NOACCESS markiert sind.

Elementkombinationen filtern

Um Daten für Essbase-Elementkombinationen zu filtern, definieren Sie den Zugriff für jede Elementkombination mit einer Zeile im Filtereditor. In Filterdefinitionen werden zwei durch ein Komma getrennte Elementgruppen als Vereinigung dieser beiden Elementgruppen (eine UND-Beziehung) behandelt.

Beispiel: Dem Benutzer RChin wird der folgende Filter zugewiesen: Zugriff: Keine. Mitgliedsspezifikation: Sales, Jan.

Wenn sich der Benutzer RChin das nächste Mal mit Sample Basic verbindet, zeigt seine Tabellenansicht der Gewinnspanne für Qtr1, dass er keinen Zugriff auf den Datenwert an der Kreuzung der Mitglieder Sales und Jan hat, der mit #NoAccess markiert ist. Die Verkaufsdaten für Januar sind gesperrt. Es sind jedoch Vertriebsdaten für andere Monate verfügbar, und Nichtverkaufsdaten für Januar sind verfügbar.

Abbildung 30-3 Ergebnisse der Filterblockierung Zugriff auf Verkäufe, Jan


Diese Abbildung zeigt eine Tabelle, in der Vertriebsdaten für Jan für den Benutzer gesperrt sind.

Mit Substitutionsvariablen filtern

Mit Essbase-Substitutionsvariablen können Sie Informationen verwalten, die sich regelmäßig ändern. Jede Variable hat einen zugewiesenen Namen und Wert. Ein Datenbankmanager kann den Wert jederzeit ändern. Wenn eine Substitutionsvariable in einem Filter angegeben wird, wird der Wert zum Zeitpunkt des Zugriffs auf die Daten angewendet.

Beispiel: Wenn eine Gruppe von Benutzern nur Daten für den aktuellen Monat anzeigen soll, können Sie eine Substitutionsvariable namens "CurMonth" einrichten und einen Filter (MonthlyAccess) definieren, in dem Sie den Zugriff angeben, indem Sie &CurMonth als Elementnamen verwenden. Wenn Sie ein Et-Zeichen (&) am Anfang einer Spezifikation verwenden, wird es als Substitutionsvariable anstelle eines Elementnamens in Essbase identifiziert. Weisen Sie den entsprechenden Benutzern den Filter "MonthlyAccess" zu.

Jeden Monat müssen Sie nur den Wert der Ersetzungsvariable "CurMonth" in den Elementnamen für den aktuellen Monat ändern, z.B. Jan, Feb usw. Der neue Wert gilt für alle zugewiesenen Benutzer.

Informationen hierzu finden Sie unter Variablen zum Ändern von Informationen implementieren.

Mit Attributfunktionen filtern

Mit Filtern können Sie den Zugriff auf Essbase-Daten für Basiselemente einschränken, die ein bestimmtes Attribut gemeinsam verwenden. Um Daten für Elemente mit bestimmten Attributen zu filtern, die in einer ATTRIBUTE-Dimension definiert sind, verwenden Sie das Attributelement in Kombination mit der Funktion @ATTRIBUTE oder der Funktion @WITHATTR.

Hinweis:

@@ATTRIBUTE und @WITHATTR sind Elementsetfunktionen. Die meisten Elementgruppenfunktionen können in Filterdefinitionen verwendet werden.

Beispiel: Angenommen, dem Benutzer PJones ist der folgende Filter zugewiesen: Zugriff: Keine. Mitgliedsspezifikation: @ATTRIBUTE("Caffeinated_False").

Wenn der Benutzer PJones das nächste Mal eine Verbindung zu Sample Basic herstellt, zeigt seine Tabellenansicht des Umsatzes von Cola im ersten Quartal in Kalifornien, dass er keinen Zugriff auf die Datenwerte für alle Basisdimensionselemente hat, die Caffeinated_False zugeordnet sind. Verkaufsdaten für Caffeine Free Cola werden nicht angezeigt. Beachten Sie, dass Caffeine Free Cola ein Basiselement ist und Caffeinated_False ein zugehöriges Element der Attribute-Dimension Caffeinated (nicht in der Tabellenansicht dargestellt).

Abbildung 30-4 Ergebnisse der Filterblockierung des Zugangs zu koffeinfreien Produkten


Diese Bilder zeigen eine Tabelle, in der Verkaufsdaten für Caffeine Free Cola für den Benutzer gesperrt sind.

Metadatenfilter

Die Metadatenfilterung bietet Datenfilterung und eine zusätzliche Sicherheitsebene. Mit der Metadatenfilterung kann ein Essbase-Administrator Gliederungselemente aus der Ansicht eines Benutzers entfernen und nur auf die Elemente zugreifen, die für den Benutzer von Interesse sind.

Wenn ein Filter verwendet wird, um die MetaRead-Berechtigung auf ein Element anzuwenden:

  1. Daten für alle Vorgänger dieses Elements werden in der Ansicht des Filterbenutzers ausgeblendet.

  2. Daten und Metadaten (Elementnamen) für alle gleichgeordneten Elemente dieses Elements werden in der Ansicht des Filterbenutzers ausgeblendet.

Dynamische Filter

Sie können dynamische Essbase-Sicherheitsfilter basierend auf externen Quelldaten erstellen, um die Anzahl der erforderlichen Filterdefinitionen zu reduzieren. Dazu nutzen Sie Definitionssyntax für dynamische Filter, einschließlich der Methode @datasourceLookup und der Variablen $LoginUser und $LoginGroup.

Hinweis:

Dynamische Filter unterstützen SQL-Funktionen wie LOWER, UPPER und CAST, einschließlich verschachtelter Ausdrücke. Sie können diese Funktionen direkt mit Elementgruppenfunktionen verwenden, um flexiblere und präzisere Zugriffsfilterdefinitionen zu erstellen.

Syntax für dynamische Filter

Verwenden Sie Syntax für dynamische Filter, um flexible Filter zu erstellen, die Sie mehreren Benutzern und Gruppen zuweisen können.

Filterzeilen können folgende Elemente als Teil der Definition zusammen mit Elementausdrücken enthalten.

$loginuser

Diese Variable speichert den Wert des derzeit angemeldeten Benutzers zur Laufzeit. Sie kann zusammen mit der Methode @datasourcelookup verwendet werden.

$logingroup

Diese Variable speichert den Wert aller Gruppen, zu denen der aktuell angemeldete Benutzer gehört. Dazu gehören sowohl direkte als auch indirekte Gruppen. Bei Kombination mit der Methode @datasourcelookup wird jede Gruppe einzeln in der Datenquelle gesucht.

@datasourcelookup

Diese Methode ruft Datensätze aus einer Datenquelle ab.

Syntax

@datasourcelookup (dataSourceName, columnName, columnValue, returnColumnName)
Parameter Beschreibung
dataSourceName

Der Name der externen Datenquelle, die in Essbase definiert ist. Stellen Sie bei einer Datenquelle auf Anwendungsebene den Anwendungsnamen und einen Punkt als Präfix voran.

columnName

Der Name der Datenquellenspalte, in der eine angegebene columnValue gesucht werden muss.

columnValue

Der Wert, nach dem in columnName gesucht werden soll.

returnColumnName

Der Name der Datenquellenspalte, aus der eine Liste mit Werten zurückgegeben werden soll.

Hinweis:

Datenquellenspaltennamen dürfen keine reservierten SQL-Wörter wie USER, GROUP oder ROLE verwenden. Die Verwendung reservierter Wörter kann zu SQL-Parsingfehlern oder unerwartetem Filterverhalten führen.

Beschreibung

Ein @datasourcelookup-Aufruf entspricht der folgenden SQL-Abfrage:

select returnColumnName from dataSourceName where columnName=columnValue

@datasourcelookup sucht die angegebene Datenquelle und sucht Datensätze, bei denen columnName columnValue enthält. Wenn Sie columnValue als $loginuser angeben, werden Datensätze gesucht, bei denen columnName den Namen des derzeit angemeldeten Benutzers enthält.

Essbase bildet die Filterdefinitionszeile, indem die Listenelemente in einer durch Komma getrennten Zeichenfolge kombiniert werden. Wenn ein Datensatz Sonderzeichen, Leerzeichen oder nur Zahlen enthält, wird er in Anführungszeichen gesetzt.

Hinweis:

Mit dem Parameter @options kann das Verhalten von Lookup-Fehlern gesteuert werden. Wenn StrictLookup=true ist, werden Lookup-Fehler als schwerwiegende Fehler behandelt, und es werden keine Filterergebnisse zurückgegeben.

Beispiele

Schließen Sie die Parameter in Anführungszeichen ein.

Der folgende Aufruf ruft eine globale Datenquelle ab und gibt eine Liste mit Geschäftsnamen zurück, bei denen Mary Store-Manager ist.

@datasourceLookup("StoreManagersDS","STOREMANAGER","Mary","STORE")

Der folgende Aufruf ruft eine Datenquelle auf Anwendungsebene ab und gibt eine Liste mit Geschäftsnamen zurück, bei denen der derzeit angemeldete Benutzer Store-Manager ist.

@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE")

Der folgende Aufruf ruft eine Datenquelle auf Anwendungsebene ab und gibt eine Liste mit Geschäftsnamen zurück, bei denen die Geschäftsabteilung einer der Gruppen entspricht, zu denen der angemeldete Benutzer gehört.

@datasourceLookup("Sample.StoreManagersDS","STORE_DEPARTMENT","$logingroup","STORE")

Wenn der angemeldete Benutzer zu 3 Gruppen gehört, gibt die oben genannte @datasourcelookup-Methode alle übereinstimmenden Spaltenwerte für jede Gruppe zurück.

Im folgenden Beispiel werden SQL-Funktionen in einem dynamischen Filterausdruck verwendet.

@datasourceLookup("Sample.StoreManagersDS",LOWER(CAST("STOREMANAGER" AS VARCHAR(30))),LOWER("$loginuser"),"STORE")

Im folgenden Beispiel wird die Groß-/Kleinschreibung mithilfe expliziter Groß-/Kleinschreibungsfunktionen ausgewertet.

@datasourceLookup("Sample.StoreManagersDS",UPPER("STOREMANAGER"),UPPER("$loginuser"),"STORE")

Im folgenden Beispiel werden Filialen zurückgegeben, die zur Vertriebs- oder Marketingabteilung gehören.

@datasourceLookup("Sample.StoreManagersDS","STORE_DEPARTMENT","Sales","Marketing","STORE")

Im folgenden Beispiel wird eine Elementset-Funktion mit @datasourceLookup verwendet.

@DESCENDANTS(@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE"))

Im folgenden Beispiel werden verschachtelte Elementgruppenfunktionen mit einem Datenquellen-Lookup verwendet.

@CHILDREN(@LSIBLING(@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE")))

Im folgenden Beispiel wird ein striktes Lookup-Verhalten verwendet. Wenn die Suche fehlschlägt, werden keine Filterergebnisse zurückgegeben.

@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE",@options(strictLookup=true))

Workflow zum Erstellen von dynamischen Filtern

Mit dem folgenden allgemeinen Workflow können Sie dynamische Filter erstellen.

Beim diesem Workflow für dynamische Filter wird vorausgesetzt, dass Sie bereits über einen Cube verfügen und Benutzern und Gruppen Berechtigungen zugewiesen haben.

  1. Identifizieren Sie eine Datenquelle (ob Datei oder relationale Quelle).
  2. Definieren Sie die Verbindung und die Datenquelle in Essbase (entweder global oder auf Anwendungsebene).
  3. Erstellen Sie Filter auf Cube-Ebene. Navigieren Sie zum Cube, und wählen Sie Filter aus.
  4. Definieren Sie Filterzeilen für jeden Filter mit der Syntax des dynamischen Filters so, dass die Variable ($loginuser), die Variable ($logingroup) und die Methode (@datasourcelookup) nach Bedarf verwendet werden können.
  5. Weisen Sie die Filter Benutzern oder Gruppen zu.
  6. Wenn Sie den Filter einer Gruppe zugewiesen haben, weisen Sie die Gruppe der zu filternde Anwendung zu. Navigieren Sie zur Anwendung, und wählen Sie Berechtigungen aus.

Beispiel für einen dynamischen Filter

Der folgende dynamische Filter funktioniert mit dem Cube "Efficient.UserFilters", der in der Galerie als Beispielvorlage verfügbar ist.


Dynamischer Filter mit drei Zeilen, der dem angemeldeten Benutzer MetaRead-Zugriff erteilt.

Um zu erfahren, wie du diesen dynamischen Filter erstellst und anwendest, lade die Arbeitsmappenvorlage Efficient_Filters.xlsx vom Abschnitt "Technisch" der Galerie hoch, und befolgen Sie die README-Anleitungen in der Arbeitsmappe. Sie finden die Galerie in der Essbase-Weboberfläche im Abschnitt Dateien.