Filter Matrix Werte als Params

Normalerweise arbeiten die Filtermatrix und die verschiedenen Widgets recht nahtlos zusammen. Wenn wir das Kontrollkästchen "Filtermatrixabfrage anwenden" aktivieren, werden die Filter aus der Filtermatrix automatisch auf die Suchabfrage angewendet und somit die Daten aus der Datenabfrage entsprechend gefiltert.

Manchmal ist es jedoch von Vorteil (z.B. aus Leistungsgründen oder um sie an eine gespeicherte Prozedur zu übergeben), die ausgewählten Werte der Filtermatrix direkt in einer Datenabfrage zu verwenden.

Schauen wir uns zunächst an, wie der automatische Filter unter der Haube funktioniert.

Wir erhalten Mitarbeiterdaten aus einer Datenabfrage namens employees. Außerdem haben wir eine Filter Matrix, um die Tabelle auf department zu filtern. Wir verwenden die automatische Filter Matrix Suchfunktionalität, indem wir das Kontrollkästchen "Filter Matrix Abfrage anwenden" verwenden.

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

SELECT * from mitarbeiter

Sobald wir beginnen, Werte aus der Filtertabelle auszuwählen, fordert das Dashboard die Daten vom Webservice über eine select Anfrage an. Es wandelt die ausgewählten Werte aus der Filtermatrix in den URL-Parameter department department=IN(Development,Management) um. Dies bewirkt, dass der Webservice nur Zeilen mit der Abteilung "Entwicklung" oder "Management" zurückgibt.

Der Webservice wendet automatisch alle Parameter, für die er eine Spalte hat, als Filter an. Dies gilt auch für Parameter, die direkt in das Feld "Suchanfrage" eingegeben werden.

Da wir nun wissen, wie der automatische Filtermechanismus funktioniert, können wir damit beginnen, die Werte der Filtermatrix als Parameter der Datenabfrage zu verwenden. Zu diesem Zweck müssen wir die Datenabfrage ein wenig erweitern.

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

Wir definieren einen Datenabfrage-Parameter namens departmentFilter. Später werden wir die Auswahl aus der Filter Matrix übergeben, die dann in ein Array umgewandelt wird. Mit dem ANY Operator filtern wir nach Werten, die in dem Array enthalten sind. Falls keine Werte ausgewählt werden, erhalten wir eine leere Zeichenkette oder NULL und wenden departmentFilter überhaupt nicht an (mit dem Vergleich gegen eine leere Zeichenkette / NULL und dem OR).

Wir müssen auch den departmentFilter=${filterMatrix.department} Parameter in die Suchabfrage der Tabelle aufnehmen. Und wir könnten auch das Kontrollkästchen "Apply fiter matrix query" entfernen, wenn wir keine anderen Filter anwenden wollen.

Bitte beachten Sie, dass wir departmentFilter als Parameternamen verwenden und nicht einfach department. Die Verwendung des letzteren würde einen Namenskonflikt mit der Spalte department verursachen. Wie wir bereits gelernt haben, wendet der Webservice automatisch Filter für Parameter an, für die er eine Spalte findet. Daher würde er z.B. die Daten für department = 'Development,Management' filtern, was nie wahr ist und keine Zeilen zurückgibt.