- Calculs commerciaux et financiers
- Construire une chaîne de calculs métier
- Classification et indicateurs métier
- Stocks et logistique
- Dates, échéances et périodes
- Qualité et contrôle des données
- Production, qualité et performance
- Ressources humaines et capacité
- Manipulation et présentation de texte
- Un peu de HTML métier
Calculs commerciaux et financiers #
Calculer le montant brut d’une ligne #
Champs :
Quantite
PrixUnitaire
Formule :
Field("Quantite") * Field("PrixUnitaire")
Exemple :
Quantite = 12
PrixUnitaire = 25
300
Appliquer une remise en pourcentage #
Champs :
MontantBrut
TauxRemise
Formule :
Field("MontantBrut") * (1 - Field("TauxRemise") / 100)
Avec :
MontantBrut = 1 000
TauxRemise = 10
Résultat :
900
Le champ peut être nommé MontantNet.
Calculer une marge #
Field("MontantNet") - Field("CoutRevient")
Avec :
MontantNet = 900
CoutRevient = 650
Résultat :
250
Calculer un taux de marge en évitant une division par zéro #
Iff(
Field("MontantNet") = 0,
0,
Round(1,(Field("Marge") / Field("MontantNet")) * 100)
)
Format :
0.0 %
Résultat possible :
27.8 %
Calculer le taux d’atteinte d’un objectif #
Iff(
Field("Objectif") = 0,
0,
Round(1,(Field("Realise") / Field("Objectif")) * 100)
)
Avec :
Objectif = 500 000
Realise = 535 000
Résultat :
107,0
Le format d’affichage du champ peut ensuite ajouter le symbole %.
Construire une chaîne de calculs métier #
C’est un exemple particulièrement intéressant pour expliquer la règle d’ordre des champs calculés.
On peut construire successivement :
Quantite
PrixUnitaire
TauxRemise
CoutRevient
MontantBrut
MontantNet
Marge
TauxMarge
StatutMarge
MontantBrut #
Field("Quantite") * Field("PrixUnitaire")
MontantNet #
Field("MontantBrut") * (1 - Field("TauxRemise") / 100)
Marge #
Field("MontantNet") - Field("CoutRevient")
TauxMarge #
Iff(
Field("MontantNet") = 0,
0,
Round(1,(Field("Marge") / Field("MontantNet")) * 100)
)
StatutMarge #
Iff(
Field("TauxMarge") >= 20,
"Rentabilité élevée",
Iff(
Field("TauxMarge") >= 10,
"Rentabilité correcte",
"Rentabilité faible"
)
)
Cet exemple permet de rappeler une règle essentielle :
Un champ calculé doit être positionné avant tous les champs calculés qui réutilisent son résultat.
MontantBrut doit donc précéder MontantNet, qui doit précéder Marge, etc.
Classification et indicateurs métier #
Segmenter des clients selon leur chiffre d’affaires #
Iff(
Field("CAAnnuel") >= 1000000,
"A - Stratégique",
Iff(
Field("CAAnnuel") >= 250000,
"B - Important",
"C - Standard"
)
)
Il est ainsi possible de créer une nouvelle dimension métier sans modifier la requête SQL.
Déterminer l’état d’un objectif #
Iff(
Field("TauxAtteinte") >= 100,
"Objectif atteint",
Iff(
Field("TauxAtteinte") >= 90,
"Proche de l'objectif",
"Sous l'objectif"
)
)
Combiner plusieurs critères #
Par exemple, signaler un client présentant un risque commercial :
Iff(
(Field("Encours") > Field("LimiteCredit"))
or
(Field("TauxMarge") < 5),
"À surveiller",
"Situation normale"
)
Plusieurs conditions obligatoires #
Iff(
(Field("TauxMarge") >= 15)
and
(Field("TauxAtteinte") >= 100),
"Performance élevée",
"Performance standard"
)
Les opérateurs and et or permettent donc de construire des règles métier plus élaborées.
Stocks et logistique #
Identifier l’état du stock #
Iff(
Field("StockDisponible") <= 0,
"Rupture",
Iff(
Field("StockDisponible") <= Field("StockSecurite"),
"À réapprovisionner",
"Disponible"
)
)
Calculer une quantité de réapprovisionnement #
Champs :
StockDisponible
StockCible
Formule :
maxval(
Field("StockCible") - Field("StockDisponible"),
0
)
Avec :
StockDisponible = 35
StockCible = 100
Résultat :
65
Si le stock est déjà supérieur à la cible, le résultat restera à 0.
Contrôler le respect d’une date de livraison #
Iff(
Field("DateLivraison") <= Field("DateLivraisonPrevue"),
"Livraison conforme",
"Livraison en retard"
)
Calculer un taux de service #
Iff(
Field("QuantiteCommandee") = 0,
0,
Round(
1,
Field("QuantiteLivree") / Field("QuantiteCommandee") * 100
)
)
Dates, échéances et périodes #
Les fonctions de date sont particulièrement intéressantes pour éviter d’ajouter systématiquement des colonnes dans les requêtes SQL.
Calculer une échéance de paiement #
Champs :
DateFacture
DelaiPaiementJours
Formule :
AddDays(
Field("DateFacture"),
Field("DelaiPaiementJours")
)
Par exemple :
DateFacture = 15/08/2026
DelaiPaiementJours = 30
donne une échéance au :
14/09/2026
Déterminer si une échéance est dépassée #
Iff(
Field("DateEcheance") < _DATE,
"Échue",
"À venir"
)
_DATE représente la date courante.
Créer une année d’analyse #
year(Field("DateCommande"))
Créer un trimestre #
quarter(Field("DateCommande"))
Créer un libellé Année / Trimestre #
year(Field("DateCommande"))
& " - T"
& quarter(Field("DateCommande"))
Résultat :
2026 - T3
Cela peut ensuite être utilisé comme dimension dans les composants.
Numéro de semaine #
week(Field("DateCommande"))
Trouver le dernier jour du mois #
lastday(Field("DateCommande"))
Pour une date en février 2028, le résultat sera :
29
Comparer deux dates sous forme lisible #
La fonction DateDiff peut produire une durée formatée :
DateDiff(
Field("DateDebut"),
Field("DateFin"),
"{0:dd} jour(s) {0:hh} heure(s)"
)
Cette fonction est utile pour de l’affichage, mais elle met aussi en évidence une limitation actuelle que je détaille plus bas : il manque une fonction simple retournant directement un nombre de jours entre deux dates.
Qualité et contrôle des données #
C’est une catégorie que j’ajouterais vraiment au Wiki, car les champs calculés peuvent être très utiles pour cela.
Normaliser un code #
upper(trim(Field("CodeClient")))
Par exemple :
" cli-0045 "
devient :
CLI-0045
Nettoyer un numéro de téléphone #
replace(
replace(
replace(Field("Telephone")," ",""),
".",
""
),
"-",
""
)
Ainsi :
04 76.12-34-56
devient :
0476123456
Contrôler un identifiant numérique de longueur fixe #
Si la source garantit une chaîne non nulle :
Iff(
(length(trim(Field("Identifiant"))) = 14)
and
numeric(trim(Field("Identifiant"))),
"Format correct",
"À contrôler"
)
Contrôle simple d’une adresse e-mail #
Ce n’est pas une validation complète d’adresse e-mail, mais cela peut servir de contrôle élémentaire :
Iff(
(pos("@",Field("Email")) > 1)
and
(pos(".",Field("Email")) > 3),
"Format plausible",
"À contrôler"
)
Extraire une partie d’une référence #
Avec :
CMD-2026-001258
on peut par exemple récupérer le préfixe :
copy(Field("Reference"),1,3)
Résultat :
CMD
Production, qualité et performance #
Calculer un taux de rebut #
Iff(
Field("QuantiteProduite") = 0,
0,
Round(
2,
Field("QuantiteRebut") / Field("QuantiteProduite") * 100
)
)
Déterminer le respect d’un SLA #
Iff(
Field("TempsTraitementHeures") <= Field("SLAHeures"),
"SLA respecté",
"SLA dépassé"
)
Calculer un écart par rapport à une référence #
Field("ValeurReelle") - Field("ValeurCible")
Calculer l’écart absolu #
Si seul l’écart importe, quel que soit son sens :
abs(
Field("ValeurReelle") - Field("ValeurCible")
)
Calculer un indice de productivité #
Iff(
Field("HeuresTravaillees") = 0,
0,
Round(
2,
Field("QuantiteProduite") / Field("HeuresTravaillees")
)
)
Ressources humaines et capacité #
Calculer un taux d’occupation #
Iff(
Field("HeuresDisponibles") = 0,
0,
Round(
1,
Field("HeuresAffectees") / Field("HeuresDisponibles") * 100
)
)
Calculer les heures supplémentaires #
maxval(
Field("HeuresTravaillees") - Field("HeuresContractuelles"),
0
)
Classer une charge de travail #
Iff(
Field("TauxOccupation") > 100,
"Surcharge",
Iff(
Field("TauxOccupation") >= 80,
"Charge élevée",
"Charge normale"
)
)
Manipulation et présentation de texte #
Construire un libellé métier #
Field("CodeClient")
& " - "
& Field("NomClient")
& " / "
& Field("Ville")
Résultat :
CLI0045 - Société Exemple / Grenoble
Uniformiser une ville #
upper(trim(Field("Ville")))
Remplacer un ancien libellé #
replace(
Field("Categorie"),
"GRAND COMPTE",
"Compte stratégique"
)
Afficher uniquement une partie d’une référence #
copy(Field("NumeroCommande"),5,4)
Un peu de HTML métier #
Sans revenir sur les liens hypertextes, le HTML peut aussi servir à mettre en évidence une information.
Par exemple, pour créer un statut visuel :
Iff(
Field("Statut") = "OK",
"<span style=""color:#2e7d32;font-weight:bold;"">Conforme</span>",
"<span style=""color:#c62828;font-weight:bold;"">À contrôler</span>"
)
Il faut dans ce cas activer Code HTML sur le champ calculé.
C’est suffisant pour des mises en évidence simples ; je déconseillerais de faire du HTML complexe dans des champs calculés.
