Aller au contenu principal

Champs calculés

Un champ calculé produit une valeur à partir des autres champs : une marge, un montant pondéré, une année, un délai en jours, une catégorie. Il s'écrit dans un petit langage d'expressions que le serveur contrôle et traduit pour la base — jamais du SQL libre. Il appartient à l'analyse et s'enregistre avec elle.


Vue d'ensemble​

Nouveau champ calculéAnnulerEnregistrerNomweightedLibelléMontant pondéréInsérer un champChamp… ▾Insérer une fonctionFonction… ▾ExpressionSTAGE = 'Negotiation' ? AMOUNT · 0.6 : AMOUNT · 0.3Arithmétique (+ − × /), comparaisons, and / or / not, cond ? a : b, x in (…), x is empty.⚗ TesterUn num → une mesure. Échantillon :7200013500810036000Nomutilisé comme calc.<nom>Expressionjamais du SQL libreSélecteursinsèrent au curseurEnregistrer après un testle type décideTesttype et huit valeurs

L'éditeur​

Nouveau champ calculé, en bas du volet des champs, ouvre l'éditeur ; le crayon d'un champ calculé le modifie, la corbeille le supprime (il quitte alors aussi les étagères).

ChampUsage
NomUne lettre, puis lettres, chiffres ou _ ; unique dans l'analyse.
LibelléLe nom affiché dans le volet et les résultats.
Insérer un champ, Insérer une fonctionInsèrent au curseur ; une fonction s'insère avec ses arguments sélectionnés.
ExpressionLa formule.
TesterCompile l'expression sur le serveur et affiche son type et huit valeurs d'exemple.

Enregistrer n'est disponible qu'après un test réussi. Le type du résultat fixe le rôle du champ : un nombre devient une mesure, tout autre type une dimension. Le champ rejoint alors un groupe calc du volet et s'utilise dans les lignes, les mesures et les filtres comme tout autre champ.


Le langage​

Un champ s'écrit par son nom pour l'entité analysée (AMOUNT), ou entité.NOM pour une autre entité (customers.COUNTRY). Les textes s'écrivent entre apostrophes.

ÉlémentFormes
Arithmétique+ - * / et parenthèses. Une division par zéro donne une valeur vide.
Comparaison= != <> < <= > >=
Logiqueand, or, not
Conditioncondition ? valeur_si_vrai : valeur_si_faux
Listex in ('FR', 'BE')
Videx is empty, x is not empty
Datesyear(d), month(d), day(d), days(début, fin) — le nombre de jours entre deux dates
Nombresround(x, n), abs(x)
Texteupper(s), lower(s), length(s), concat(a, b, …)
Tout typecoalesce(a, b, …) — la première valeur non vide

Un résultat oui/non s'affiche Y / N. Une date julienne de JD Edwards EnterpriseOne est convertie en vraie date avant l'application d'une fonction de date.


Exemples​

BesoinExpressionRôle
Pipeline pondéréSTAGE = 'Negotiation' ? AMOUNT * 0.6 : AMOUNT * 0.3mesure
Prix unitaireAMOUNT / QTYmesure
Année de clôtureyear(CLOSE_DATE)mesure — un nombre ; pour regrouper par année, la granularité Année de la date dans Lignes convient mieux
Délai de clôturedays(CREATED_ON, CLOSE_DATE)mesure
Tranche de montantAMOUNT >= 100000 ? 'large' : 'standard'dimension
Client national ou noncustomers.COUNTRY = 'FR'dimension (Y / N)

Points d'attention​

SituationEffet
Types incompatibles (AMOUNT + 'x').Le test échoue et indique la position de l'erreur.
Un champ inconnu.Le test échoue et le nomme.
Les deux branches de ? : n'ont pas le même type.Le test échoue : deux nombres, deux textes ou deux dates.
Une expression de plus de 2 000 caractères.Refusée.

Pour aller plus loin​