Ce document fournit une référence complète pour toutes les fonctions disponibles dans la fonctionnalité des champs calculés de PyQueryHub. Le moteur de formules est compatible avec la syntaxe de Mode Analytics et prend en charge plus de 70 fonctions dans plusieurs catégories.
[nom_du_champ]
'texte'
ou "texte"
123
ou 45.67
+
, -
, *
, /
, ==
, !=
, >
, <
, >=
, <=
SUM([champ])
([a] + [b]) * [c]
-- Calcul simple
[revenu] - [coût]
-- Logique conditionnelle
CASE [statut] WHEN 'actif' THEN 1 ELSE 0 END
-- Agrégation avec condition
SUM(CASE [région] WHEN 'Nord' THEN [ventes] ELSE 0 END)
-- Manipulation de chaîne
UPPER(LEFT([nom_client], 5))
-- Calcul de date
DATEDIFF('day', [date_commande], TODAY())
Retourne la valeur absolue d'un nombre.
Syntaxe: ABS(expression)
Exemples:
ABS(-25) -- Retourne: 25
ABS([profit]) -- Retourne la valeur absolue du champ profit
ABS([ventes] - [objectif]) -- Retourne la différence absolue
Cas d'Utilisation:
Arrondit un nombre à l'entier supérieur le plus proche.
Syntaxe: CEILING(expression)
Exemples:
CEILING(3.2) -- Retourne: 4
CEILING(-2.8) -- Retourne: -2
CEILING([prix] / 10) -- Arrondit à l'entier supérieur le prix divisé par 10
Cas d'Utilisation:
Retourne e (le nombre d'Euler) élevé à la puissance du nombre spécifié.
Syntaxe: EXP(expression)
Exemples:
EXP(1) -- Retourne: 2.718281828...
EXP(2) -- Retourne: 7.389...
EXP([taux_croissance]) -- Calcul de la croissance exponentielle
Cas d'Utilisation:
Arrondit un nombre à l'entier inférieur le plus proche.
Syntaxe: FLOOR(expression)
Exemples:
FLOOR(3.8) -- Retourne: 3
FLOOR(-2.2) -- Retourne: -3
FLOOR([revenu] / 1000) -- Arrondit aux milliers inférieurs
Cas d'Utilisation:
Retourne le logarithme en base 10 d'un nombre.
Syntaxe: LOG10(expression)
Exemples:
LOG10(100) -- Retourne: 2
LOG10(1000) -- Retourne: 3
LOG10([population]) -- Échelle logarithmique pour les grands nombres
Cas d'Utilisation:
Retourne le logarithme naturel (base e) d'un nombre.
Syntaxe: LN(expression)
Exemples:
LN(2.718281828) -- Retourne: 1 (approximativement)
LN([valeur]) -- Logarithme naturel de la valeur
Cas d'Utilisation:
Retourne le reste après division.
Syntaxe: MOD(dividende, diviseur)
Exemples:
MOD(10, 3) -- Retourne: 1
MOD([id_commande], 2) -- Retourne 0 pour les ID pairs, 1 pour les impairs
MOD([num_jour], 7) -- Jour de la semaine (0-6)
Cas d'Utilisation:
Retourne un nombre élevé à une puissance spécifiée.
Syntaxe: POWER(base, exposant)
Exemples:
POWER(2, 3) -- Retourne: 8
POWER([base], [exp]) -- Base élevée à la puissance exp
POWER([ventes], 2) -- Carré des valeurs de ventes
Cas d'Utilisation:
Arrondit un nombre à un nombre spécifié de décimales.
Syntaxe: ROUND(expression, nb_decimales)
Exemples:
ROUND(3.14159, 2) -- Retourne: 3.14
ROUND([prix], 0) -- Arrondit à l'entier le plus proche
ROUND([pourcentage] * 100, 1) -- Arrondit le pourcentage à 1 décimale
Cas d'Utilisation:
Retourne la racine carrée d'un nombre.
Syntaxe: SQRT(expression)
Exemples:
SQRT(9) -- Retourne: 3
SQRT(25) -- Retourne: 5
SQRT([surface]) -- Calcule la longueur du côté à partir de la surface
Cas d'Utilisation:
Tronque un nombre à un nombre spécifié de décimales.
Syntaxe: TRUNC(expression, nb_decimales)
Exemples:
TRUNC(3.14159, 2) -- Retourne: 3.14
TRUNC([valeur], 0) -- Supprime la partie décimale
TRUNC([prix] * 1.1, 2) -- Tronque le prix calculé
Cas d'Utilisation:
Retourne l'expression si elle n'est pas nulle, sinon retourne 0.
Syntaxe: ZN(expression)
Exemples:
ZN([commission]) -- Retourne 0 si la commission est nulle
ZN([bonus]) + [salaire] -- Ajoute le bonus ou 0 au salaire
Cas d'Utilisation:
Teste si une chaîne contient une sous-chaîne spécifiée.
Syntaxe: CONTAINS(chaîne, sous_chaîne)
Exemples:
CONTAINS([nom_produit], 'Pro') -- Retourne vrai si le nom contient 'Pro'
CONTAINS([email], '@gmail.com') -- Vérifie les adresses Gmail
Cas d'Utilisation:
Retourne la position d'une sous-chaîne dans une chaîne (indexation basée sur 1).
Syntaxe: FIND(chaîne, sous_chaîne)
Exemples:
FIND([email], '@') -- Position du symbole @
FIND([description], 'erreur') -- Trouve les mentions d'erreur
Cas d'Utilisation:
Retourne les caractères les plus à gauche d'une chaîne.
Syntaxe: LEFT(chaîne, nombre_de_caractères)
Exemples:
LEFT([id_client], 3) -- 3 premiers caractères
LEFT([code_produit], 2) -- Préfixe de la catégorie de produit
LEFT([téléphone], 3) -- Indicatif régional
Cas d'Utilisation:
Convertit une chaîne en minuscules.
Syntaxe: LOWER(chaîne)
Exemples:
LOWER([nom_client]) -- Convertit le nom en minuscules
LOWER([email]) -- Normalise les adresses e-mail
Cas d'Utilisation:
Supprime les espaces blancs du côté gauche d'une chaîne.
Syntaxe: LTRIM(chaîne)
Exemples:
LTRIM([description]) -- Supprime les espaces de début
LTRIM([entrée_utilisateur]) -- Nettoie l'entrée utilisateur
Cas d'Utilisation:
Divise une chaîne par un délimiteur et retourne le jeton à la position spécifiée.
Syntaxe: PLUCK(chaîne, délimiteur, position)
Exemples:
PLUCK([nom_complet], ' ', 1) -- Prénom
PLUCK([nom_complet], ' ', 2) -- Nom de famille
PLUCK([chemin_fichier], '/', 3) -- Troisième segment du chemin
PLUCK([données_csv], ',', 2) -- Deuxième colonne CSV
Cas d'Utilisation:
Remplace toutes les occurrences d'une sous-chaîne par une autre sous-chaîne.
Syntaxe: REPLACE(chaîne, ancienne_sous_chaîne, nouvelle_sous_chaîne)
Exemples:
REPLACE([téléphone], '-', '') -- Supprime les tirets du téléphone
REPLACE([description], 'ancien', 'nouveau') -- Remplace le texte
REPLACE([nom_produit], '&', 'et') -- Remplace l'esperluette
Cas d'Utilisation:
Retourne les caractères les plus à droite d'une chaîne.
Syntaxe: RIGHT(chaîne, nombre_de_caractères)
Exemples:
RIGHT([id_commande], 4) -- 4 derniers caractères
RIGHT([nom_fichier], 3) -- Extension de fichier
RIGHT([compte], 2) -- Suffixe de compte
Cas d'Utilisation:
Supprime les espaces blancs du côté droit d'une chaîne.
Syntaxe: RTRIM(chaîne)
Exemples:
RTRIM([description]) -- Supprime les espaces de fin
RTRIM([commentaire_utilisateur]) -- Nettoie l'entrée utilisateur
Cas d'Utilisation:
Extrait une sous-chaîne d'une chaîne à partir d'une position spécifiée.
Syntaxe: SUBSTR(chaîne, position_début, longueur)
Exemples:
SUBSTR([code_produit], 2, 3) -- Caractères 2-4
SUBSTR([description], 1, 50) -- 50 premiers caractères
SUBSTR([chaîne_date], 1, 4) -- Extrait l'année
Cas d'Utilisation:
Supprime les espaces blancs des deux côtés d'une chaîne.
Syntaxe: TRIM(chaîne)
Exemples:
TRIM([entrée_client]) -- Supprime les espaces de début/fin
TRIM([description]) -- Nettoie le champ de description
Cas d'Utilisation:
Convertit une chaîne en majuscules.
Syntaxe: UPPER(chaîne)
Exemples:
UPPER([code_produit]) -- Standardise les codes produits
UPPER([état]) -- Standardise les abréviations d'état
Cas d'Utilisation:
Ajoute un intervalle de temps spécifié à une date.
Syntaxe: DATEADD(partie_date, nombre, date)
Parties de Date: 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second'
Exemples:
DATEADD('day', 30, [date_commande]) -- 30 jours après la commande
DATEADD('month', -1, TODAY()) -- Il y a un mois
DATEADD('year', 1, [date_début]) -- Un an plus tard
Cas d'Utilisation:
Calcule la différence entre deux dates.
Syntaxe: DATEDIFF(partie_date, date_début, date_fin)
Exemples:
DATEDIFF('day', [date_commande], [date_expédition]) -- Jours avant expédition
DATEDIFF('month', [date_embauche], TODAY()) -- Mois d'emploi
DATEDIFF('year', [date_naissance], TODAY()) -- Âge en années
Cas d'Utilisation:
Extrait une partie spécifique d'une date.
Syntaxe: DATEPART(partie_date, date)
Exemples:
DATEPART('year', [date_commande]) -- Extrait l'année
DATEPART('month', [date_transaction]) -- Extrait le mois (1-12)
DATEPART('dow', [date]) -- Jour de la semaine (1-7)
DATEPART('quarter', [date_ventes]) -- Trimestre (1-4)
Cas d'Utilisation:
Tronque une date à la précision spécifiée.
Syntaxe: DATETRUNC(partie_date, date)
Exemples:
DATETRUNC('month', [date_commande]) -- Premier jour du mois
DATETRUNC('year', [date_transaction]) -- Premier jour de l'année
DATETRUNC('week', [date_événement]) -- Premier jour de la semaine
Cas d'Utilisation:
Retourne la date et l'heure actuelles.
Syntaxe: NOW()
Exemples:
NOW() -- Horodatage actuel
DATEDIFF('hour', [créé_le], NOW()) -- Heures depuis la création
Cas d'Utilisation:
Retourne la date actuelle (sans l'heure).
Syntaxe: TODAY()
Exemples:
TODAY() -- Date actuelle
DATEDIFF('day', [date_échéance], TODAY()) -- Jours de retard
Cas d'Utilisation:
Convertit une expression au format date.
Syntaxe: DATE(expression)
Exemples:
DATE([champ_horodatage]) -- Extrait la date d'un horodatage
DATE('2023-12-25') -- Convertit une chaîne en date
Cas d'Utilisation:
Convertit une expression au format datetime.
Syntaxe: DATETIME(expression)
Exemples:
DATETIME([chaîne_date]) -- Convertit une chaîne en datetime
DATETIME([timestamp_unix]) -- Convertit un horodatage
Cas d'Utilisation:
Convertit une expression en entier.
Syntaxe: INT(expression)
Exemples:
INT([champ_décimal]) -- Convertit en entier
INT([chaîne_nombre]) -- Analyse une chaîne numérique
INT([prix] / 100) -- Convertit les centimes en dollars
Cas d'Utilisation:
Convertit une expression en nombre à virgule flottante.
Syntaxe: FLOAT(expression)
Exemples:
FLOAT([champ_entier]) -- Convertit en décimal
FLOAT([chaîne_pourcentage]) -- Analyse un pourcentage
Cas d'Utilisation:
Opération logique ET - retourne vrai si les deux conditions sont vraies.
Syntaxe: condition1 AND condition2
Exemples:
[âge] >= 18 AND [statut] == 'actif' -- Adulte et actif
[revenu] > 1000 AND [région] == 'Nord' -- Revenu élevé dans le Nord
[date] >= '2023-01-01' AND [date] <= '2023-12-31' -- Plage de dates
Cas d'Utilisation:
Opération logique OU - retourne vrai si l'une ou l'autre des conditions est vraie.
Syntaxe: condition1 OR condition2
Exemples:
[statut] == 'en_attente' OR [statut] == 'en_révision' -- L'un ou l'autre statut
[priorité] == 'élevée' OR [valeur] > 10000 -- Priorité ou valeur élevée
[région] == 'Nord' OR [région] == 'Sud' -- Plusieurs régions
Cas d'Utilisation:
Logique conditionnelle avec des opérateurs de comparaison.
Syntaxe: IF condition THEN valeur1 ELSE valeur2 END
Exemples:
IF [profit] > 0 THEN 'Rentable' ELSE 'Perte' END
IF [âge] >= 65 THEN 'Senior' ELSE 'Normal' END
IF [score] >= 90 THEN 'A' ELSE IF [score] >= 80 THEN 'B' ELSE 'C' END
Cas d'Utilisation:
Logique conditionnelle pour les comparaisons d'égalité.
Syntaxe: CASE champ WHEN valeur THEN résultat ELSE alternative END
Exemples:
CASE [statut] WHEN 'actif' THEN 1 ELSE 0 END
CASE [note] WHEN 'A' THEN 4 WHEN 'B' THEN 3 WHEN 'C' THEN 2 ELSE 1 END
CASE [région] WHEN 'Nord' THEN 'N' WHEN 'Sud' THEN 'S' ELSE 'Autre' END
Cas d'Utilisation:
Teste si une expression est nulle.
Syntaxe: ISNULL(expression)
Exemples:
ISNULL([champ_optionnel]) -- Vérifie si le champ est nul
SUM(CASE WHEN ISNULL([valeur]) THEN 0 ELSE 1 END) -- Compte les valeurs non nulles
Cas d'Utilisation:
Retourne l'expression si elle n'est pas nulle, sinon retourne l'alternative.
Syntaxe: IFNULL(expression, valeur_alternative)
Exemples:
IFNULL([commission], 0) -- Utilise 0 si la commission est nulle
IFNULL([surnom], [nom_complet]) -- Utilise le surnom ou le nom complet
IFNULL([remise], 0.0) -- Remise par défaut à 0
Cas d'Utilisation:
Calcule la moyenne de toutes les valeurs.
Syntaxe: AVG(champ_ou_expression)
Exemples:
AVG([ventes]) -- Moyenne des ventes
AVG([prix] * [quantité]) -- Valeur moyenne de la commande
AVG(CASE [région] WHEN 'Nord' THEN [ventes] ELSE NULL END) -- Moyenne régionale
Cas d'Utilisation:
Compte les valeurs non nulles.
Syntaxe: COUNT(champ_ou_expression)
Exemples:
COUNT([id_commande]) -- Nombre de commandes
COUNT(CASE [statut] WHEN 'terminé' THEN 1 ELSE NULL END) -- Commandes terminées
COUNT(1) -- Compte toutes les lignes
Cas d'Utilisation:
Compte les valeurs distinctes (uniques).
Syntaxe: COUNTD(champ_ou_expression)
Exemples:
COUNTD([id_client]) -- Clients uniques
COUNTD([catégorie_produit]) -- Nombre de catégories
COUNTD([région]) -- Nombre de régions
Cas d'Utilisation:
Retourne la valeur maximale.
Syntaxe: MAX(champ_ou_expression)
Exemples:
MAX([date_commande]) -- Commande la plus récente
MAX([prix]) -- Prix le plus élevé
MAX([score]) -- Meilleur score
Cas d'Utilisation:
Retourne la valeur médiane (du milieu).
Syntaxe: MEDIAN(champ_ou_expression)
Exemples:
MEDIAN([salaire]) -- Salaire médian
MEDIAN([temps_réponse]) -- Temps de réponse typique
MEDIAN([âge]) -- Âge médian
Cas d'Utilisation:
Retourne la valeur minimale.
Syntaxe: MIN(champ_ou_expression)
Exemples:
MIN([date_commande]) -- Commande la plus ancienne
MIN([prix]) -- Prix le plus bas
MIN([temps_réponse]) -- Réponse la plus rapide
Cas d'Utilisation:
Retourne la valeur la plus fréquente.
Syntaxe: MODE(champ_ou_expression)
Exemples:
MODE([catégorie_produit]) -- Catégorie la plus courante
MODE([segment_client]) -- Segment le plus fréquent
MODE([jour_semaine]) -- Jour le plus courant
Cas d'Utilisation:
Retourne le N-ième percentile des valeurs.
Fonctions Disponibles: PERCENTILE_1
, PERCENTILE_5
, PERCENTILE_25
, PERCENTILE_75
, PERCENTILE_95
, PERCENTILE_99
Exemples:
PERCENTILE_25([revenu]) -- 25e percentile (Q1)
PERCENTILE_75([revenu]) -- 75e percentile (Q3)
PERCENTILE_95([temps_réponse]) -- 95e percentile
PERCENTILE_99([valeur_transaction]) -- 99e percentile
Cas d'Utilisation:
Calcule l'écart-type de l'échantillon.
Syntaxe: STDEV(champ_ou_expression)
Exemples:
STDEV([ventes]) -- Variabilité des ventes
STDEV([temps_réponse]) -- Constance du temps de réponse
STDEV([scores]) -- Distribution des scores
Cas d'Utilisation:
Calcule l'écart-type de la population.
Syntaxe: STDEVP(champ_ou_expression)
Exemples:
STDEVP([scores_test]) -- Écart-type de la population
STDEVP([mesures]) -- Variabilité de la population complète
Cas d'Utilisation:
Calcule la somme de toutes les valeurs.
Syntaxe: SUM(champ_ou_expression)
Exemples:
SUM([ventes]) -- Ventes totales
SUM([quantité] * [prix]) -- Revenu total
SUM(CASE [statut] WHEN 'terminé' THEN 1 ELSE 0 END) -- Compte les terminés
Cas d'Utilisation:
Calcule la variance de l'échantillon.
Syntaxe: VAR(champ_ou_expression)
Exemples:
VAR([retours]) -- Variabilité des retours
VAR([performance]) -- Variance de la performance
Cas d'Utilisation:
Calcule la variance de la population.
Syntaxe: VARP(champ_ou_expression)
Exemples:
VARP([données_population]) -- Variance de la population
VARP([ensemble_données_complet]) -- Variance de l'ensemble de données complet
Cas d'Utilisation:
Retourne le nombre de lignes de la ligne actuelle à la première ligne de la partition.
Syntaxe: FIRST()
Exemples:
FIRST() -- Distance à la première ligne
[ventes] - LOOKUP([ventes], FIRST()) -- Différence par rapport à la première valeur
Cas d'Utilisation:
Retourne l'index (position) de la ligne actuelle.
Syntaxe: INDEX()
Exemples:
INDEX() -- Numéro de ligne (basé sur 1)
INDEX() / COUNT([id]) -- Position relative en pourcentage
Cas d'Utilisation:
Retourne le nombre de lignes de la ligne actuelle à la dernière ligne de la partition.
Syntaxe: LAST()
Exemples:
LAST() -- Distance à la dernière ligne
[ventes] - LOOKUP([ventes], LAST()) -- Différence par rapport à la dernière valeur
Cas d'Utilisation:
Retourne la valeur d'une expression à un décalage de ligne spécifié.
Syntaxe: LOOKUP(expression, décalage)
Exemples:
LOOKUP([ventes], -1) -- Ventes de la ligne précédente
LOOKUP([prix], 1) -- Prix de la ligne suivante
LOOKUP([valeur], 0) -- Valeur de la ligne actuelle
[ventes] - LOOKUP([ventes], -1) -- Variation par rapport à la période précédente
Cas d'Utilisation:
Distribue les lignes dans un nombre spécifié de groupes (tuiles).
Syntaxe: NTILE(expression, nombre_de_tuiles)
Exemples:
NTILE([ventes], 4) -- Quartiles (1-4)
NTILE([performance], 10) -- Déciles (1-10)
NTILE([score], 5) -- Quintiles (1-5)
Cas d'Utilisation:
Retourne le rang de chaque ligne avec des sauts pour les valeurs ex aequo.
Syntaxe: RANK(expression)
Exemples:
RANK([ventes]) -- Classement des ventes avec sauts
RANK([score]) -- Classement des scores
21 - RANK([score]) -- Classement inversé
Cas d'Utilisation:
Retourne le rang de chaque ligne sans sauts pour les valeurs ex aequo.
Syntaxe: RANK_DENSE(expression)
Exemples:
RANK_DENSE([revenu]) -- Classement dense des revenus
RANK_DENSE([performance]) -- Classement des performances sans sauts
Cas d'Utilisation:
Calcule une moyenne mobile de la première ligne à la ligne actuelle.
Syntaxe: RUNNING_AVG(expression)
Exemples:
RUNNING_AVG([ventes_journalières]) -- Moyenne cumulative des ventes
RUNNING_AVG([temps_réponse]) -- Moyenne mobile du temps de réponse
Cas d'Utilisation:
Calcule un comptage mobile de la première ligne à la ligne actuelle.
Syntaxe: RUNNING_COUNT(expression)
Exemples:
RUNNING_COUNT([id_commande]) -- Nombre cumulatif de commandes
RUNNING_COUNT([client]) -- Comptage mobile des clients
Cas d'Utilisation:
Calcule une somme mobile de la première ligne à la ligne actuelle.
Syntaxe: RUNNING_SUM(expression)
Exemples:
RUNNING_SUM([revenu_journalier]) -- Revenu cumulatif
RUNNING_SUM([unités_vendues]) -- Total mobile des unités
RUNNING_SUM([coûts]) -- Coûts cumulatifs
Cas d'Utilisation:
Calcule le total pour l'ensemble de la partition.
Syntaxe: TOTAL(expression)
Exemples:
[ventes] / TOTAL([ventes]) -- Pourcentage du total
TOTAL([revenu]) -- Revenu total de la partition
Cas d'Utilisation:
Calcule une moyenne sur une fenêtre mobile de lignes.
Syntaxe: WINDOW_AVG(expression, décalage_début, décalage_fin)
Exemples:
WINDOW_AVG([ventes], -2, 2) -- Moyenne mobile sur 5 jours
WINDOW_AVG([prix], -6, 0) -- Moyenne mobile sur 7 périodes
WINDOW_AVG([performance], -1, 1) -- Moyenne centrée sur 3 périodes
Cas d'Utilisation:
Compte les valeurs sur une fenêtre mobile de lignes.
Syntaxe: WINDOW_COUNT(expression, décalage_début, décalage_fin)
Exemples:
WINDOW_COUNT([commandes], -6, 0) -- Commandes des 7 dernières périodes
WINDOW_COUNT([événements], -1, 1) -- Événements dans une fenêtre de 3 périodes
Cas d'Utilisation:
Calcule une somme sur une fenêtre mobile de lignes.
Syntaxe: WINDOW_SUM(expression, décalage_début, décalage_fin)
Exemples:
WINDOW_SUM([ventes], -6, 0) -- Somme mobile sur 7 jours
WINDOW_SUM([revenu], -3, 3) -- Somme centrée sur 7 périodes
WINDOW_SUM([quantité], -11, 0) -- Total mobile sur 12 mois
Cas d'Utilisation:
-- Calcul du score RFM
CASE
WHEN [jours_récence] <= 30 AND [fréquence] >= 5 AND [monétaire] >= 1000 THEN 'Champions'
WHEN [jours_récence] <= 60 AND [fréquence] >= 3 AND [monétaire] >= 500 THEN 'Fidèles'
WHEN [jours_récence] <= 90 AND [fréquence] >= 2 THEN 'Potentiels'
ELSE 'À Risque'
END
-- Calculer le pourcentage de la marge bénéficiaire
ROUND(([revenu] - [coût]) / [revenu] * 100, 2)
-- Catégoriser les niveaux de profit
CASE
WHEN ([revenu] - [coût]) / [revenu] > 0.30 THEN 'Marge Élevée'
WHEN ([revenu] - [coût]) / [revenu] > 0.15 THEN 'Marge Moyenne'
WHEN ([revenu] - [coût]) / [revenu] > 0 THEN 'Marge Faible'
ELSE 'Perte'
END
-- Taux de croissance des ventes
([ventes_actuelles] - [ventes_précédentes]) / [ventes_précédentes] * 100
-- Atteinte des quotas
[ventes_réelles] / [quota] * 100
-- Classement des ventes au sein de l'équipe
RANK([ventes_totales])
-- Âge du client
DATEDIFF('year', [date_naissance], TODAY())
-- Ancienneté du compte en mois
DATEDIFF('month', [compte_créé], TODAY())
-- Jours depuis le dernier achat
DATEDIFF('day', [date_dernier_achat], TODAY())
-- Trimestre de l'année
DATEPART('quarter', [date_transaction])
-- Nom du mois
CASE DATEPART('month', [date])
WHEN 1 THEN 'Janvier'
WHEN 2 THEN 'Février'
WHEN 3 THEN 'Mars'
-- ... continuer pour tous les mois
ELSE 'Inconnu'
END
-- Est-ce le week-end ?
CASE DATEPART('dow', [date])
WHEN 1 THEN 'Week-end' -- Dimanche
WHEN 7 THEN 'Week-end' -- Samedi
ELSE 'Jour de semaine'
END
-- Vérification du format d'e-mail valide
CASE
WHEN CONTAINS([email], '@') AND CONTAINS([email], '.') THEN 'Valide'
ELSE 'Invalide'
END
-- Extraire le domaine
RIGHT([email], LEN([email]) - FIND([email], '@'))
-- Nettoyer les numéros de téléphone
REPLACE(REPLACE(REPLACE([téléphone], '(', ''), ')', ''), '-', '')
-- Standardiser les noms
TRIM(UPPER([nom_famille])) + ', ' + TRIM([prénom])
-- Extraire les initiales
LEFT([prénom], 1) + LEFT([nom_famille], 1)
-- Calcul du Z-score
([valeur] - AVG([valeur])) / STDEV([valeur])
-- Coefficient de variation
STDEV([ventes]) / AVG([ventes]) * 100
-- Rang percentile
RANK([score]) / COUNT([score]) * 100
-- Retour sur investissement
([valeur_fin] - [valeur_début]) / [valeur_début] * 100
-- Taux de croissance annuel composé
POWER([valeur_fin] / [valeur_début], 1.0 / [années]) - 1
-- Valeur actuelle
[valeur_future] / POWER(1 + [taux_intérêt], [périodes])
-- Nombre de clients à haute valeur
SUM(CASE WHEN [achats_totaux] > 10000 THEN 1 ELSE 0 END)
-- Pourcentage de commandes terminées
SUM(CASE [statut] WHEN 'terminé' THEN 1 ELSE 0 END) / COUNT([id_commande]) * 100
-- Âge moyen des clients actifs
AVG(CASE [statut] WHEN 'actif' THEN [âge] ELSE NULL END)
-- Revenu des nouveaux clients
SUM(CASE WHEN [type_client] = 'nouveau' THEN [revenu] ELSE 0 END)
-- Pourcentage du revenu du produit phare
MAX([revenu_produit]) / SUM([revenu_produit]) * 100
-- Valeur moyenne de la commande par région
AVG(CASE [région] WHEN 'Nord' THEN [valeur_commande] ELSE NULL END)
Utilisez des Références de Champ Claires
[nom_du_champ]
Gérez les Valeurs Nulles
IFNULL()
ou ZN()
pour les valeurs par défautOptimisez les Performances
Formatez les Formules Complexes
-- Bon : Multi-lignes avec indentation
CASE [palier_client]
WHEN 'Or' THEN [remise_base] * 1.5
WHEN 'Argent' THEN [remise_base] * 1.2
ELSE [remise_base]
END
-- À éviter : Une seule longue ligne
CASE [palier_client] WHEN 'Or' THEN [remise_base] * 1.5 WHEN 'Argent' THEN [remise_base] * 1.2 ELSE [remise_base] END
Utilisez des Noms Significatifs
Documentez la Logique Complexe
Testez avec des Données d'Exemple
Utilisez des Types de Données Appropriés
Validez la Logique Métier
Minimisez les Calculs Complexes
Agrégations Efficaces
Opérations sur les Chaînes
-- Erreur : Crochets manquants
revenu - coût -- Devrait être : [revenu] - [coût]
-- Erreur : Parenthèses non appariées
SUM([ventes] * 1.1 -- Devrait être : SUM([ventes] * 1.1)
-- Erreur : Guillemets invalides
[statut] == "actif" -- Devrait être : [statut] == 'actif'
-- Erreur : Concaténation de chaîne avec des nombres
[nom] + [âge] -- Devrait être : [nom] + ' (' + INT([âge]) + ')'
-- Erreur : Arithmétique de date avec des chaînes
[date] + 30 -- Devrait être : DATEADD('day', 30, [date])
-- Erreur : Propagation de nul
[valeur1] + [valeur2] -- Si l'un ou l'autre est nul, le résultat est nul
-- Solution : IFNULL([valeur1], 0) + IFNULL([valeur2], 0)
-- Erreur : Division par zéro
[numérateur] / [dénominateur] -- Peut provoquer une erreur si le dénominateur est 0
-- Solution : CASE WHEN [dénominateur] != 0 THEN [numérateur] / [dénominateur] ELSE 0 END
Simplifiez les Formules Complexes
Utilisez des Données d'Exemple
Validez les Types de Données
Calculs Lents
Problèmes de Mémoire
Erreurs de Timeout
Lors du dépannage des champs calculés :
Vérifiez d'Abord la Syntaxe
Testez avec des Données Simples
Consultez la Documentation
Utilisez les Messages d'Erreur
N'oubliez pas : Le moteur de formules fournit une validation en temps réel et une fonctionnalité de prévisualisation pour aider à détecter les erreurs tôt dans le processus de développement.