Maîtriser les références et les lookups dans Grist

Les relations entre tables sont au cœur de ce qui rend Grist puissant pour organiser des données complexes. Si vous gérez une petite entreprise, un projet associatif ou des tâches administratives, vous avez probablement besoin de lier des informations dispersées : par exemple, associer des employés à des départements, des clients à des projets, ou des étudiants à des cours. Sans cela, vos données restent isolées, et il devient difficile de tirer des insights ou d'automatiser des calculs.

Dans cet article, nous explorons les références de colonnes et les lookups. Ces outils transforment Grist en une base de données relationnelle accessible, même si vous n'êtes pas développeur. Nous partons des bases pour arriver à des exemples pratiques. Tout est basé sur la documentation officielle de Grist, pour que vous puissiez appliquer ces concepts directement dans votre document.

Les types de relations : un aperçu simple

Avant de plonger dans les outils, comprenez les relations de base. Elles décrivent comment vos enregistrements (lignes dans une table) se connectent.

  • Un-à-un : Une relation exclusive, comme un employé et son contrat unique. Chaque enregistrement n'a qu'un seul partenaire.
  • Un-à-plusieurs : Un enregistrement lié à plusieurs autres, comme un département et ses employés. Le département peut en avoir plusieurs, mais chaque employé n'en a qu'un.
  • Plusieurs-à-un : L'inverse du précédent, comme des employés et leur département unique.
  • Plusieurs-à-plusieurs : Plus flexible, comme des étudiants inscrits à plusieurs cours, et des cours avec plusieurs étudiants.

Grist gère ces relations via des colonnes de type "Reference" (pour un seul lien) ou "Reference List" (pour plusieurs). C'est comme une clé étrangère en base de données, mais plus simple qu'un VLOOKUP dans Excel.

Créer une référence de colonne : le premier lien

Supposons un document avec deux tables : Clients (noms, contacts, dates de signature) et Projets (détails des projets). Dans Projets, vous voulez lier chaque projet à un client.

  1. Ouvrez le panneau créateur (à droite de l'écran).
  2. Sélectionnez la colonne Client dans Projets.
  3. Changez le type en "Reference".
  4. Choisissez "Data from Table" : Clients.
  5. Sélectionnez "Show Column" : par exemple, Nom pour afficher le nom du client.
  6. Cliquez sur "Apply".

Des icônes de lien apparaissent dans les cellules. Double-cliquez sur une cellule pour voir une liste déroulante des clients disponibles. Tapez pour filtrer, ou ajoutez un nouveau client en sélectionnant le "+" – Grist crée automatiquement l'enregistrement dans Clients.

La référence pointe vers l'enregistrement entier, pas juste le nom affiché. L'ID unique de l'enregistrement est stocké en interne (comme Staff[2] pour le deuxième employé). Pour le voir, ajoutez une colonne avec la formule =$id dans la table référencée.

Si vous importez des données existantes (texte brut), convertissez la colonne en Reference : Grist matchera les valeurs et marquera les invalides en rouge. Ajoutez-les manuellement ou corrigez-les.

Références bidirectionnelles : synchroniser les deux côtés

Par défaut, les références sont unidirectionnelles : seul Projets voit les clients. Pour une vue réciproque, activez les deux voies.

Dans le panneau créateur de la colonne Client :

  • Allez dans l'onglet "Column".
  • Cliquez sur "Add two-way reference".

Cela crée une colonne Projets dans Clients, de type Reference List (car un client peut avoir plusieurs projets). Les changements se synchronisent : assigner un projet à un client met à jour les deux tables.

Exemple : Si "Projet Newsletter" est lié à "Prime Builders", essayez de le relier à "ABC Construction". Une alerte apparaît – cochez pour confirmer le transfert.

Pour supprimer : Sélectionnez la colonne à garder, cliquez sur la corbeille près de "Two-Way Reference". Notez : pas compatible avec les colonnes de formule.

Inclure plusieurs champs d'une référence

Une fois liée, récupérez d'autres données du client sans effort. Dans Projets, ajoutez une colonne pour le contact :

  • Cliquez sur "+" à droite de la table.
  • Sous "Lookups", sélectionnez Clients > Contact.

Ou, dans le panneau de Client, cliquez "Add Referenced Columns" > Contact.

La nouvelle colonne affiche =$Client.Contact. Utilisez n'importe quel champ via la notation point : $NomReference.Champ.

C'est plus propre que des formules manuelles. Si les noms de colonnes et tables se ressemblent (comme Clients et Client), rappelez-vous : la formule utilise le nom de la colonne de référence (Client), pas de la table.

Utiliser les références dans les formules : la notation point

Les formules rendent les références vivantes. La syntaxe est $Reference.Champ.

Dans l'exemple des inscriptions de classes :

  • Table Enrollments référence Classes via Class.
  • Pour afficher les horaires : =$Class.Times.

Si Class référence un instructeur (qui référence Staff), chaînez : =$Class.Instructor.Phone pour le téléphone de l'instructeur.

Si une formule retourne un ID (comme =$Class.Instructor), changez le type de colonne en Reference pour afficher un nom lisible (sélectionnez "Show Column" : Full Name).

Lookups : trouver des données sans référence explicite

Parfois, pas de lien direct – utilisez lookupOne ou lookupRecords.

lookupOne : pour un seul enregistrement

Comme VLOOKUP, mais plus robuste. Syntaxe :

TableCible.lookupOne(ChampCible = $ChampLocal)

Exemple : Tables Sponsors et All Registrations partagent des emails. Dans All Registrations, trouvez le sponsor :

Sponsors.lookupOne(Contact_Email = $Registration_Email)

Retourne Sponsors[ID]. Si rien, Sponsors[0].

Puis, extrayez un champ : .Sponsor_Level.

Pour plusieurs matches, ajoutez order_by :

Students.lookupOne(Family = $id, order_by = "Birthday")

Trouve l'étudiant le plus âgé d'une famille.

Préférez les références pour des liens permanents ; lookupOne pour des imports ponctuels.

lookupRecords : pour plusieurs enregistrements

Pour une liste. Syntaxe :

TableCible.lookupRecords(ChampCible = $ChampLocal)

Exemple : Dans Events, listez les inscriptions :

All_Registrations.lookupRecords(Event = $id)

Changez en Reference List pour afficher les noms.

Avec point : .Event pour les événements liés.

Lookups inverses

Utilisez $id pour le sens inverse. Dans Events :

All_Registrations.lookupRecords(Event = $id)

Trouve toutes les inscriptions pour cet événement.

Travailler avec des ensembles d'enregistrements

Les Reference Lists ou lookupRecords retournent des listes. Agrégez-les.

  • Somme : SUM($ReferenceList.Champ) ou SUM(Table.lookupRecords(...).Champ).
    Exemple : Total des soldes d'inscrits : SUM($Registrants.Balance).
  • Longueur : len($ReferenceList) ou len(Table.lookupRecords(...)).
    Exemple : Nombre d'événements par sponsor : len(All_Registrations.lookupRecords(Sponsor = $id)).
  • Conditions multiples : Enrollments.lookupRecords(Class = $id, Status = "Confirmed").
    Compte les inscriptions confirmées.

Autres : AVERAGE, MIN, MAX. Pour des boucles : SUM(person.Balance for person in $Registrants) – style Python pour itérer.

Filtrer les choix dans les dropdowns

Pour des listes longues, filtrez. Exemple : Tables Countries, Cities, Stadiums. Stadium City référence Cities, filtré par Stadium Country.

Dans le panneau de Stadium City :

  • Cliquez "Set dropdown condition".
  • Formule : choice.Country == $Stadium_Country.

choice est l'option en cours. Cela limite la dropdown aux villes du pays sélectionné.

Exemples pratiques pour débutants

Cas associatif : Gestion d'un programme parascolaire

Utilisez le template "Afterschool Program". Table Staff pour employés, Classes avec référence Instructor vers Staff.

  • Ajoutez two-way : Voyez les classes par employé.
  • Formule : =$Instructor.Phone pour contacts rapides.
  • Lookup : Students.lookupRecords(Class = $id) pour liste d'élèves par classe.
  • Agrégation : len(Enrollments.lookupRecords(Class = $id)) pour compter les inscriptions.

Adaptez pour tracker présences ou budgets.

Cas SMB : Suivi clients et projets

Table Clients, Projects avec Client référence.

  • Ajoutez Contact : =$Client.Contact.
  • Reference List pour projets multi-clients.
  • Reverse lookup : Dans Clients, Projects.lookupRecords(Client = $id) pour liste de projets.
  • Somme : SUM(Projects.lookupRecords(Client = $id).Budget) pour CA par client.

Pour admins : Liez employés à tâches, avec lookupOne pour assignations dynamiques.

Cas étudiant : Tracker habitudes

Template "Habit Tracker". Habits + Goals avec Reference List Habits Completed.

  • =$Habits_Completed.Date pour dates.
  • len($Habits_Completed) pour progrès hebdo.

Meilleures pratiques

  • Utilisez des références pour liens stables ; lookups pour flexibilité.
  • Nommez colonnes clairement pour éviter confusions (e.g., Client_Ref).
  • Testez avec petits datasets : Ajoutez two-way tôt pour visualiser.
  • Pour performances : Évitez chaînes trop longues ; agrégez au besoin.
  • Erreurs courantes : Vérifiez types (Reference vs List), et gérez les invalides en ajoutant via +.

Conclusion

Les références et lookups transforment Grist en outil relationnel intuitif. Commencez par une référence simple dans votre document, puis ajoutez des formules. Pour un client-projet basique, cela suffit ; pour du multi-liens, passez aux lists et lookups. Explorez les templates officiels pour tester. Si bloqué, le panneau créateur guide étape par étape.

(Mots : 1487)