Filtrer globalement toutes les pages et widgets d'un document Grist

Il s’agit d’une solution pure Grist et sans widget.
Cela permet de travailler sur un périmètre donné sans avoir à refiltrer sur chaque page et widget.

L’exemple ci-dessous consiste à filtrer 3 tables (‹ EVENEMENTS ›, ‹ RISQUES ›, ‹ ACTIONS ›) sur un ou des projets facultativement sélectionnés dans la colonne ‹ Projet › de ces 3 tables. Cette colonne ‹ Projet › est une colonne de référence vers la TABLE.colonne : ‹ REF_PROJET.Nom ›.

Etape 1

Ajouter une colonne de données de type booléen (nommée ‹ Afficher ›) dans la table REF_PROJET.
Faire apparaitre cette table et colonne sur une page d’accueil du document facilement accessible dans le menu de gauche pour que l’utilisateur choisisse les filtres à appliquer.

Etape 2

Dans les données sources, sur chacune des 3 tables (‹ EVENEMENTS ›, ‹ RISQUES ›, ‹ ACTIONS ›), ajouter une colonne de formule de type booléen.

  • Nom colonne : ‹ Filtre global ›
  • Formule:
# Afficher si pas de projet associé 
retour = True 
# Sinon, l'affichage est choisi dans la table PROJET
if $Projet:
  # Code à appliquer si la colonne est une reference simple
  # retour = $Projet.Afficher
  # Code à appliquer si la colonne est une reference multiple
  retour = any(p.Afficher for p in $Projet)
return retour
  • Masquer cette colonne dans les widgets car elle ne présente aucun intérêt.

Etape 3

Pour chaque Widget, filtrer sur la colonne ‹ Filtre global › == True et décocher ‹ futures valeurs ›.
Ne pas épingler le filtre pour que le bouton reste invisible.

Limites

Le filtre étant basé sur des données en bases, il s’applique à tous les utilisateurs du Grist et est persistant.
Mais dans le cas où une seul personne utilise le Grist à un instant T, cela fait le boulot :slight_smile:
Si je n’ai pas de meilleur solution, je l’implémenterai sur le template Modèle de gestion de projet
Dans le cas d’un Grist avec accès concurrents, il faut laisser tous les projets en mode ‹ Afficher = True ›.

1 « J'aime »