Na análise de dados, a função AVERAGE padrão é um instrumento fundamental, mas tem uma fraqueza significativa: é altamente suscetível a distorções causadas por valores atípicos. Um único valor extremo, seja alto ou baixo, pode distorcer todo o resultado, deturpando a verdadeira tendência central dos dados.
\ É aqui que a média truncada se torna essencial. Fornece uma medida mais robusta da média ao excluir um percentual especificado dos valores mais pequenos e maiores do cálculo.
\ Embora os modelos modernos do Power BI tenham uma função TRIMMEAN integrada, esta função está frequentemente indisponível ao usar uma Ligação em Direto a um modelo Analysis Services (SSAS) mais antigo. Este artigo fornece um padrão DAX manual robusto que replica esta funcionalidade e permanece totalmente dinâmico, respondendo a todos os segmentadores de dados e filtros no seu relatório.
Esta medida calcula uma média truncada de 20% removendo os 10% inferiores e os 10% superiores dos valores antes de calcular a média dos restantes 80%.
\ Pode colar este código diretamente na barra de fórmulas "Nova Medida".
Trimmed Mean (20%) = VAR TargetTable = 'FactTable' VAR TargetColumn = 'FactTable'[MeasureColumn] VAR LowerPercentile = 0.10 // Define os 10% inferiores a aparar VAR UpperPercentile = 0.90 // Define os 10% superiores a aparar (1.0 - 0.10) // 1. Encontrar o valor no 10º percentil VAR MinThreshold = PERCENTILEX.INC( FILTER( TargetTable, NOT( ISBLANK( TargetColumn ) ) ), TargetColumn, LowerPercentile ) // 2. Encontrar o valor no 90º percentil VAR MaxThreshold = PERCENTILEX.INC( FILTER( TargetTable, NOT( ISBLANK( TargetColumn ) ) ), TargetColumn, UpperPercentile ) // 3. Calcular a média, incluindo apenas valores entre os limiares RETURN CALCULATE( AVERAGEX( FILTER( TargetTable, TargetColumn >= MinThreshold && TargetColumn <= MaxThreshold ), TargetColumn ) )
Esta fórmula funciona em três etapas distintas, todas executadas dentro do contexto de filtro atual (por exemplo, quaisquer segmentadores de dados que o utilizador tenha selecionado).
TargetTable & TargetColumn: Atribuímos os nomes da tabela e coluna a variáveis para código limpo e reutilizável. Deve alterar 'FactTable'[MeasureColumn] para corresponder ao seu modelo de dados.LowerPercentile / UpperPercentile: Definimos os limites. 0.10 e 0.90 significam que estamos a aparar os 10% inferiores e os 10% superiores. Para aparar 5% de cada extremidade (um corte total de 10%), usaria 0.05 e 0.95.MinThreshold & MaxThreshold: Estas variáveis armazenam os valores reais que correspondem aos nossos limites de percentil.PERCENTILEX.INC: Usamos esta função "iteradora" porque nos permite primeiro FILTRAR a tabela.MinThreshold contém o valor do 10º percentil (por exemplo, 4.5) e MaxThreshold contém o valor do 90º percentil (por exemplo, 88.2) para os dados atualmente visíveis.RETURN CALCULATE(...): A função CALCULATE é a chave para tornar a medida dinâmica. Garante que todo o cálculo respeita os filtros aplicados por quaisquer segmentadores de dados ou elementos visuais no relatório.AVERAGEX(FILTER(...)): O núcleo do cálculo. Usamos AVERAGEX para iterar sobre uma tabela.FILTER(...): Filtramos a nossa TargetTable uma última vez. Este filtro é o "corte". Mantém apenas as linhas onde o valor em TargetColumn é:AVERAGEX(..., TargetColumn): AVERAGEX calcula então a média simples de TargetColumn apenas para as linhas que passaram o filtro.Ao implementar este padrão DAX, cria um KPI robusto, dinâmico e resistente a valores atípicos. Esta medida fornece uma imagem mais precisa da tendência central dos seus dados e será corretamente recalculada em tempo real à medida que os utilizadores interagem com o seu relatório Power BI.
Obrigado por dedicar o seu tempo a explorar insights relacionados com dados comigo. Agradeço o seu envolvimento. Se achar esta informação útil, convido-o a seguir-me ou a conectar-se comigo no LinkedIn ou X(@Luca_DataTeam). Boas explorações!👋


