Question : Quel paramètre pour faire la somme des différentes valeurs rassemblées dans une même colonne ?

Niveau : Scriptage (gabarit et exportation)

Commandes concernées : EXP-10

Réponse :

L’utilisation du paramètre sum indique que la valeur d’une colonne doit être déduite de la somme des différents sources indiquées.

Prenons comme exemple une fiche budgétaire disposant d’un champ de type Propriété indiquant le montant initial alloué appelé propriete_montantinitial. Cette fiche peut être liée à une ou plusieurs fiches de réévaluation (corpus_reevaluation) disposant d’un champ de type Propriété appelé propriete_montant qui indique des ajouts au montant budgétaire initial. On désire faire l’export tabulaire des fiches budgétaires et disposer d’une colonne qui récapitule le total du montant initial et des réévaluations. Cette opération est possible avec le paramètre sum comme indiqué ci-dessous :

recapitulatif > fr="Récapitulatif du budget"
propriete_montantinitial,corpus_reevaluation/propriete_montant
{code}
cast=money,sum

Exemple d’une colonne nommée recapitulatif faisant la somme des montants

Comme le montre l’exemple, le paramètre sum est utilisé en conjonction avec le paramètre cast car il faut bien sûr que la somme des données en question ait un sens (faire la somme de chaines de caractères n’a pas de sens. sum ne fonctionnent donc qu’avec les valeurs suivantes pour cast : integer, decimal, percentage ou money (à condition dans ce dernier cas que la devise soit la même). Il faut utiliser un formatage des données qui fonctionne avec cast (le mieux est d’utiliser {code}).

À noter que les paramètres de séparateur (sep, sep1_2, etc.) sont ignorés lorsque sum est présent, le séparateur est toujours le point-virgule.

sum peut être utilisé sans le paramètre cast mais il doit alors se voir attribuer une des valeurs integer, decimal, percentage ou money. Cette option est utile pour le débogage. En effet, s’il y a un problème de format dans une des valeurs (par exemple, si les devises sont différentes), un message d’erreur sera affiché à la place mais celui-ci est transformé par une valeur nulle par l’intervention de cast. En n’utilisant pas ce dernier, le message d’erreur devient visible.

recapitulatif > fr="Récapitulatif du budget"
propriete_montantinitial,corpus_reevaluation/propriete_montant
{code}
sum=money

Même résultat que précédent mais affiché sous forme d’une chaîne avec les éventuelles erreurs

Il est possible d’indiquer une valeur pour sum si cast est présent mais il y a des risques d’incohérence (sum=money et cast=decimal donnera une valeur nulle car cast va tenter de transformer une valeur monétaire en nombre décimal). Le seul cas qui peut se justifier est avec la valeur integer qui ne conserve la valeur entière d’une valeur décimale ; il en suit les deux comportements différents :

  • cast=integer,sum=decimal : les différentes valeurs décimales sont additionnées et on ne garde que la partie entière du résultat

  • cast=integer,sum : chaque valeur est réduite à sa partie entière et ces dernières sont additionnées.

Dans le premier cas, 145,65 sommé à 3,87 donnera 149 (145,65 + 3,87 = 149,52 soi 149) et dans le deuxième cela donnera 148 (145 + 3).

Ce paramètre ne doit pas être confondu avec le paramètre columnsum qui, lui, fait la somme totale d’une colonne.

Questions voisines