MAXX : trouver la plus grande valeur d’une expression en DAX
La plus grosse ligne de vente, le meilleur mois de l’année, le montant le plus élevé d’une catégorie. Avec le piège de la somme qui renvoie partout le même total.
MAXX parcourt une table ligne par ligne, évalue une expression sur chaque ligne et renvoie la valeur la plus élevée obtenue. Là où MAX lit une colonne telle qu’elle existe, MAXX calcule d’abord, puis retient le maximum.
Elle répond aux questions du type « quelle est la plus grande valeur de ce calcul ? » : la plus grosse ligne de vente quand le montant n’est pas stocké, le chiffre d’affaires du meilleur mois, la vente la plus élevée d’une catégorie de produits.
Une table, une expression, une option
MAXX(<table>, <expression>, [<variant>])
| Paramètre | Rôle |
|---|---|
table | Le nom d’une table, ou une expression qui renvoie une table, comme FILTER ou VALUES. |
expression | Le calcul évalué pour chaque ligne de la table. |
variant | Facultatif. Si l’expression mélange des types, par exemple du texte et des nombres, MAXX ne considère par défaut que les nombres. Avec TRUE, elle renvoie la valeur la plus élevée selon un tri décroissant de toutes les valeurs. |
MAXX tient compte des nombres, des textes et des dates. Les valeurs vides sont ignorées, et les valeurs TRUE/FALSE ne sont pas prises en charge. La fonction n’est pas prise en charge en mode DirectQuery dans les colonnes calculées et les règles RLS.
Trois mesures sur un modèle de ventes
Le modèle relie une table Ventes (Date, Quantité, PrixUnitaire, Montant) à Produits (Produit, Catégorie) et à une table Calendrier (Date, Mois). La mesure de base est CA = SUM(Ventes[Montant]).
La plus grosse ligne de vente
Plus grosse ligne = MAXX(Ventes, Ventes[Quantité] * Ventes[PrixUnitaire])
Le produit quantité fois prix est calculé ligne par ligne, sans créer de colonne, puis MAXX garde le plus élevé. Dans un tableau par produit, chaque ligne affiche la plus grosse vente du produit.
Le chiffre d’affaires du meilleur mois
Meilleur mois = MAXX(VALUES(Calendrier[Mois]), [CA])
MAXX parcourt les mois présents dans le contexte et calcule la mesure [CA] pour chacun. Dans un visuel par année, chaque année affiche le chiffre d’affaires de son meilleur mois.
La vente la plus élevée d’une catégorie
Plus grosse vente accessoires =
MAXX(
FILTER(Ventes, RELATED(Produits[Catégorie]) = "Accessoires"),
Ventes[Montant]
)
FILTER réduit d’abord la table aux ventes de la catégorie, puis MAXX y cherche le montant le plus élevé.
Le meilleur mois qui vaut le total de l’année
On veut le meilleur mois et on écrit la somme directement dans MAXX :
Meilleur mois (faux) = MAXX(VALUES(Calendrier[Mois]), SUM(Ventes[Montant]))
Le résultat est égal au chiffre d’affaires de toute la période affichée. La raison : MAXX parcourt les mois, mais SUM ne tient pas compte du mois de la ligne en cours. Elle renvoie à chaque passage la somme de toute la période, et le maximum de valeurs identiques est cette même somme.
Pour que chaque mois soit calculé séparément, il faut que le mois parcouru devienne un filtre. C’est ce que fait l’appel à une mesure, comme [CA] dans l’exemple plus haut, ou l’emploi explicite de CALCULATE :
Meilleur mois = MAXX(VALUES(Calendrier[Mois]), CALCULATE(SUM(Ventes[Montant])))
Nous préférons la première écriture, avec une mesure nommée : elle se relit mieux et le calcul de base n’est écrit qu’une fois.
Ce qu’on nous demande sur MAXX
Quelle différence entre MAX et MAXX ?
MAX renvoie la plus grande valeur d’une colonne, ou la plus grande de deux expressions. MAXX évalue une expression pour chaque ligne d’une table, puis renvoie la plus grande valeur obtenue. Dès qu’il faut calculer avant de comparer, c’est MAXX.
MAXX tient-elle compte des valeurs vides ?
Non, les valeurs vides sont ignorées. Les valeurs TRUE et FALSE ne sont pas prises en charge : seuls les nombres, les textes et les dates sont comptés.
À quoi sert le paramètre variant ?
Quand l’expression renvoie des types mélangés, comme du texte et des nombres, MAXX ne considère par défaut que les nombres. Avec variant égal à TRUE, elle renvoie la valeur la plus élevée selon un tri décroissant de toutes les valeurs.
MAXX fonctionne-t-elle en DirectQuery ?
Pas dans les colonnes calculées ni dans les règles de sécurité au niveau des lignes, où elle n’est pas prise en charge en mode DirectQuery.
Pour aller plus loin
COUNTAX: une autre fonction qui parcourt une table ligne par ligne.- Le DAX expliqué aux décideurs : lire une mesure sans l’écrire.
- Calculer un cumul en DAX.
- La référence complète Power Query et DAX.
Vos mesures renvoient le même chiffre sur chaque ligne ?
Nous relisons vos mesures DAX pour vérifier que chaque calcul tient compte du bon contexte.