Filtrer les valeurs de la matrice en tant que paramètres
En général, la matrice de filtrage et les différents widgets fonctionnent ensemble de manière assez transparente. Si nous activons la case à cocher "Appliquer la matrice de filtrage à la requête", les filtres de la matrice de filtrage sont automatiquement appliqués à la requête de recherche et les données de la requête de données sont donc filtrées en conséquence.
Mais il est parfois utile (par exemple, pour des raisons de performance ou pour passer à une procédure stockée) d'utiliser les valeurs de la matrice de filtrage sélectionnées dans une requête de données directement.
Voyons d'abord comment le filtre automatique fonctionne sous le capot.
Nous obtenons des données sur les employés à partir d'une requête de données appelée employees
. En outre, nous disposons d'une matrice de filtrage pour filtrer la table sur department
. Nous utilisons la fonctionnalité de recherche automatique de la matrice de filtrage à l'aide de la case à cocher "Appliquer la requête de la matrice de filtrage".
La requête de données elle-même est une sélection très simple sur la table mitarbeiter
.
SELECT * from mitarbeiter
Dès que nous commençons à sélectionner des valeurs dans la table de filtrage, le tableau de bord demande les données au service web à l'aide d'une requête select
. Il transforme les valeurs sélectionnées dans la matrice de filtrage en paramètre de l'URL department
department=IN(Development,Management)
. Ainsi, le service web ne renvoie que les lignes dont le département est "Développement" ou "Gestion".
Le webservice applique automatiquement tous les paramètres pour lesquels il dispose d'une colonne en tant que filtre. Cela s'applique également aux paramètres ajoutés directement au champ "Search query".
Puisque nous savons maintenant comment fonctionne le mécanisme de filtrage automatique, nous pouvons commencer à utiliser les valeurs de la matrice de filtrage en tant que paramètre de la requête de données. Pour ce faire, nous devons étendre un peu la requête de données.
SELECT * FROM mitarbeiter WHERE ${departmentFilter} = '' OR ${departmentFilter}::text IS NULL OR department = ANY (string_to_array(${departmentFilter}, ','))
Nous définissons un paramètre de requête de données appelé departmentFilter
. Plus tard, nous allons passer la sélection de la matrice de filtrage qui est alors transformée en un tableau. À l'aide de l'opérateur ANY
, nous filtrons les valeurs contenues dans le tableau. Si aucune valeur n'est sélectionnée, nous obtenons une chaîne vide ou NULL et n'appliquons pas du tout departmentFilter
(en utilisant la comparaison avec une chaîne vide / NULL et OR
).
Nous devons également ajouter le paramètre departmentFilter=${filterMatrix.department}
à la requête de recherche de la Table. Nous pouvons également supprimer la case à cocher "Apply fiter matrix query" si nous ne voulons pas appliquer d'autres filtres.
Veuillez noter que nous utilisons departmentFilter
comme nom de paramètre au lieu de department
. L'utilisation de ce dernier nom entraînerait un conflit de nom avec la colonne department
. Comme nous l'avons appris précédemment, le webservice applique automatiquement des filtres pour les paramètres pour lesquels il trouve une colonne. Ainsi, il filtrerait par exemple les données pour department = 'Development,Management'
, qui n'est jamais vrai et ne renvoie jamais aucune ligne.