Es wird empfohlen, sich mit der Filterfunktion vertraut zu machen, bevor Sie mit diesem Tutorial fortfahren.

Im Dialogfeld Filter können Sie Filter für die Ansicht einrichten.

Manchmal ist es bequemer, den Filter direkt zur Indikatorformel hinzuzufügen. Du kannst dies tun, wenn:

  • Sie referenzieren Daten aus anderen Datensätzen.
  • Sie möchten nicht, dass Ihre Benutzer Filter ändern.

Filtern von Attributen

Die Filterfunktion unterstützt die meisten von PostgreSQL unterstützten Operatoren wie in/not in, ilike, like/not Like, similar to/not similar to etc. "ilike" ist ähnlich wie "like", aber die Groß-/Kleinschreibung ist unempfindlich gegenüber dem übereinstimmenden Muster.

  • Filter mit Operator: in/not In

Das folgende Beispiel filtert Daten so, dass sie nur Paris, Berlin und London in ihr City-Attribut aufnehmen. Das Ergebnis liefert eine Zusammenfassung der Besuche in diesen drei Städten.

filter("L_CITY in ('Paris','Berlin','London')") {
    return M_VISITS;
}

Beachten Sie die korrekte Verwendung von Apostrophe im Beispiel.

  • Regelmäßige Ausdrücke

Pattern

Beschreibung

_

Steht für jedes einzelne Zeichen.

%

Steht für eine beliebige Folge von Null oder mehr Zeichen.

*

Bezeichnet die Wiederholung des vorherigen Elements null oder mehr Mal.

+

Denotes repetition of the previous item one or more times.

?

Bezeichnet die Wiederholung des vorherigen Elements Null oder einmalig.

|

Kennzeichnet eine Alternative (eine von zwei Alternativen).

Some examples for regular expressions:
'abc' LIKE 'abc'    true
'abc' LIKE 'a%'     true
'abc' LIKE '_b_'    true
'abc' LIKE 'c'      false

Filterindikatoren

Das folgende Beispiel zählt die Anzahl der Datensätze, die den Wert des Indikators für Besuche größer als 3 haben.

count = 0
filter('M_VISITS > 3') { 
    count++; 
} 

return count;

Beachten Sie, dass der Filter auf jeden Dataset angewendet wird und nicht auf seinen in der Ansicht angezeigten aggregierten Wert.

Datums-Filterung

Beim Filtern von Daten ist nur das Format'yyyyyyy-MM-dd' erlaubt. Das folgende Beispiel gibt die Anzahl der Studenten zurück, die am 12. September 2014 eine Prüfung abgelegt haben.

 

filter("L_DATE in ('2014-09-12')") {L_STUDENT_COUNT}

 

Um den ganzen Monat oder das ganze Jahr zu filtern, legen Sie die Datum-Teil-Funktion in den Filter. Nachfolgend die Anzahl der Studenten, die im September 2014 eine Prüfung abgelegt haben.

filter("date_part('month', L_DATE) = 9 AND date_part('year', L_DATE) = 2014") {L_STUDENT_COUNT}

Zeitfilterung

Beim Filtern der Zeit ist nur das Format'HH:mm:ss' erlaubt. Das folgende Beispiel gibt die Anzahl der Patienten zurück, die um 10:00 Uhr angekommen sind.

filter("L_TIME in ('10:00:00')") {L_PATIENT_COUNT}

Um ganze Stunden, Minuten oder Sekunden zu filtern, kann die date_part Funktion in die Filterfunktion integriert werden. Das folgende Beispiel gibt die Anzahl der Patienten zurück, die zwischen 10:00 und 10:59 Uhr angekommen sind.

filter("date_part('hour', L_TIME) =10") {L_PATIENT_COUNT}

Multiple Filter

Folgendes Beispiel gibt die Anzahl der Schüler zurück, die außergewöhnliche Ergebnisse aus dem Fach Mathematik erzielt haben.

filter("(L_PASS_RESULT in ('Exceptional')) AND (L_PASS_SUBJECT in ('Math'))"){
  L_STUDENT_COUNT
}

Sie können mehrere Filterbedingungen mit UND- oder ODER-Verknüpfung kombinieren.

Code-Alternativen

Diese Funktion ist seit BellaDati 2.9.2 verfügbar.

Es ist möglich, Filter in Formeln auf verschiedene Arten zu schreiben. Die erste ist in den obigen Beispielen erwähnt. Der zweite verwendet einen programmatischeren Ansatz. In wenigen Schritten wird der Filter erstellt und dann gebaut.

def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'OperationType', 'value1')
filter(buildFilter(f)) {
  ...
}

Die Funktion andFilter() wird verwendet, um dem Filter eine weitere Bedingung hinzuzufügen. Es ist möglich, mehr als eine Bedingung hinzuzufügen, indem Sie mehrere andFilter() Funktionen verwenden.

Folgende Operationen sind verfügbar:

BetriebBeschreibung
EQwertet aus, ob zwei Werte gleich sind.
NEQwertet aus, ob zwei Werte ungleich sind.
GT

wertet aus, ob der erste Wert größer als der zweite Wert ist.

GTEwertet aus, ob der erste Wert größer als der zweite Wert oder gleich ist.
LT

wertet aus, ob der erste Wert kleiner als der zweite Wert ist.

LTEwertet aus, ob der erste Wert kleiner als der zweite Wert oder gleich ist.
INwertet aus, ob der erste Wert gleich einem der Werte aus der Liste ist.

NOT_IN

wertet aus, ob der erste Wert ungleich einem der Werte aus der Liste ist.
NOT_NULLwertet aus, ob der erste Wert NULL ist.
NULLwertet aus, ob der erste Wert nicht NULL ist.

Bei den Operationen NULL und NOT NULL ist der zweite Wert leer.

def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'NULL','')
filter(buildFilter(f)) {
  ...
}

 

Für die Operationen IN und NOT_IN ist es möglich, mehr als einen Wert zum Vergleich zu definieren.

def f = createFilter()
f = andFilter(f, 'L_ATTRIBUTE', 'IN', 'value1', 'value2')
filter(buildFilter(f)) {
  ...
}

Filtern von GeoJSON-Werten

Diese Funktion ist seit BellaDati 2.9.2 verfügbar.

Filter können auch verwendet werden, um zu beurteilen, ob sich ein bestimmter GEO-Punkt innerhalb eines von o GeoJSON definierten Bereichs befindet. Um diese Funktion nutzen zu können, muss PostGIS auf dem Server installiert sein. Administratoren können die Seite Datenbankübersicht öffnen, um zu sehen, ob PostGIS installiert ist oder nicht.

String f = filterGeoJSONContains('L_GEOJSON', '134.256028,-24.162618')
filter(f) { 
 L_NAME_COUNT
}

Eine weitere Möglichkeit besteht darin, diesen Filter zu verwenden, um den Namen eines Bezirks oder Staates abzurufen, in dem sich der GEO-Punkt befindet.

String f = filterGeoJSONContains('L_JSON', '134.256028,-24.162618')
filter(f) { 
  crossValue('GEOJSON', 'L_NAME_FIRSTVALUE')  
}

Nächste Schritte