Dans l'analyse de données, la fonction MOYENNE standard est un outil de base, mais elle présente une faiblesse significative : elle est très sensible aux distorsions causées par les valeurs aberrantes. Une seule valeur extrême, qu'elle soit élevée ou faible, peut fausser l'ensemble du résultat, représentant de manière incorrecte la véritable tendance centrale des données.
\ C'est là que la moyenne tronquée devient essentielle. Elle fournit une mesure plus robuste de la moyenne en excluant un pourcentage spécifié des valeurs les plus petites et les plus grandes du calcul.
\ Bien que les modèles Power BI modernes disposent d'une fonction TRIMMEAN intégrée, cette fonction est souvent indisponible lors de l'utilisation d'une connexion en direct à un ancien modèle Analysis Services (SSAS). Cet article fournit un modèle DAX manuel robuste qui reproduit cette fonctionnalité et reste entièrement dynamique, répondant à tous les segments et filtres de votre rapport.
Cette mesure calcule une moyenne tronquée de 20 % en supprimant les 10 % inférieurs et les 10 % supérieurs des valeurs avant de calculer la moyenne des 80 % restants.
\ Vous pouvez coller ce code directement dans la barre de formule "Nouvelle mesure".
Trimmed Mean (20%) = VAR TargetTable = 'FactTable' VAR TargetColumn = 'FactTable'[MeasureColumn] VAR LowerPercentile = 0.10 // Définit les 10 % inférieurs à tronquer VAR UpperPercentile = 0.90 // Définit les 10 % supérieurs à tronquer (1.0 - 0.10) // 1. Trouver la valeur au 10e percentile VAR MinThreshold = PERCENTILEX.INC( FILTER( TargetTable, NOT( ISBLANK( TargetColumn ) ) ), TargetColumn, LowerPercentile ) // 2. Trouver la valeur au 90e percentile VAR MaxThreshold = PERCENTILEX.INC( FILTER( TargetTable, NOT( ISBLANK( TargetColumn ) ) ), TargetColumn, UpperPercentile ) // 3. Calculer la moyenne, en incluant uniquement les valeurs entre les seuils RETURN CALCULATE( AVERAGEX( FILTER( TargetTable, TargetColumn >= MinThreshold && TargetColumn <= MaxThreshold ), TargetColumn ) )
Cette formule fonctionne en trois étapes distinctes, toutes exécutées dans le contexte de filtre actuel (par exemple, quels que soient les segments sélectionnés par l'utilisateur).
TargetTable & TargetColumn : Nous attribuons les noms de table et de colonne à des variables pour un code propre et réutilisable. Vous devez modifier 'FactTable'[MeasureColumn] pour correspondre à votre modèle de données.LowerPercentile / UpperPercentile : Nous définissons les limites. 0.10 et 0.90 signifient que nous tronquons les 10 % inférieurs et les 10 % supérieurs. Pour tronquer 5 % de chaque extrémité (une troncature totale de 10 %), vous utiliseriez 0.05 et 0.95.MinThreshold & MaxThreshold : Ces variables stockent les valeurs réelles qui correspondent à nos limites de percentile.PERCENTILEX.INC : Nous utilisons cette fonction "itérateur" car elle nous permet de filtrer d'abord la table.MinThreshold contient la valeur du 10e percentile (par exemple, 4.5) et MaxThreshold contient la valeur du 90e percentile (par exemple, 88.2) pour les données actuellement visibles.RETURN CALCULATE(...) : La fonction CALCULATE est la clé pour rendre la mesure dynamique. Elle garantit que l'ensemble du calcul respecte les filtres appliqués par les segments ou les visuels du rapport.AVERAGEX(FILTER(...)) : Le cœur du calcul. Nous utilisons AVERAGEX pour itérer sur une table.FILTER(...) : Nous filtrons notre TargetTable une dernière fois. Ce filtre est la "troncature". Il ne conserve que les lignes où la valeur dans TargetColumn est :AVERAGEX(..., TargetColumn) : AVERAGEX calcule ensuite la moyenne simple de TargetColumn pour uniquement les lignes qui ont passé le filtre.En implémentant ce modèle DAX, vous créez un KPI robuste, dynamique et résistant aux valeurs aberrantes. Cette mesure fournit une image plus précise de la tendance centrale de vos données et se recalculera correctement à la volée lorsque les utilisateurs interagissent avec votre rapport Power BI.
Merci d'avoir pris le temps d'explorer avec moi des informations liées aux données. J'apprécie votre engagement. Si vous trouvez ces informations utiles, je vous invite à me suivre ou à me contacter sur LinkedIn ou X(@Luca_DataTeam). Bonne exploration !👋


