Conversões e armadilhas dos tipos de dados

DAX

1. Do Power Query para o modelo

Alguns tipos do Power Query não existem no modelo e mudam ao carregar.

Tipo no Power QueryTipo no modeloObservação
Data/Hora/ZonaData/horaO fuso é descartado; o valor não se ajusta ao local de quem abre o relatório
DataData (guardada como Data/hora, hora zero)Fração zero
HoraHora (guardada como Data/hora)Parte inteira zero
DuraçãoNúmero decimalEm dias fracionários; soma e subtrai de Data/hora corretamente
PorcentagemNúmero decimalO Power Query só aplica máscara de percentual; formate como percentual no modelo
Binário—Não é suportado no modelo: converta ou remova
Any (sem tipo)TextoDefina o tipo antes de carregar

Defina o tipo no Power Query (Table.TransformColumnTypes) ou em Ferramentas de coluna › Tipo de dados.

2. Conversão implícita nas contas

Quando os dois lados de uma operação têm tipos diferentes, o DAX converte os dois para um tipo comum antes de calcular.

Adição (+)

InteiroDecimal fixoDecimalData/hora
InteiroInteiroDecimal fixoDecimalData/hora
Decimal fixoDecimal fixoDecimal fixoDecimalData/hora
DecimalDecimalDecimalDecimalData/hora
Data/horaData/horaData/horaData/horaData/hora

Subtração (-) — linha = valor à esquerda; coluna = valor à direita

InteiroDecimal fixoDecimalData/hora
InteiroInteiroDecimal fixoDecimalDecimal
Decimal fixoDecimal fixoDecimal fixoDecimalDecimal
DecimalDecimalDecimalDecimalDecimal
Data/horaData/horaData/horaData/horaData/hora

Multiplicação (*)

InteiroDecimal fixoDecimalData/hora
InteiroInteiroDecimal fixoDecimalInteiro
Decimal fixoDecimal fixoDecimalDecimal fixoDecimal fixo
DecimalDecimalDecimal fixoDecimalDecimal

Divisão (/) — linha = numerador; coluna = denominador

InteiroDecimal fixoDecimalData/hora
InteiroDecimalDecimal fixoDecimalDecimal
Decimal fixoDecimal fixoDecimalDecimal fixoDecimal
DecimalDecimalDecimalDecimalDecimal
Data/horaDecimalDecimalDecimalDecimal

Exemplos documentados:

DAX
TRUE + 1     -- 2: TRUE vira 1
"22" + 22    -- 44: o texto numérico vira número
12 & 34      -- "1234": os números viram texto

3. Conversão nas comparações

  • Número e data/hora são comparáveis entre si.
  • BLANK vale 0, "" ou FALSE, conforme o outro lado (só == não faz isso).
  • O DAX não converte texto nem lógico em comparação.

Atenção A documentação da Microsoft diverge sobre texto Não número. A página de tipos de dados do Power BI diz que "12" > 12 devolve verdadeiro (texto seria "maior" que número) e que "12" = 12 devolve falso. A referência de operadores diz que "1" > 0 dá erro. Não dependa de nenhum dos dois comportamentos: converta explicitamente com VALUE() ou FORMAT() antes de comparar.

4. Precisão do Número decimal

O Número decimal (Double) guarda um valor aproximado (IEEE 754, até 15 dígitos). Isso aparece em três situações:

  • Igualdade e ordenação: =, >, <, >=, <= podem falhar entre valores que parecem iguais.
  • RANKX: calcula o valor duas vezes e pode ranquear errado por uma diferença invisível.
  • Somas grandes com valores positivos e negativos: o resultado depende da ordem das linhas.

Como evitar:

  • Mude a coluna para Número decimal fixo ou Número inteiro.
  • Ou arredonde antes de comparar ou ranquear:
DAX
Ranking de Clientes =
RANKX (
    ALL ( Cliente[Nome do Cliente] ),
    ROUND ( [Total de Vendas], 2 )
)

O Best Practice Analyzer sinaliza colunas Double com a regra "Do not use floating point data types" (veja Boas Práticas).

Para BLANK em contas e comparações, veja Operadores DAX.

Fontes

Conhecer a trilha Power BI ao vivo