Relations, agrégations et formules
Reliez les lignes de deux bases, calculez sur les lignes liées et obtenez des valeurs par formule : syntaxe, fonctions et exemples prêts à l'emploi.
Sur cette page
Sections de la documentation
Trois types de colonnes vont plus loin que ce que vous tapez dans une cellule :
- une Relation relie les lignes d'une base à celles d'une autre, par exemple chaque facture à son client ;
- un Agrégat calcule quelque chose sur les lignes liées, par exemple le total facturé à un client ;
- une Formule calcule une valeur à partir des autres colonnes de la même ligne, par exemple le nombre de jours avant une échéance.
Les agrégats et les formules ne sont jamais enregistrés. Filarr les recalcule chaque fois qu'il affiche la table, ils sont donc toujours à jour. Vous ne pouvez pas écrire dedans.
Pour ajouter l'une de ces colonnes, voir Les bases de données dans vos notes : ajoutez une colonne, choisissez son type, puis ouvrez Modifier la propriété depuis le menu de la colonne pour la régler.
Les relations
Imaginons une base Clients et une base Factures, chacune dans une note.
- Dans Factures, ajoutez une colonne de type Relation.
- Dans Modifier la propriété, laissez Sens sur Vers une base… et choisissez la Base liée : Clients. La liste montre chaque base avec le titre de sa note. Elle propose aussi la base en cours, marquée Cette base, pour relier des lignes d'une même table.
- Cliquez sur une cellule de la nouvelle colonne. Lier des lignes ouvre une recherche dans Clients. Choisissez une ou plusieurs lignes.
Les lignes liées s'affichent en petites étiquettes, avec la première colonne Texte de l'autre base. Cliquez sur l'une d'elles pour ouvrir la note qui contient cette base.
Deux options aident :
- Un seul lien à la fois : la prochaine ligne choisie remplace celle en place au lieu de s'y ajouter. C'est le bon réglage pour « un client par facture ».
- Créer « … », en bas de la recherche, ajoute la ligne à l'autre base quand elle n'existe pas encore. Cela ne marche pas quand cette base est dans la note ouverte : ajoutez alors la ligne dans sa propre table.
Voir l'autre côté
Une relation va dans un seul sens : la facture connaît son client, mais le client ne liste pas ses factures. Pour les afficher :
- dans les réglages de la relation, cliquez sur Ajouter la colonne de rétroliens dans « Clients » ;
- ou, dans Clients, ajoutez une colonne Relation, réglez Sens sur Rétroliens (calculés), puis choisissez dans Rétroliens depuis la relation qui pointe vers elle.
La colonne de rétroliens se calcule depuis l'autre base. Rien n'est stocké en double, elle ne se modifie pas, et la supprimer ne fait rien perdre.
Si l'autre base n'est pas lisible (sa note a été supprimée, ou elle n'est pas dans ce coffre), la cellule affiche Base indisponible et les liens sont conservés tels quels. Les liens vers des lignes qui n'existent plus s'affichent en « 1 introuvable » : ouvrez la cellule pour les retirer.
Les agrégats
Un agrégat suit une relation et calcule sur les lignes qu'elle relie.
- Vérifiez que la base a une colonne Relation.
- Ajoutez une colonne de type Agrégat.
- Dans Modifier la propriété, choisissez Par la relation, puis ce qu'il faut Calculer, puis la Propriété à calculer dans l'autre base. Nombre n'a pas besoin de propriété.
| Calculer | Résultat |
|---|---|
| Nombre | Le nombre de lignes liées |
| Somme, Moyenne, Minimum, Maximum | D'une colonne nombre des lignes liées |
| Cochées | Le nombre de lignes liées dont la case est cochée |
| Pourcentage coché | La part des lignes liées dont la case est cochée |
| Non vides | Le nombre de lignes liées où la propriété a une valeur |
| Liste des valeurs | Les valeurs elles-mêmes, à la suite |
Exemple : la part des tâches faites dans chaque projet. Une base Projets a une colonne Relation Tâches qui vise une base Tâches, dotée d'une colonne Case à cocher Faite. Dans Projets, ajoutez un agrégat : Par la relation Tâches, Calculer Pourcentage coché, Propriété Faite. Chaque projet affiche alors la part de ses tâches terminées. Un projet sans tâche liée reste vide plutôt que d'afficher 0 %.
Les formules
- Ajoutez une colonne de type Formule.
- Ouvrez Modifier la propriété et écrivez la formule dans le champ Formule.
Filarr vérifie la formule pendant la frappe. Une erreur s'affiche juste sous le champ, par exemple Colonne inconnue : Prix. Quand tout va bien, le champ rappelle les principales fonctions.
Dans la liste de lectures ci-dessous, une colonne Formule traduit le statut de chaque livre en un mot : if(prop("Status") == "Done", "Finished", if(prop("Status") == "In progress", "Reading", "Next up")).
Écrire une formule
- Désignez une colonne par
prop("Nom de la colonne"). Majuscules et minuscules sont indifférentes. Un nom d'un seul mot, sans espace, marche aussi seul :Prix * Quantité. - Mettez le texte entre guillemets droits :
"En retard". - Écrivez les décimales avec un point :
1.2. - Une colonne Sélection donne le nom de son option, vous pouvez donc écrire
prop("Statut") == "Fait". Une Sélection multiple donne ses options séparées par des virgules, une Case à cocher donne vrai ou faux, une Date donne le jour sous la forme2026-09-30, et une Relation donne le nombre de lignes liées. true(vrai),false(faux) etempty(vide) sont aussi des valeurs utilisables.
Les opérateurs :
+,-,*,/pour calculer, et%pour le reste d'une division.+met du texte bout à bout dès qu'un des côtés est du texte :prop("Prénom") + " " + prop("Nom");==(ou=) et!=pour comparer deux valeurs,<,<=,>,>=pour comparer des nombres ;&&pour et,||pour ou,!pour non.
Les fonctions gardent leur nom anglais :
| Fonction | Ce qu'elle donne |
|---|---|
if(test, a, b) | a si le test est vrai, sinon b (ou rien, sans b) |
and(a, b, …), or(a, b, …), not(a) | Combinent ou inversent vrai et faux |
isEmpty(x) | Vrai si x est vide |
round(x), round(x, 2) | Arrondit, ici à 2 décimales |
floor(x), ceil(x), abs(x), sqrt(x) | Arrondi inférieur, arrondi supérieur, sans le signe, racine carrée |
min(a, b, …), max(a, b, …) | Le plus petit ou le plus grand nombre |
number(x), text(x) | Fait d'un texte un nombre, ou de n'importe quoi un texte |
concat(a, b, …) | Met des textes bout à bout |
join(", ", a, b, …) | Met des textes bout à bout avec un séparateur, donné en premier |
length(x), upper(x), lower(x), trim(x) | Longueur d'un texte, majuscules, minuscules, sans espaces aux extrémités |
contains(x, "mot") | Vrai si le texte contient le mot |
today(), now() | La date du jour. Les deux donnent le jour seul, sans l'heure. |
dateDiff(a, b) | Le nombre de jours de la date b à la date a |
Un nombre s'affiche au format de votre langue. Vrai s'affiche par une coche, faux par un tiret.
Quand une formule affiche une erreur
La cellule affiche alors la raison au lieu d'une valeur :
- Colonne inconnue : un nom est mal écrit, ou la colonne a été renommée ;
- Pas un nombre : un calcul porte sur du texte, ou sur une cellule vide ;
- Pas une date :
dateDiffa reçu une date vide ou invalide ; - Division par zéro ;
- Formule circulaire : deux formules s'utilisent l'une l'autre ;
- Parenthèse fermante manquante, Fonction inconnue : une faute de frappe.
Cinq formules à reprendre
Remplacez les noms de colonnes entre guillemets par les vôtres.
Les jours restants avant une échéance. Avec une colonne Date « Échéance », cette formule affiche 3 quand l'échéance est dans trois jours, 0 le jour même, et un nombre négatif une fois la date passée :
dateDiff(prop("Échéance"), today())
Une ligne sans date affiche Pas une date. Pour la laisser vide à la place :
if(isEmpty(prop("Échéance")), "", dateDiff(prop("Échéance"), today()))
Un statut qui se met à jour tout seul. Avec la colonne Statut d'une base neuve et une colonne Date « Échéance » :
if(prop("Statut") == "Fait", "Fait", if(isEmpty(prop("Échéance")), "Sans date", if(dateDiff(prop("Échéance"), today()) < 0, "En retard", "Dans les temps")))
Le total TTC d'une ligne de devis. Avec les colonnes Nombre « Quantité », « Prix unitaire » et « TVA % » :
round(prop("Quantité") * prop("Prix unitaire") * (1 + prop("TVA %") / 100), 2)
L'avancement d'une liste de contrôle. Avec trois colonnes Case à cocher « Brief », « Maquette » et « Réalisation » pour chaque projet, cette formule affiche 67 % quand deux cases sur trois sont cochées. if fait de chaque case un 1 ou un 0, même une case jamais cliquée :
round((if(prop("Brief"), 1, 0) + if(prop("Maquette"), 1, 0) + if(prop("Réalisation"), 1, 0)) / 3 * 100) + " %"
Pour compter des tâches rangées dans une autre base, servez-vous plutôt de l'agrégat Pourcentage coché décrit plus haut.
Les factures impayées depuis plus de 30 jours. Avec une Case à cocher « Payée » et une Date « Date de facture », la cellule affiche une coche sur les factures à relancer :
and(not(prop("Payée")), dateDiff(today(), prop("Date de facture")) > 30)
Une facture sans date affiche Pas une date : renseignez sa date.