fx

DAX

Tipos de Dados DAX

Tipos de dados do modelo e do DAX (inteiro, decimal, decimal fixo, data/hora, texto, BLANK e outros), conversão implícita, precisão e armadilhas.

10 tipos de dados

  • Binário (Binary)

    Dado binário (arquivo, imagem). Só existe no Power Query.

    Boas práticas: ❗ Não é suportado no modelo: carregar coluna Binary pode dar erro, inclusive no gateway. Converta para outro tipo ou remova a coluna como último passo da consulta. Para imagem, use uma coluna de texto com a URL e a categoria de dados URL da imagem.

  • BLANK

    Representa e substitui o NULL do SQL, a célula vazia e o valor ausente. Criado com BLANK() e testado com ISBLANK().

    Boas práticas: Nas comparações vale 0, "" ou FALSE, conforme o outro lado; só == o distingue de zero. BLANK() + 5 = 5, mas BLANK() * 5 = BLANK e 5 / BLANK() = Infinity. Em medida, prefira devolver BLANK a 0: os visuais ocultam grupos em branco.

  • Data/hora (Date/time · DateTime)

    Data e hora guardadas como número decimal: a parte inteira é o dia e a fração é a hora, em múltiplos de 1/300 de segundo. Aceita anos de 1900 a 9999. Os tipos Data e Hora do Power Query entram no modelo como Data/hora.

    Boas práticas: Formatar a coluna como Data ou Hora não muda o valor guardado: relacionamentos e cálculos continuam usando a hora. Para relacionar com o calendário, converta para Data no Power Query. O modelo não guarda fuso horário.

  • Número decimal (Decimal number · Double)

    Ponto flutuante de 64 bits (IEEE 754), o tipo numérico mais comum. Vai de ±2,23E-308 a ±1,79E+308, com até 15 dígitos de precisão. O valor guardado é aproximado.

    Boas práticas: ⚠️ Pode dar resultado inesperado em =, >, <, em RANKX e em somas grandes com valores positivos e negativos. Para dinheiro e métricas que exigem exatidão, prefira Número decimal fixo ou Número inteiro, ou arredonde com ROUND. A regra do Best Practice Analyzer "Do not use floating point data types" sinaliza este tipo.

  • Número decimal fixo (Fixed decimal number · Decimal)

    Sempre 4 casas decimais e até 19 dígitos; vai até ±922.337.203.685.477,5807. Equivale ao DECIMAL(19,4) do SQL Server e ao Currency do Analysis Services e do Power Pivot. Casas além da 4ª são truncadas.

    Boas práticas: Tipo indicado para valores monetários e métricas em que o arredondamento acumulado do Número decimal causaria diferença. No TMDL e no TOM aparece como decimal.

  • Número inteiro (Whole number · Int64)

    Inteiro de 64 bits, sem casas decimais. Vai de -9.223.372.036.854.775.807 a 9.223.372.036.854.775.806 (19 dígitos).

    Boas práticas: Use em chaves, códigos, contagens e anos. Não tem erro de arredondamento. ⚠️ Os visuais só mostram com exatidão até 9.007.199.254.740.991 (2^53-1); acima disso, reduza o número antes de exibir.

  • Tabela (Table)

    Tipo usado por funções que recebem ou devolvem tabela, como FILTER, VALUES, SUMMARIZECOLUMNS e as de inteligência de tempo.

    Boas práticas: Algumas funções aceitam qualquer expressão de tabela; outras exigem uma tabela base do modelo. Confira na referência de cada função.

  • Texto (Text · String)

    Cadeia Unicode de letras, números ou datas em formato de texto. Limite prático de cerca de 32.000 caracteres.

    Boas práticas: O motor não diferencia maiúsculas de minúsculas e guarda a primeira grafia que encontra ("TAINA HASU" pode virar "Taina Hasu"). Remove espaço no fim, mas não no começo — use Text.Trim no Power Query para não criar duplicatas e quebrar relacionamentos. Em DirectQuery com fonte que diferencia maiúsculas, padronize a grafia na origem.

  • Variante (Variant)

    Tipo de uma expressão que pode devolver tipos diferentes, como uma medida com IF ou SWITCH cujos ramos retornam número e texto.

    Boas práticas: Mantenha os ramos da expressão com o mesmo tipo de retorno: fica mais fácil formatar a medida e prever o resultado.

  • Verdadeiro/falso (True/false · Boolean)

    Valor lógico TRUE ou FALSE. Em conta, TRUE vale 1: TRUE + 1 = 2.

    Boas práticas: ⚠️ Defina a coluna como Verdadeiro/falso no Power Query. Carregada como Any ou Texto, ela aparece certa no Desktop mas vira -1 e 0 depois da atualização no Service.

Conversões e armadilhas dos tipos de dados

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/Fuso HorárioData/horaO fuso é descartado; o valor não se ajusta ao local de quem abre o relatório
DataData/horaFração zero
HoraData/horaParte inteira zero
DuraçãoNúmero decimalEm dias fracionários; soma e subtrai de Data/hora corretamente
PercentualNú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:

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.

⚠️ A documentação da Microsoft diverge sobre texto × 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:
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