top of page
Rechercher

AVERAGEX dans Power BI : la moyenne ligne à ligne en DAX

Groupe Kronoscope
3 sept.
4 min de lecture

En DAX, la fonction AVERAGEX calcule la moyenne d'une expression evaluee ligne a ligne.

Elle parcourt une table, applique votre formule sur chaque ligne, puis fait la moyenne des resultats.


Exemple :

Trois commandes : 10 × 5 €, 2 × 20 €, 1 × 50 €.

Montant calcule sur chaque ligne : 50 €, 40 €, 50 €.

AVERAGEX = ( 50 + 40 + 50 ) / 3 = 46,67 €


Attention : la moyenne des quantites multipliee par la moyenne des prix donne 108,33 €. Ce chiffre est faux.





Fonction AVERAGEX : syntaxe et valeur renvoyee

Syntaxe

AVERAGEX ( <table>, <expression> )


Le premier parametre : la table parcourue

Le premier argument est une table. Ce peut etre une table du modele.

Ce peut aussi etre une expression qui renvoie une table, comme VALUES ou FILTER.

Chaque ligne de cette table est parcourue une fois. Ce choix decide de ce que vous mesurez.


Le second parametre : l'expression evaluee

Le second argument est une expression scalaire. Elle est evaluee pour chaque ligne de la table.

AVERAGEX fait ensuite la moyenne arithmetique des valeurs obtenues. Les deux arguments sont obligatoires.

Les valeurs non numeriques et les cellules vides ne sont pas prises en compte.

La fonction renvoie un nombre decimal. Sans aucune ligne a agreger, elle renvoie BLANK.

S'il existe des lignes mais qu'aucune ne remplit le critere, elle renvoie 0. La documentation Microsoft le precise.



AVERAGE ou AVERAGEX : la regle de choix

La regle tient en deux phrases. La valeur existe deja dans une colonne ? Utilisez AVERAGE.

La valeur doit etre calculee avant d'etre moyennee ? Utilisez AVERAGEX.

Prix moyen =
AVERAGE ( Ventes[PrixUnitaire] )

Panier moyen =
AVERAGEX ( Ventes, Ventes[Quantite] * Ventes[PrixUnitaire] )

La premiere mesure moyenne un prix deja stocke. La seconde calcule d'abord un montant, ligne par ligne.

Une troisieme fonction existe : AVERAGEA. Elle accepte aussi le texte et les booleens.

VRAI compte pour 1. FAUX, le texte non numerique et le texte vide comptent pour 0.



La table iteree decide de ce que vous mesurez

Moyenne par ligne, par client ou par jour

Trois mesures, la meme donnee source, trois questions differentes.

Panier moyen =
AVERAGEX ( Ventes, Ventes[Quantite] * Ventes[PrixUnitaire] )

CA moyen par client =
AVERAGEX ( VALUES ( Clients[IDClient] ), [CA] )

CA moyen par jour =
AVERAGEX ( VALUES ( Calendrier[Date] ), [CA] )

Le denominateur change a chaque fois. Nombre de lignes, nombre de clients, nombre de jours.

Verifiez toujours ce denominateur avant de publier la mesure.


Iterer une mesure declenche la transition de contexte

Dans les deux dernieres mesures, [CA] est une mesure. Appelee dans un iterateur, elle declenche une transition de contexte.

La ligne en cours devient alors un filtre. [CA] est recalcule pour ce client, puis pour le suivant.

Sans cette transition, la mesure renverrait la meme valeur sur chaque ligne.



Les pieges d'AVERAGEX




Les lignes vides sortent du denominateur

AVERAGEX ignore les lignes dont l'expression renvoie une valeur vide.

Sur un CA moyen par jour, les journees sans vente disparaissent du calcul.

La moyenne monte alors mecaniquement. Le chiffre est juste pour la fonction, faux pour le metier.

Pour compter ces journees a zero, forcez une valeur numerique.

CA moyen par jour =
AVERAGEX (
    VALUES ( Calendrier[Date] ),
    [CA] + 0
)

Le + 0 transforme le vide en zero. Le denominateur reprend toutes les dates du contexte.


Vide ou zero : deux resultats differents

Un visuel masque les lignes dont la mesure est vide. Un zero, lui, reste affiche.

Ce detail change l'aspect de votre matrice, sans changer une seule donnee.

Bon a savoir

Une moyenne qui semble trop haute vient presque toujours du denominateur, jamais du numerateur.



Moyenne ponderee : AVERAGEX ne suffit pas

AVERAGEX donne le meme poids a chaque ligne de la table. Une moyenne ponderee demande autre chose.

Il faut une somme ponderee, divisee par la somme des poids.

Note moyenne ponderee =
DIVIDE (
    SUMX ( Notes, Notes[Note] * Notes[Coefficient] ),
    SUM ( Notes[Coefficient] )
)

SUMX cumule les produits. SUM cumule les coefficients. DIVIDE protege du zero au denominateur.

Le meme schema vaut pour un prix moyen pondere par les quantites vendues.

Prix moyen pondere =
DIVIDE (
    SUMX ( Ventes, Ventes[Quantite] * Ventes[PrixUnitaire] ),
    SUM ( Ventes[Quantite] )
)


Cout, limites et bonnes pratiques

AVERAGEX est un iterateur. Il evalue votre expression sur chaque ligne de la table.

Sur une table de faits volumineuse, la facture se paie en temps de calcul.

Reduisez la table iteree quand c'est possible. VALUES sur une colonne coute moins cher que la table entiere.

Ecrivez AVERAGEX dans une mesure, pas dans une colonne calculee.

Microsoft signale une limite. La fonction n'est pas prise en charge en mode DirectQuery dans les colonnes calculees et les regles de securite au niveau des lignes.

Le meme reflexe vaut pour les autres agregations. Voir notre fiche sur la fonction DISTINCTCOUNT.



Questions frequentes sur AVERAGEX

AVERAGEX peut-elle remplacer AVERAGE ?

Oui, le resultat est identique sur une simple colonne. Mais AVERAGE reste plus lisible et plus rapide.


Pourquoi ma moyenne change-t-elle selon le visuel ?

AVERAGEX respecte le contexte de filtre. Le mois, la zone ou le segment selectionne modifient la table parcourue.


Le total de ma matrice ne correspond pas a la moyenne des lignes.

C'est normal. Le total est recalcule sur l'ensemble des lignes, et non comme une moyenne de moyennes.


Comment exclure les valeurs a zero ?

Filtrez la table avant d'iterer, avec FILTER.

Montant moyen hors zero =
AVERAGEX (
    FILTER ( Ventes, Ventes[Montant] <> 0 ),
    Ventes[Montant]
)

Un doute sur une moyenne affichee dans votre rapport ? Profitez d'un rendez-vous telephonique offert.

 
 
bottom of page