MAX : obtenir la plus grande valeur d’une colonne en DAX
La dernière date de vente, la borne de fin d’une période, le plus grand de deux chiffres. Et la différence avec MAXA et MAXX, qui ne s’emploient pas dans les mêmes cas.
MAX renvoie la plus grande valeur d’une colonne, ou la plus grande de deux expressions qui renvoient chacune une valeur unique. Appliquée à une colonne, elle tient compte des filtres du visuel : dans un tableau par produit, chaque ligne obtient le maximum de son produit.
C’est l’une des fonctions les plus employées en DAX, souvent sans qu’on y pense : MAX(Calendrier[Date]) donne la dernière date de la période affichée, point de départ de la plupart des calculs de cumul ou de périodes glissantes.
Une colonne, ou deux expressions
MAX(<column>)
MAX(<expression1>, <expression2>)
| Paramètre | Rôle |
|---|---|
column | La colonne dans laquelle chercher la plus grande valeur. |
expression1, expression2 | Deux expressions DAX qui renvoient chacune une valeur unique. MAX renvoie la plus grande des deux. |
Les valeurs TRUE/FALSE ne sont pas prises en charge. Avec deux expressions, une valeur vide est traitée comme 0 : MAX(1, BLANK()) renvoie 1, mais MAX(-1, BLANK()) renvoie 0. Si les deux sont vides, MAX renvoie une valeur vide.
MAX, MAXA ou MAXX
| Fonction | Quand l’employer |
|---|---|
MAX | Le maximum d’une colonne, ou le plus grand de deux résultats. C’est aussi elle qu’il faut pour comparer des textes. |
MAXA | Le maximum d’une colonne qui contient des valeurs logiques : TRUE compte pour 1, FALSE pour 0. Les cellules vides sont ignorées, et sans valeur utilisable, MAXA renvoie 0. |
MAXX | Le maximum d’une expression calculée ligne par ligne sur une table. |
Trois mesures sur un modèle de ventes
Le modèle relie une table Ventes (Date, Quantité, PrixUnitaire, Montant) à Produits et à une table Calendrier. Les mesures de base sont CA = SUM(Ventes[Montant]) et une mesure [Marge].
La date de la dernière vente
Dernière vente = MAX(Ventes[Date])
Dans un tableau par produit, chaque produit affiche la date de sa vente la plus récente. Sur une carte sans filtre, la mesure donne la dernière date de vente de tout le modèle.
La borne de fin de la période affichée
CA cumulé =
VAR Fin = MAX(Calendrier[Date])
RETURN
CALCULATE(
[CA],
FILTER(ALL(Calendrier), Calendrier[Date] <= Fin)
)
MAX(Calendrier[Date]) renvoie le dernier jour du mois, du trimestre ou de l’année affiché. La mesure additionne alors tout le chiffre d’affaires jusqu’à cette date ; ALL(Calendrier) libère le calcul du filtre de période posé par le visuel.
Le plus grand de deux résultats
Marge plancher = MAX([Marge], 0)
Quand la marge est négative, la mesure affiche 0 ; sinon elle affiche la marge. C’est la seconde forme de MAX, avec deux expressions.
Deux erreurs fréquentes
La première : donner un calcul à MAX. La formule MAX(Ventes[Quantité] * Ventes[PrixUnitaire]) est refusée, parce que la première forme de MAX attend une colonne, pas une expression. Pour le maximum d’un calcul ligne par ligne, la bonne fonction est MAXX :
Plus grosse ligne = MAXX(Ventes, Ventes[Quantité] * Ventes[PrixUnitaire])
La seconde : oublier qu’un vide vaut 0 dans la comparaison de deux expressions. On compare l’écart de cette année à celui de l’an dernier avec MAX([Écart], [Écart N-1]). Pour un produit nouveau, l’an dernier est vide ; si l’écart de l’année est négatif, la mesure affiche 0 au lieu de l’écart réel. Testez le vide avec ISBLANK avant de comparer quand ce cas peut se présenter.
Ce qu’on nous demande sur MAX
Quelle différence entre MAX, MAXA et MAXX ?
MAX renvoie le maximum d’une colonne ou de deux expressions. MAXA renvoie le maximum d’une colonne en comptant TRUE pour 1 et FALSE pour 0. MAXX évalue une expression pour chaque ligne d’une table et renvoie la plus grande valeur obtenue.
MAX fonctionne-t-elle sur une colonne de texte ?
Oui. La documentation de MAXA renvoie d’ailleurs vers MAX pour comparer des valeurs de texte. En revanche, MAX ne prend pas en charge les valeurs TRUE et FALSE : pour une colonne logique, il faut MAXA.
Pourquoi MAX renvoie-t-elle 0 alors qu’aucune valeur ne vaut 0 ?
Parce qu’avec deux expressions, une valeur vide est traitée comme 0. MAX(-1, BLANK()) renvoie donc 0. Si les deux expressions sont vides, MAX renvoie une valeur vide.
Peut-on écrire un calcul à l’intérieur de MAX ?
Pas dans la forme à une colonne, qui attend une référence de colonne. Pour le maximum d’un calcul fait ligne par ligne, on utilise MAXX avec la table et l’expression.
Pour aller plus loin
- Calculer un cumul en DAX, où MAX fixe la borne de fin.
EDATE: une période glissante construite à partir de MAX.- Créer un calendrier dynamique.
- La référence complète Power Query et DAX.
Vos indicateurs affichent des zéros que personne n’explique ?
Nous relisons vos mesures DAX pour repérer les valeurs vides traitées comme des zéros et les comparaisons qui faussent les totaux.