---
title:  Exemples avancés par domaine métier
description: "## 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…"
url: "https://wiki.biboard.fr/wiki/exemples-avances-par-domaine-metier/"
updated: "2026-08-20"
category: Guide utilisateur / Studio / Datasources
---

#  Exemples avancés par domaine 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.

---
