Operadores DAX

A linguagem DAX (Data Analysis Expression) usa operadores para criar expressões que comparam valores, executam cálculos aritméticos ou trabalham com cadeias de caracteres.

Tipos de operadores

Há quatro tipos diferentes de operadores de cálculo: aritmético, comparação, concatenação de texto e lógico.

Operadores aritméticos

Para executar operações matemáticas básicas, como adição, subtração ou multiplicação; combinar números; e produzir resultados numéricos, use os operadores aritméticos a seguir.

Operador aritmético Significado Exemplo
+ (sinal de adição) Adição 3+3
– (sinal de subtração) Subtração ou sinal 3–1–1
* (asterisco) Multiplicação 3*3
/ (barra) Divisão 3/3
^ (sinal de interpolação) Exponenciação 16^4

Observação

O sinal de adição pode funcionar como um operador binário e como um operador unário. Um operador binário requer números em ambos os lados do operador e executa a adição. Quando você usa valores em uma fórmula DAX em ambos os lados do operador binário, o DAX tentará converter os valores em tipos de dados numéricos, se eles ainda não forem números. Por outro lado, o operador unário pode ser aplicado a qualquer tipo de argumento. O símbolo de adição não afeta o tipo nem o valor e é simplesmente ignorado, enquanto o operador de subtração cria um valor negativo, se aplicado a um valor numérico.

Operadores de comparação

Você pode comparar dois valores com os operadores a seguir. Quando dois valores são comparados usando estes operadores, o resultado é um valor lógico, TRUE ou FALSE.

Operador de comparação Significado Exemplo
= Igual a [Região] = "EUA"
== Estrito igual a [Região] == "EUA"
> Maior que [Data de vendas] > "Jan 2009"
< Menor que [Data de vendas] < "1º Jan 2009"
>= Maior ou igual a [Quantidade] >= 20000
<= Menor ou igual a [Quantidade] <= 100
<> Diferente de [Região] <> "EUA"

Todos os operadores de comparação, exceto ==, tratam BLANK como igual ao número 0, cadeia de caracteres vazia "", DATE(1899, 12, 30) ou FALSE. Como resultado, [Column] = 0 será true quando o valor de [Column] for 0 ou BLANK. Por outro lado, [Column] == 0 é true somente quando o valor de [Column] é 0.

Operador de concatenação de texto

Use o E comercial (&) para unir ou concatenar duas ou mais cadeias de texto para produzir uma só parte do texto.

Operador de texto Significado Exemplo
& (e comercial) Conecta ou concatena dois valores para produzir um valor de texto contínuo [Region] & ", " & [City]

Operadores lógicos

Use operadores lógicos (&&) e (||) para combinar expressões para produzir um só resultado.

Operador de texto Significado Exemplos
&& (E comercial duplo) Cria uma condição AND entre duas expressões que têm um resultado booliano. Se ambas as expressões retornarem TRUE, a combinação das expressões também retornará TRUE; caso contrário, a combinação retornará FALSE. ([Region] = "France") && ([BikeBuyer] = "yes"))
|| (barra vertical dupla) Cria uma condição OR entre duas expressões lógicas. Se uma das expressões retornar TRUE, o resultado será TRUE; somente quando as duas expressões são FALSE o resultado é FALSE. (([Region] = "France") || ([BikeBuyer] = "yes"))
IN Cria uma condição OR lógica entre cada linha sendo comparada a uma tabela. Observação: a sintaxe do construtor de tabela usa chaves. 'Produto'[Cor] IN { "Vermelho", "Azul", "Preto" }

Operadores e ordem de precedência

Em alguns casos, a ordem na qual o cálculo é executado pode afetar o valor retornado. Portanto, é importante entender como o pedido é determinado e como você pode alterar a ordem para obter os resultados desejados.

Ordem de cálculo

Uma expressão avalia os operadores e valores em uma ordem específica. Todas as expressões sempre começam com um sinal de igual (=). O sinal de igual indica que os caracteres seguintes constituem uma expressão.

Após o sinal de igual, estão os elementos a serem calculados (os operandos), que são separados por operadores de cálculo. As expressões sempre são lidas da esquerda para a direita, mas a ordem na qual os elementos são agrupados pode ser controlada em algum grau usando parênteses.

Precedência do operador

Se você combinar vários operadores em uma única fórmula, as operações serão ordenadas conforme a tabela a seguir. Se os operadores tiverem um valor de precedência igual, eles serão ordenados da esquerda para a direita. Por exemplo, se uma expressão contiver tanto um operador de multiplicação quanto um de divisão, eles serão avaliados na ordem em que aparecem na expressão, da esquerda para a direita.

Operador Descrição
^ Exponenciação
Sinal (como em –1)
* e / Multiplicação e divisão
+ e – Adição e subtração
& Conecta duas cadeias de caracteres de texto (concatenação)
=,==,<,>,<=,>=,<>,IN Comparação
NOT NOT (operador unário)

Usando parênteses para controlar a ordem de cálculo

Para alterar a ordem de avaliação, você deve incluir entre parênteses a parte da fórmula que deve ser calculada primeiro. Por exemplo, a fórmula a seguir produz 11 porque a multiplicação é calculada antes da adição. A fórmula multiplica 2 por 3 e, em seguida, adiciona 5 ao resultado.

=5+2*3  

Por outro lado, se você usar parênteses para alterar a sintaxe, a ordem será alterada para que 5 e 2 sejam adicionados juntos e o resultado seja multiplicado por 3 para produzir 21.

=(5+2)*3  

No exemplo a seguir, os parênteses em torno da primeira parte da fórmula forçam o cálculo a avaliar a expressão (3 + 0.25) primeiro e, em seguida, dividir o resultado pelo resultado da expressão (3 - 0.25).

=(3 + 0.25)/(3 - 0.25)  

No exemplo a seguir, o operador de exponenciação é aplicado primeiro, de acordo com as regras de precedência para operadores e, em seguida, o operador de sinalização é aplicado. O resultado dessa expressão é -4.

=-2^2  

Para garantir que o operador de sinalização seja aplicado primeiro ao valor numérico, você pode usar parênteses para controlar operadores, conforme mostrado no exemplo a seguir. O resultado dessa expressão é 4.

= (-2)^2  

Compatibilidade

O DAX manipula e compara facilmente vários tipos de dados, assim como o Microsoft Excel. No entanto, o mecanismo de computação subjacente é baseado no SQL Server Analysis Services e fornece recursos avançados adicionais de um armazenamento de dados relacional, incluindo suporte mais avançado para tipos de data e hora. Portanto, em alguns casos, os resultados de cálculos ou o comportamento das funções podem não ser os mesmos do Excel. Além disso, o DAX dá suporte a mais tipos de dados do que o Excel. Esta seção descreve as principais diferenças.

Coerção de tipos de dados de operandos

Em geral, os dois operandos nos lados esquerdo e direito de qualquer operador devem ser do mesmo tipo de dados. No entanto, se os tipos de dados forem diferentes, o DAX os converterá em um tipo de dados comum para aplicar o operador em alguns casos:

  1. Os dois operandos são convertidos no maior tipo de dados comum possível.
  2. O operador é aplicado, se possível.

Por exemplo, suponha que você tenha dois números que deseja combinar. Um número resulta de uma fórmula, como =[Price] * .20, e o resultado pode conter muitas casas decimais. O outro número é um inteiro que foi fornecido como um valor de cadeia de caracteres.

Nesse caso, o DAX converterá os números em números reais em um formato numérico, usando o maior formato numérico que pode armazenar os dois tipos de números. Em seguida, o DAX aplicará a multiplicação.

Dependendo da combinação de tipo de dados, a coerção de tipo poderá não ser aplicada a operações de comparação. Para ver uma lista de tipos de dados compatíveis com o DAX, confira Tipos de dados compatíveis em modelos tabulares e Tipos de dados no Power BI Desktop.

Inteiro, Número Real, Moeda, Data/Hora e Em Branco são considerados numéricos para fins de comparação. Em branco é avaliado como zero ao executar uma comparação. As combinações de tipo de dados a seguir têm suporte para operações de comparação.

Tipo de Dados do Lado Esquerdo Tipo de Dados do Lado Direito
Numérica Numérica
Booliano Boolean
String Cadeia de caracteres

Outras comparações mistas de tipo de dados retornarão um erro. Por exemplo, uma fórmula como ="1" > 0 retorna um erro informando que operações de comparação DAX não dão suporte a valores de comparação do tipo texto com valores do tipo inteiro.

Tipos de Dados usados no DAX Tipos de Dados usados no Excel
Números (I8, R8) Números (R8)
Cadeia de caracteres Cadeia de caracteres
Booliano Booliano
DateTime Variante
Moeda Moeda

Diferenças na ordem de precedência

A ordem de precedência das operações em fórmulas DAX é basicamente a mesma usada pelo Microsoft Excel, mas não há suporte para alguns operadores do Excel, como a porcentagem. Além disso, não há suporte para intervalos.

Portanto, sempre que você copiar e colar fórmulas do Excel, examine-as com cuidado, pois alguns operadores ou elementos nas fórmulas podem não ser válidos. Quando há alguma dúvida sobre a ordem na qual as operações são executadas, recomenda-se usar parênteses para controlar a ordem das operações e remover qualquer ambiguidade sobre o resultado.

Sintaxe do DAX
Nomenclatura de parâmetro do DAX