(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como calcular desvio padrão ponderado em DAX: passo a passo

João Barros 06 de October de 2026 3 min de leitura

Calcular o desvio padrão ponderado em DAX permite avaliar a dispersão de uma variável quando cada observação tem um peso diferente — por exemplo, preços com volumes de vendas distintos ou avaliações com diferentes números de respostas. Utilizar pesos torna a medida mais representativa: uma observação com grande volume deve influenciar mais a média e a dispersão do que uma observação com peso insignificante. Esta técnica evita enviesamentos causados por tratar todas as observações como igualmente relevantes.

Pré-requisitos

  • Power BI Desktop ou outra ferramenta que suporte DAX.
  • Tabela de factos com colunas: Value (valor a analisar) e Weight (peso, ex.: quantidade ou vendas). Exemplo mínimo: 6–10 linhas de amostra para testar.
  • Tabela de datas ou contexto temporal opcional para aplicar filtros por mês/ano.

Recomendações práticas: garanta que os pesos são não-negativos (pesos negativos requerem interpretação estatística específica) e que não existam muitos valores em branco. Se a tabela tiver milhões de linhas, teste em amostra antes de aplicar a lógica ao conjunto de dados completo.

Passo 1: Entender a fórmula do desvio padrão ponderado

Antes de escrever DAX, compreenda a fórmula matemática. Para observações xi com pesos wi, a média ponderada é:

weighted_mean = (Σ wi * xi) / (Σ wi)

A variância ponderada (populacional) é normalmente definida como:

weighted_variance = (Σ wi * (xi - weighted_mean)^2) / (Σ wi)

Se precisares de uma correcção amostral (equivalente ao n-1), ajusta o denominador — por exemplo, (Σ wi - 1) — mas isto pode ser controverso quando os pesos não são contagens inteiras. Em análise de negócio muitos relatórios usam a versão populacional porque os pesos representam totais observados (ex.: unidades vendidas) e não amostras aleatórias.

Passo 2: Criar a medida da média ponderada

Cria primeiro a média ponderada pois é necessária na variância. Supondo tabela Sales com Value e Weight, a medida é:

Weighted Mean =
VAR SumWeights = SUM(Sales[Weight])
VAR SumWeightedValues = SUMX(Sales, Sales[Value] * Sales[Weight])
RETURN
DIVIDE(SumWeightedValues, SumWeights)

Exemplo concreto: se tiveres três linhas com (Value, Weight) = (10,1), (20,2), (30,3), então SumWeightedValues = 10*1 + 20*2 + 30*3 = 140 e SumWeights = 6, resultando em Weighted Mean = 23.3333. Usa DIVIDE para evitar erros se SumWeights for zero.

Passo 3: Calcular a variância ponderada

Com a média ponderada disponível, calcula a variância fazendo SUMX das diferenças ao quadrado ponderadas por Weight e divide pela soma dos pesos. A medida populacional em DAX é:

Weighted Variance =
VAR Mean = [Weighted Mean]
VAR SumWeights = SUM(Sales[Weight])
VAR SumWeightedSq =
    SUMX(
        Sales,
        Sales[Weight] * (Sales[Value] - Mean) * (Sales[Value] - Mean)
    )
RETURN
IF(SumWeights = 0, BLANK(), DIVIDE(SumWeightedSq, SumWeights))

Voltando ao exemplo: as diferenças ao quadrado ponderadas seriam ≈ 177.78, 22.22 e 133.33; soma ≈ 333.33; dividindo por 6 obténs variance ≈ 55.5556.

Passo 4: Criar a medida do desvio padrão ponderado

A medida do desvio padrão é a raiz quadrada da variância ponderada. Em DAX:

Weighted StdDev =
VAR Var = [Weighted Variance]
RETURN
IF(ISBLANK(Var), BLANK(), SQRT(Var))

No exemplo, SQRT(55.5556) ≈ 7.4536. Este valor indica a dispersão média das observações quando cada uma é ponderada pelo respetivo peso.

Passo 5: Ajuste para amostra (opcional)

Se precisares de uma correcção amostral, podes usar:

Weighted Variance Sample =
VAR Mean = [Weighted Mean]
VAR SumWeights = SUM(Sales[Weight])
VAR SumWeightedSq =
    SUMX(Sales, Sales[Weight] * (Sales[Value] - Mean) * (Sales[Value] - Mean))
RETURN
IF(SumWeights <= 1, BLANK(), DIVIDE(SumWeightedSq, SumWeights - 1))

Esta abordagem funciona bem quando os pesos representam contagens inteiras. Se os pesos forem ponderações contínuas, considera a interpretação estatística antes de subtrair 1. Em conjuntos de dados grandes, a diferença entre usar Σ wi ou Σ wi - 1 é frequentemente pequena.

Verificar o resultado

Para validar as medidas: 1) cria uma tabela visual com Value, Weight e as medidas [Weighted Mean] e [Weighted StdDev]; 2) calcula manualmente para um pequeno conjunto (como o exemplo de três linhas acima) ou utiliza Excel/Python para duplicar o cálculo (em Python: numpy.average com weights e cálculo manual da variância); 3) testa filtros/contextos (por produto, por mês) e verifica se as medidas respondem correctamente.

Dica prática: copia 10–20 linhas para um ficheiro Excel e calcula a média e desvio com fórmulas manuais para comparar. Se obtiveres divergências, confirma se existem pesos nulos, valores em branco ou linhas duplicadas introduzidas pelas relações entre tabelas.

Conclusão

Com estas medidas tens uma forma robusta de calcular desvio padrão ponderado em DAX, adequada a vários cenários de negócio. Próximos passos sensatos: testar performance em tabelas grandes (SUMX é iterador — para milhões de linhas considera fazer agregações pré-calculadas), documentar a interpretação dos pesos e decidir entre versão populacional ou amostral. Verifica sempre divisões por zero e testa com filtros variados para garantir o comportamento esperado em relatórios.