Matrixwerte als Parameter Filter Matrix

Normalerweise arbeiten die Filtermatrix und verschiedene Widgets recht nahtlos zusammen. Aktivieren wir die Checkbox „Filtermatrix-Abfrage anwenden“, werden automatisch Filter aus der Filtermatrix auf die Suchanfrage angewendet und somit die Daten der Datenabfrage entsprechend gefiltert.

Aber manchmal ist es vorteilhaft (z. B. aus Performancegründen oder um es an eine gespeicherte Prozedur zu übergeben), die ausgewählten Filtermatrixwerte direkt in einer Datenabfrage zu verwenden.

Zuerst schauen wir uns an, wie der automatische Filter unter der Haube arbeitet.

Wir erhalten Mitarbeiterdaten von einer Datenabfrage namens employees . Außerdem haben wir eine Filtermatrix, um die Tabelle nach department zu filtern. Wir verwenden die automatische Filtermatrix-Suchfunktion über das Kontrollkästchen „Filtermatrix-Abfrage anwenden“.

Die Datenabfrage selbst ist eine sehr einfache Auswahl auf der mitarbeiter Tabelle.

SELECT * from mitarbeiter

Sobald wir beginnen, Werte aus der Filtertabelle auszuwählen, fordert das Dashboard die Daten vom Webservice mit einem select Request an. Es transformiert die ausgewählten Werte aus der Filtermatrix in den URL-Parameter department department=IN(Development,Management) . Dies führt dazu, dass der Webservice nur Zeilen mit der Abteilung „Entwicklung“ oder „Management“ zurückgibt.

Der Webservice wendet automatisch alle Parameter an, für die er eine Spalte als Filter hat. Dies gilt auch für Parameter, die direkt im Feld „Suchanfrage“ hinzugefügt werden.

Da wir jetzt wissen, wie der automatische Filtermechanismus funktioniert, können wir damit beginnen, die Filtermatrixwerte als Datenabfrageparameter zu verwenden. Dazu müssen wir die Datenabfrage etwas erweitern.

SELECT 
  * 
 FROM 
   mitarbeiter
 WHERE
   ${departmentFilter} = '' OR
   ${departmentFilter}::text IS NULL OR
   department = ANY (string_to_array(${departmentFilter}, ','))

Wir definieren einen Datenabfrageparameter namens departmentFilter . Später übergeben wir die Auswahl aus der Filtermatrix, die dann in ein Array umgewandelt wird. Mit dem ANY Operator filtern wir nach Werten, die im Array enthalten sind. Im Fall von keinen ausgewählten Werten erhalten wir eine leere Zeichenfolge oder NULL und wenden departmentFilter überhaupt nicht an (unter Verwendung des Vergleichs mit einer leeren Zeichenfolge / NULL und dem OR ).

Wir müssen auch den Parameter departmentFilter=${filterMatrix.department} zur Suchabfrage der Tabelle hinzufügen. Und wir können auch das Kontrollkästchen „Filtermatrix-Abfrage anwenden“ entfernen, wenn wir keine anderen Filter anwenden möchten.

Bitte beachten Sie, dass wir departmentFilter als Parameternamen verwenden, anstatt einfach nur department . Die Verwendung des letzteren würde zu einem Namenskonflikt mit der department führen. Wie wir zuvor gelernt haben, wendet der Webdienst automatisch Filter für Parameter an, für die er eine Spalte findet. Daher würde es zB die Daten für department = 'Development,Management' filtern, was niemals wahr ist und niemals Zeilen zurückgibt.