Como usar DIVIDE em DAX para evitar a divisão por zero
Ao criar medidas como a margem de lucro, a taxa de conversão ou o ticket médio, divide-se constantemente um valor por outro. O problema aparece quando o denominador é zero ou está em branco: com o operador /, o Power BI devolve um erro ou o valor Infinity, que estraga o visual. A função DIVIDE em DAX foi feita para resolver isto e evitar qualquer erro de divisão por zero, e é uma das primeiras boas práticas que qualquer autor de relatórios deve dominar.
Pré-requisitos
- Power BI Desktop instalado (o mesmo se aplica ao Power Pivot no Excel ou ao Microsoft Fabric).
- Um modelo com uma tabela de valores numéricos. No exemplo usamos uma tabela
Vendascom as colunasReceitaeCusto. - Saber criar uma medida: clique com o botão direito na tabela e escolha Nova medida.
Passo 1: Perceber o problema da divisão por zero
Imagine que quer calcular a margem, dividindo o lucro pela receita. Uma medida direta com o operador / ficaria assim:
Margem sem DIVIDE = ( SUM(Vendas[Receita]) - SUM(Vendas[Custo]) ) / SUM(Vendas[Receita])
Enquanto houver receita, o cálculo funciona. Mas basta existir uma linha em que a receita seja 0 ou esteja em branco — um produto novo, um mês sem vendas — para o resultado se transformar num erro ou em Infinity. Numa matriz, essa célula fica com um aviso e passa uma imagem pouco profissional do relatório.
Passo 2: Conhecer a sintaxe da função DIVIDE
A DIVIDE foi criada precisamente para tratar estes casos. A sintaxe tem três argumentos, sendo o último opcional:
DIVIDE( <numerador>, <denominador> [, <resultado_alternativo>] )
Quando o denominador é 0 ou BLANK, a DIVIDE não gera qualquer erro: devolve o resultado alternativo. Se não indicar nenhum, o valor devolvido por defeito é BLANK. O numerador e o denominador podem ser colunas, medidas ou expressões completas.
Passo 3: Criar a medida com DIVIDE
Vamos reescrever a margem de forma segura. Para o exemplo ficar legível, criamos primeiro duas medidas de apoio:
Total Receita = SUM(Vendas[Receita])
Total Custo = SUM(Vendas[Custo])
Agora a margem, já com DIVIDE em DAX:
Margem % =
DIVIDE(
[Total Receita] - [Total Custo],
[Total Receita]
)
Sempre que a receita for 0 ou estiver em branco, a medida devolve BLANK em vez de rebentar com um erro. Só falta formatar a medida como percentagem, no separador Ferramentas de medida, e já a pode usar em qualquer visual.
Passo 4: Escolher o resultado alternativo
Às vezes queremos mostrar um número em vez de uma célula vazia — por exemplo, um 0 quando ainda não existem vendas. Basta preencher o terceiro argumento:
Margem % com zero =
DIVIDE(
[Total Receita] - [Total Custo],
[Total Receita],
0
)
A escolha depende do objetivo. Deixe BLANK (sem o terceiro argumento) quando quiser que os visuais escondam automaticamente as linhas sem dados. Use 0 quando precisar mesmo de um número, por exemplo para ordenar uma tabela ou para reaproveitar o valor noutro cálculo.
Passo 5: DIVIDE em vez do operador "/"
A diferença resume-se a duas linhas:
- O operador
/devolve um erro ou Infinity quando o denominador é 0. - A
DIVIDEdeteta esse caso e devolve o resultado alternativo, sem erros.
Por isso, a recomendação da Microsoft é usar DIVIDE sempre que exista a mínima hipótese de o denominador ser zero ou nulo. Na prática, isso significa quase todos os rácios de um relatório real.
Verificar o resultado
Coloque uma matriz no relatório com os produtos nas linhas e a medida Margem % nos valores. Garanta que existe pelo menos um produto sem receita. Se comparar as duas versões, a medida com / mostra um erro ou Infinity nessa linha, enquanto a medida com DIVIDE mostra uma célula vazia (ou 0, se usou o terceiro argumento). Se não aparecer nenhum aviso de erro, o cálculo ficou correto.
Conclusão
Com a DIVIDE passa a ter medidas robustas para qualquer indicador que envolva um rácio — margem, taxa de conversão, ticket médio ou ROI — sem se preocupar com denominadores a zero. O próximo passo é rever as suas medidas antigas e substituir os operadores / por DIVIDE onde fizer sentido. Fica uma dica final: prefira deixar o resultado como BLANK quando quiser que os gráficos ignorem sozinhos as linhas sem dados. Já sabe quais das suas medidas vai corrigir primeiro?