Valori della Matrice Filtro come parametri

Di solito la matrice filtro e i vari widget lavorano insieme senza problemi. Se si attiva la casella di controllo "Applica matrice filtro", i filtri della matrice filtro vengono applicati automaticamente alla query di ricerca e quindi i dati della query di dati vengono filtrati di conseguenza.

A volte, però, è utile (ad esempio per motivi di prestazioni o per passarli a una stored procedure) utilizzare direttamente i valori della matrice filtro selezionati in una query di dati.

Per prima cosa, vediamo come funziona il filtro automatico sotto il cofano.

Otteniamo i dati dei dipendenti da una query di dati chiamata employees. Inoltre, abbiamo una matrice filtro per filtrare la tabella su department. Utilizziamo la funzionalità di ricerca automatica della matrice filtro utilizzando la casella di controllo "Applica matrice filtro".

La query di dati in sé è una semplice selezione della tabella mitarbeiter.

SELECT * from mitarbeiter

Non appena iniziamo a selezionare i valori dalla tabella dei filtri, il dashboard richiede i dati dal servizio web tramite una richiesta select. Trasforma i valori selezionati dalla matrice Filtro nel parametro URL department department=IN(Development,Management) . Questo fa sì che il webservice restituisca solo le righe con il reparto "Sviluppo" o "Gestione".

Il webservice applica automaticamente tutti i parametri per i quali ha una colonna come filtro. Questo vale anche per i parametri aggiunti direttamente al campo "Cerca query".

Poiché ora sappiamo come funziona il meccanismo di filtro automatico, possiamo iniziare a usare i valori della matrice Filtro come parametri della query di dati. Per farlo, dobbiamo estendere un po' la query di dati.

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

Definiamo un parametro della query di dati chiamato departmentFilter. In seguito, passeremo la selezione dalla matrice filtro che verrà trasformata in un array. Con l'operatore ANY filtriamo i valori contenuti nell'array. Se non ci sono valori selezionati, otteniamo una stringa vuota o NULL e non applichiamo affatto departmentFilter (utilizzando il confronto con una stringa vuota / NULL e OR).

Dobbiamo anche aggiungere il parametro departmentFilter=${filterMatrix.department} alla query di ricerca della tabella. Si potrebbe anche rimuovere la casella di controllo "Applica Matrice Filtro" se non si vogliono applicare altri filtri.

Si noti che il nome del parametro è departmentFilter e non semplicemente department. L'uso di quest'ultimo nome provocherebbe uno scontro con la colonna department. Come abbiamo appreso in precedenza, il webservice applica automaticamente i filtri per i parametri per i quali trova una colonna. Quindi, ad esempio, filtrerebbe i dati per department = 'Development,Management' che non è mai vero e non restituisce alcuna riga.