Formules
Une colonne de formule calcule une valeur pour chaque ligne à partir des champs de cette ligne et des lignes qui l'entourent. Ajoutez-en une avec Formule… dans Ajouter une colonne, et modifiez-la ensuite avec Modifier la formule… dans le menu de son en-tête.
Dans cette page
La boîte de dialogue de formule
| Champ | Ce qu'il contient |
|---|---|
| Nom de la colonne | Le nom affiché dans l'en-tête, par exemple « Points restants ». |
| Formule | L'expression. Les problèmes s'affichent pendant la saisie et désignent le caractère où ils se trouvent. |
| Champs pour les noms de la formule | Le champ Jira que lit chaque nom. Un nom qui correspond à l'identifiant ou au nom d'un champ est rempli automatiquement : story_points trouve Story Points. Pour les autres noms, vous choisissez le champ dans une liste. |
| Afficher les valeurs comme | Automatique, Nombre, Pourcentage (0 à 1 affiché en %), Durée (secondes affichées comme 1d 2h), Date, Texte ou Balisage (*bold*, _italic_ et liens [label|https://…]). |
L'application vérifie à nouveau la formule à l'enregistrement. Elle refuse une formule impossible à analyser, qui appelle une fonction inconnue ou qui utilise un nom sans champ associé.
Le langage
Une formule est une expression. Les noms et les fonctions ne sont pas sensibles à la casse.
story_points * 2
IF(status = "Done", 1, 0)
summary.lower().left(10)
- Des nombres, du texte entre guillemets doubles ou simples (avec
\comme caractère d'échappement),trueetfalse, et des listes entre crochets. - L'arithmétique avec
+ - * /, et les comparaisons avec= != < <= > >=. AND,ORetNOT.- Des commentaires avec
//jusqu'à la fin de la ligne, ou entre/*et*/. - Des appels enchaînés :
summary.lower()équivaut àlower(summary).
Noms et fonctions locaux
WITH donne un nom à une valeur pour le reste de la formule. Il permet aussi de définir votre propre fonction :
WITH rest = timeestimate : IF(rest > 0, timespent / (timespent + rest), undefined)
WITH half(x) = x / 2 : half(SUM{story_points})
Valeurs manquantes et erreurs
Une valeur manquante rend le résultat d'un calcul manquant : une somme qui contient un champ vide reste vide. Utilisez IF_DEFINED ou DEFAULT pour fournir une valeur. Une erreur, comme une division par zéro ou un argument incorrect, se propage à travers tout, sauf IF_ERROR.
Noms disponibles
key et depth proviennent de la ligne (le premier niveau a la profondeur 1). Les noms suivants lisent les champs du ticket sans aucune configuration : summary, status, status_category (To Do, In Progress ou Done, toujours en anglais), type ou issuetype, assignee, reporter, priority, resolution, created, updated, duedate, resolutiondate, timespent, timeestimate, timeoriginalestimate, labels, components, fixversions et project. Les champs de temps sont exprimés en secondes. Tout autre nom se relie à un champ dans la boîte de dialogue.
Les champs d'utilisateur contiennent des utilisateurs, qui s'affichent et se comparent par leur nom. Deux utilisateurs sont la même personne quand leurs identifiants de compte sont identiques. me() désigne la personne qui consulte la page.
Lire d'autres lignes
Les agrégations lisent les valeurs d'autres lignes. Écrivez la fonction, puis les options éventuelles après #, puis l'expression entre accolades :
SUM{story_points}
SUM#leaves{story_points}
JOIN#separator=" / "{key}
PERCENTILE#p=0.9{story_points}
SUM#preceding{story_points} + story_points
Les fonctions sont SUM, AVG, MIN, MAX, COUNT, JOIN, MEDIAN, UMIN, UMAX, PERCENTILE et QUARTILE.
Par défaut, une agrégation lit toutes les lignes situées en dessous. Ces options changent les lignes lues et la façon de les lire :
| Option | Effet |
|---|---|
#subtree |
La ligne elle-même et toutes les lignes situées sous elle. |
#children |
Seulement les lignes situées directement en dessous. |
#leaves |
Seulement les lignes au bas du sous-arbre. |
#ancestors |
Les lignes situées au-dessus. |
#preceding |
Les frères et sœurs qui précèdent la ligne, pour les totaux cumulés. |
#level=2..3 |
Seulement les lignes de ces niveaux. Le premier niveau est 1. |
#depth=1..2 |
Seulement les lignes situées à ce nombre de niveaux sous la ligne. Ses enfants sont à 1. |
#distinct |
Chaque ticket une seule fois, quel que soit le nombre de lignes qui l'affichent. |
#separator="…" |
Le séparateur pour JOIN. Par défaut, une virgule. |
#ordering=asc ou desc |
Trie d'abord les valeurs. JOIN les liste dans cet ordre. |
#compact |
Écarte le texte vide en plus des valeurs manquantes. |
#strict |
Le résultat est manquant dès qu'une valeur manque. |
#p=0.9 |
Le centile voulu, de 0 à 1. Par défaut, 0,5. |
#q=1 |
Le quartile voulu, de 0 à 4. Par défaut, 2. |
Un total qui attend encore des tickets situés en dessous est marqué comme incomplet jusqu'à leur chargement.
Requêtes dans les formules
JQL{status = Done} est vrai quand le ticket de la ligne répond à la requête JQL, Jira répondant en votre nom. TQL{leaves} est vrai quand la ligne répond à la requête d'arbre. Placez la requête telle quelle entre les accolades. Une ligne affiche « … » jusqu'à l'arrivée de sa réponse, et une requête que Jira refuse affiche la raison donnée par Jira.
IF(JQL{status = Done}, 1, 0)
COUNT{TQL{leaves}}
Fonctions
| Groupe | Fonctions |
|---|---|
| Arithmétique | abs ceiling floor round sign sqrt pow exp ln log log10 mod |
| Logique | if case choose and or not if_defined if_error is_error default |
| Texte | concat left right mid substring len lower upper trim replace replace_at repeat search match split join index_of last_index_of string number |
| Listes | array map filter reduce sort sort_by reverse unique flatten merge_arrays subarray first last size contains contains_any contains_all is_empty sequence |
| Statistiques | sum avg average min max umin umax median percentile quartile stdev stdevp count |
| Dates et heures | now today date datetime make_date make_datetime date_add date_subtract date_set datetime_add datetime_subtract days_between hours_between months_between years_between weekday weeknum day month year hour minute second start_of_month end_of_month truncate_time truncate_to_day truncate_to_hour truncate_to_minute truncate_to_week truncate_to_month truncate_to_year format_datetime parse_datetime |
| Jours ouvrés | workdays_between add_workdays is_workday |
| Durées | duration format_duration calendar_seconds calendar_minutes calendar_hours calendar_days calendar_weeks jira_minutes jira_hours jira_days jira_weeks |
| Utilisateurs | me user_display_name user_email user_name user_is_active |
| Autres | url_encode url_decode historical_value hierarchy_icon_url |
Précisions sur certaines d'entre elles :
map(list, $ * 2)etfilter(list, $ > 3)utilisent$pour désigner chaque élément.reduce(list, 0, $acc + $)dispose en plus de$acc, la valeur accumulée jusque-là.sort_by(labels, len($), "desc")trie selon une clé calculée pour chaque élément et conserve l'ordre des éléments égaux.sequence(1, 10)crée une liste de nombres, avec un pas facultatif. La liste peut contenir jusqu'à 10 000 nombres.historical_value(status, "2026-10-01")donne la valeur qu'avait un champ à un moment donné, lue dans l'historique du ticket. Si le champ n'a pas changé depuis, vous obtenez la valeur actuelle. Pour un moment antérieur à la création du ticket, vous obtenez une valeur vide.hierarchy_icon_url("issuetype")donne l'adresse de l'icône du type de ticket de la ligne."priority"et"assignee"donnent l'icône de la priorité et la photo du responsable.user_emailne renvoie une adresse que si Jira vous la montre.user_namerenvoie l'identifiant du compte, car Jira Cloud n'a pas de noms d'utilisateur.- Les fonctions de jours ouvrés et les durées
jira_suivent le calendrier de travail du site : les jours chômés sont sautés, et un jour ou une semaine dure ce que le calendrier indique (8 heures et 5 jours, sauf si un administrateur l'a modifié). Les duréescalendar_utilisent le temps réel de l'horloge.
Exemples
| Objectif | Formule |
|---|---|
| Points de story restants sous une ligne | SUM{IF(status_category != "Done", story_points, 0)} |
| Part des feuilles terminées | COUNT#leaves{IF(status_category = "Done", 1, undefined)} / COUNT#leaves{1} |
| Jours restants avant la date d'échéance | days_between(today(), duedate) |
| Clés des enfants | JOIN#children#separator=", "{key} |
| Total cumulé des estimations | SUM#preceding{timeoriginalestimate} + timeoriginalestimate |
Performances
Votre navigateur calcule les formules sur les lignes de la vue, à partir des données de tickets que la grille a déjà. À partir de 2 000 lignes, le calcul se fait en arrière-plan pour que le défilement et la saisie restent fluides. Une formule très lourde s'arrête sur une valeur d'erreur plutôt que de figer la page.
Dans les exportations, les valeurs des formules gardent leur type : dans un tableur, les nombres, pourcentages, durées et dates restent des nombres et des dates.
Des questions sur l’application? Écrivez à info@plugincraft.ca.