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

Existem quatro tipos diferentes de operadores de cálculo: aritmética, comparação, concatenação de texto e lógica.

Operadores aritméticos

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

Operador aritmético Significado Exemplo
+ (sinal de adição) Adição 3+3
– (sinal de menos) Subtração ou sinal 3–1–1
* (asterisco) Multiplicação 3*3
/ (barra para a frente) Divisão 3/3
^ (acento circunflexo) Exponenciação 16^4

Nota

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 tenta converter os valores em tipos de dados numéricos se eles ainda não forem números. Em contraste, o operador unário pode ser aplicado a qualquer tipo de argumento. O símbolo de mais não afeta o tipo ou valor e é simplesmente ignorado, enquanto o operador menos 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 esses operadores, o resultado é um valor lógico, TRUE ou FALSE.

Operador de comparação Significado Exemplo
= Igual a [Região] = "EUA"
== Estritamente igual a [Região] == "EUA"
> Maior que [Data de venda] > "janeiro de 2009"
< Menor que [Data de venda] < "1 de janeiro de 2009"
>= Maior ou igual a [Montante] >= 20000
<= Menor ou igual a [Montante] <= 100
<> Diferente de [Região] <> "EUA"

Todos os operadores de comparação, exceto == tratam BLANK como igual ao número 0, string vazia "", DATE(1899, 12, 30) ou FALSE. Como resultado, [Column] = 0 será true quando o valor de [Column] for 0 ou BLANK. Em contraste, [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 única parte do texto.

Operador de texto Significado Exemplo
& (E comercial) Conecta ou concatena dois valores para produzir um valor de texto contínuo [Região] & ", " & [Cidade]

Operadores lógicos

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

Operador de texto Significado Exemplos
&& (duplo e comercial) Cria uma condição AND entre duas expressões que têm cada uma um resultado booleano. Se ambas as expressões devolverem VERDADEIRO, a combinação das expressões também devolverá VERDADEIRO. Caso contrário, a combinação devolverá FALSO. ([Região] = "França") && ([BikeBuyer] = "yes"))
|| (símbolo de tubo duplo) Cria uma condição OR entre duas expressões lógicas. Se qualquer uma das expressões retornar TRUE, o resultado será TRUE; somente quando ambas as expressões são FALSE é que o resultado é FALSE. (([Região] = "França") || ([BikeBuyer] = "sim"))
IN Cria uma condição OR lógica entre cada linha que está sendo comparada a uma tabela. Nota: a sintaxe do construtor da tabela usa chaves encaracoladas. 'Produto'[Cor] IN { "Vermelho", "Azul", "Preto" }

Operadores e ordem de precedência

Em alguns casos, a ordem em que o cálculo é realizado pode afetar o valor de retorno; Portanto, é importante entender como a ordem é determinada 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 começam sempre com um sinal de igual (=). O sinal de igual indica que os caracteres seguintes constituem uma expressão.

Seguindo 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 são sempre lidas da esquerda para a direita, mas a ordem em que os elementos são agrupados pode ser controlada até certo ponto usando parênteses.

Precedência dos operadores

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

Operator Description
^ 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, coloque 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 e o resultado 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 primeiro e, em seguida, dividem o resultado pelo resultado da expressão (3 + 0.25) , (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 sinal é aplicado. O resultado para esta expressão é -4.

=-2^2  

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

= (-2)^2  

Compatibilidade

O DAX lida e compara facilmente vários tipos de dados, muito parecido com 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 dos cálculos ou o comportamento das funções podem não ser os mesmos do Excel. Além disso, o DAX suporta 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. Ambos os operandos são convertidos para o 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á ambos os números em números reais em um formato numérico, usando o maior formato numérico que pode armazenar ambos os 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 pode não ser aplicada para operações de comparação. Para obter uma lista completa dos tipos de dados suportados pelo DAX, consulte Tipos de dados suportados em modelos tabulares e Tipos de dados no Power BI Desktop.

Inteiro, Número Real, Moeda, Data/hora e Branco são considerados numéricos para fins de comparação. Blank é avaliado a zero ao realizar uma comparação. As seguintes combinações de tipo de dados são suportadas para operações de comparação.

Tipo de dados do lado esquerdo Tipo de dados do lado direito
Numérico Numérico
Boolean Booleano
String String

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 as operações de comparação DAX não suportam a comparação de valores do tipo Text com valores do tipo Integer.

Tipos de dados usados no DAX Tipos de dados usados no Excel
Números (I8, R8) Números (R8)
String String
Boolean Boolean
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 alguns operadores do Excel não são suportados, como a porcentagem. Além disso, os intervalos não são suportados.

Portanto, sempre que você copiar e colar fórmulas do Excel, certifique-se de revisar a fórmula cuidadosamente, pois alguns operadores ou elementos nas fórmulas podem não ser válidos. Quando houver qualquer dúvida sobre a ordem em que as operações são realizadas, é recomendável usar parênteses para controlar a ordem das operações e remover qualquer ambiguidade sobre o resultado.

Sintaxe DAX
Nomenclatura de parâmetros DAX