Sintaxe do DAX

Este artigo descreve a sintaxe e os requisitos para a linguagem de expressão de fórmula DAX.

Requisitos de sintaxe

Uma fórmula DAX sempre começa com um sinal de igual (=). Após o sinal de igual, você pode fornecer qualquer expressão que seja avaliada como um escalar ou uma expressão que possa ser convertida em um escalar. Elas incluem o seguinte:

  • Uma constante escalar ou expressão que usa um operador escalar (+,-,*,/,>=,...,&&, ...)

  • Referências a colunas ou tabelas. A linguagem DAX sempre usa tabelas e colunas como entradas para funções, nunca uma matriz ou um conjunto arbitrário de valores.

  • Operadores, constantes e valores fornecidos como parte de uma expressão.

  • O resultado de uma função e seus argumentos necessários. Algumas funções DAX retornam uma tabela, em vez de uma escala, devendo ser encapsuladas em uma função que avalia a tabela e retorna um escalar; a menos que a tabela seja uma única coluna, uma única tabela de linha, ela é tratada como um valor escalar.

    A maioria das funções DAX exige um ou mais argumentos, que podem incluir tabelas, colunas, expressões e valores. No entanto, algumas funções, como PI, não exigem argumentos, mas sempre exigem parênteses para indicar o argumento nulo. Por exemplo, você sempre deve digitar PI(), não PI. Você também pode aninhar funções em outras funções.

  • Expressões. Uma expressão pode conter qualquer um dos seguintes: operadores, constantes ou referências a colunas.

Por exemplo, as fórmulas a seguir são todas válidas.

Fórmula Resultado
= 3 3
= "Sales" Vendas
= 'Sales'[Amount] Se você usar essa fórmula na tabela Sales, obterá o valor da coluna Amount na tabela Sales da linha atual.
= (0.03 *[Amount])

=0.03 * [Amount]
Três por cento do valor na coluna Amount da tabela atual.

Embora essa fórmula possa ser usada para calcular um percentual, o resultado não é mostrado como um percentual, a menos que você aplique a formatação na tabela.
= PI() O valor da constante pi.

As fórmulas podem se comportar de maneira diferente dependendo de como são usadas. Você sempre deve estar atento ao contexto e a como os dados que você usa na fórmula estão relacionados a outros dados que podem ser usados no cálculo.

Requisitos de nomenclatura

Um modelo de dados geralmente contém várias tabelas. Juntas, as tabelas e suas colunas compõem um banco de dados armazenado no mecanismo analítico na memória (VertiPaq). Dentro desse banco de dados, todas as tabelas devem ter nomes exclusivos. Os nomes das colunas também devem ser exclusivos em cada tabela. Os nomes de objeto não diferenciam maiúsculas de minúsculas; por exemplo, os nomes SALES e Sales representariam a mesma tabela.

Cada coluna e medida que você adiciona a um modelo de dados existente deve pertencer a uma tabela específica. Você especifica a tabela que contém a coluna implicitamente, ao criar uma coluna calculada dentro de uma tabela, ou explicitamente, ao criar uma medida e especifica o nome da tabela em que a definição da medida deve ser armazenada.

Quando você usa uma tabela ou coluna como uma entrada para uma função, geralmente deve qualificar o nome da coluna. O nome totalmente qualificado de uma coluna é o nome da tabela, seguido pelo nome da coluna entre colchetes: por exemplo, 'U.S. Sales'[Products]. Um nome totalmente qualificado sempre é necessário quando você faz referência a uma coluna nos seguintes contextos:

  • Como um argumento para a função, VALUES

  • Como um argumento para as funções, ALL ou ALLEXCEPT

  • Em um argumento de filtro para as funções, CALCULATE ou CALCULATETABLE

  • Como um argumento para a função, RELATEDTABLE

  • Como um argumento para qualquer função de inteligência de tempo

Um nome de coluna não qualificado é apenas o nome da coluna entre colchetes: por exemplo, [Sales Amount]. Por exemplo, ao fazer referência a um valor escalar da mesma linha da tabela atual, você pode usar o nome de coluna não qualificado.

Se um nome de tabela contiver espaços, palavras-chave reservadas ou caracteres não permitidos, você precisará colocar o nome da tabela entre aspas simples. Você também deverá colocar os nomes de tabela entre aspas se o nome contiver quaisquer caracteres fora do conjunto de caracteres alfanuméricos ANSI, independentemente de sua localidade dar ou não suporte ao conjunto de caracteres. Por exemplo, se você abrir uma pasta de trabalho que contém nomes de tabela escritos em caracteres cirílicos, como 'Таблица', o nome da tabela deverá ser colocado entre aspas, mesmo que não contenha espaços.

Observação

Para facilitar a inserção dos nomes totalmente qualificados das colunas, use o recurso de Preenchimento Automático no editor de fórmulas.

Tabelas

  • Os nomes de tabela são necessários sempre que a coluna for de uma tabela diferente da tabela atual. Os nomes de tabela devem ser exclusivos no banco de dados.

  • Os nomes de tabela deverão ser colocados entre aspas simples se contiverem espaços, outros caracteres especiais ou quaisquer caracteres alfanuméricos que não estejam em inglês.

Medidas

  • Os nomes de medidas sempre devem estar entre colchetes.

  • Os nomes de medidas podem conter espaços.

  • Cada nome de medida deve ser exclusivo dentro de um modelo. Portanto, o nome da tabela é opcional na frente de um nome de medida ao referenciar uma medida existente. No entanto, ao criar uma medida, você sempre deve especificar uma tabela na qual a definição da medida será armazenada.

Colunas

Os nomes de coluna devem ser exclusivos no contexto de uma tabela; no entanto, várias tabelas podem ter colunas com os mesmos nomes (a ambiguidade vem com o nome da tabela).

Em geral, as colunas podem ser referenciadas sem referenciar a tabela base à qual pertencem, exceto quando houver um conflito de nome para resolver ou com determinadas funções que exigem que os nomes de coluna sejam totalmente qualificados.

Palavras-chave reservadas

Se o nome usado para uma tabela for o mesmo que uma palavra-chave reservada do Analysis Services, um erro será gerado e você deverá renomear a tabela. No entanto, você poderá usar palavras-chave em nomes de objeto se o nome do objeto estiver entre colchetes (para colunas) ou aspas (para tabelas).

Observação

As aspas podem ser representadas por vários caracteres diferentes, dependendo do aplicativo. Se você colar fórmulas de um documento externo ou página da Web, verifique o código ASCII do caractere usado para abrir e fechar as aspas para garantir que elas sejam as mesmas. Caso contrário, o DAX poderá não conseguir reconhecer os símbolos como aspas, tornando a referência inválida.

Caracteres especiais

Os seguintes caracteres e tipos de caracteres não são válidos nos nomes de tabelas, colunas ou medidas:

  • Espaços à esquerda ou à direita; a menos que os espaços estejam entre delimitadores de nome, colchetes ou apóstrofos únicos.

  • Caracteres de controle

  • Os caracteres a seguir não são válidos nos nomes de objetos:

    .,;':/\*|?&%$!+=()[]{}<>

Exemplos de nomes de objeto

A tabela a seguir mostra exemplos de alguns nomes de objeto:

Tipos de objeto Exemplos Comentário
Nome da tabela Vendas Se o nome da tabela não contiver espaços ou outros caracteres especiais, o nome não precisará ser colocado entre aspas.
Nome da tabela 'Canada Sales' Se o nome contiver espaços, tabulações ou outros caracteres especiais, coloque o nome entre aspas simples.
Nome da coluna totalmente qualificado Sales[Amount] O nome da tabela precede o nome da coluna e o nome da coluna é colocado entre colchetes.
Nome de medida totalmente qualificado Sales[Profit] O nome da tabela precede o nome da medida e o nome da medida é colocado entre colchetes. Em determinados contextos, um nome totalmente qualificado sempre é necessário.
Nome de coluna não qualificado [Amount] O nome não qualificado é apenas o nome da coluna entre colchetes. Contextos em que você pode usar o nome não qualificado incluem fórmulas em uma coluna calculada dentro da mesma tabela ou em uma função de agregação que está sendo verificada na mesma tabela.
Coluna totalmente qualificada na tabela com espaços 'Canada Sales'[Qty] O nome da tabela contém espaços, portanto, deve estar entre aspas simples.

Outras restrições

A sintaxe necessária para cada função e o tipo de operação que ela pode executar varia muito conforme a função. Porém, as regras a seguir geralmente se aplicam a todas as fórmulas e expressões:

  • Fórmulas e expressões DAX não podem modificar nem inserir valores individuais em tabelas.

  • Não é possível criar linhas calculadas usando DAX. Você pode criar apenas as colunas e medidas calculadas.

  • Ao definir colunas calculadas, você pode aninhar funções em qualquer nível.

  • O DAX tem várias funções que retornam uma tabela. Normalmente, você usa os valores retornados por essas funções como entrada para outras funções, que exigem uma tabela como entrada.

Operadores e constantes DAX

A tabela a seguir lista os operadores que têm suporte no DAX. Para obter mais informações sobre a sintaxe de operadores individuais, confira Operadores DAX.

Tipo de operador Símbolo e uso
Operador de parênteses () ordem de precedência e agrupamento de argumentos
Operadores aritméticos + (adição)

- (subtração/

sinal)

* (multiplicação)

/ (divisão)

^ (exponenciação)
Operadores de comparação = (igual a)

> (maior que)

< (menor que)

>= (maior ou igual a)

<= (menor ou igual a)

<> (Diferente de)
Operador de concatenação de texto & (concatenação)
Operadores lógicos && (e)

|| (ou)

Tipos de dados

Você não precisa converter nem especificar de outra forma o tipo de dados de uma coluna ou valor que você usa em uma fórmula DAX. Quando você usa dados em uma fórmula DAX, o DAX identifica automaticamente os tipos de dados em colunas referenciadas e os valores que você digita e executa conversões implícitas, quando necessário, para concluir a operação especificada.

Por exemplo, se você tentar adicionar um número a um valor de data, o mecanismo interpretará a operação no contexto da função e converterá os números em um tipo de dados comum e, em seguida, apresentará o resultado no formato pretendido, uma data.

No entanto, há algumas limitações nos valores que podem ser convertidos com êxito. Se um valor ou uma coluna tiver um tipo de dados incompatível com a operação atual, o DAX retornará um erro. Além disso, o DAX não fornece funções que permitem que você altere ou converta explicitamente o tipo de dados existentes que você importou em um modelo de dados.

Importante

O DAX não dá suporte ao uso do tipo de dados de variante. Portanto, quando você carrega ou importa dados em um modelo de dados, os dados em cada coluna geralmente devem ser todos de um tipo de dados consistente.

Algumas funções retornam valores escalares, incluindo cadeias de caracteres, enquanto outras funções funcionam com números, tanto inteiros quanto reais, ou datas e horas. O tipo de dados necessário para cada função é descrito na seção Funções DAX.

Você pode usar tabelas que contêm várias colunas e várias linhas de dados como o argumento para uma função. Algumas funções também retornam tabelas, que são armazenadas na memória e podem ser usadas como argumentos para outras funções.

Data e Hora

O DAX armazena valores de data e hora usando o tipo de dados datetime usado pelo Microsoft SQL Server. O formato datetime usa um número de ponto flutuante em que os valores de Data correspondem à parte inteira que representa o número de dias desde 30 de dezembro de 1899. Os valores de hora correspondem à parte decimal de um valor de data em que Horas, minutos e segundos são representados por frações decimais de um dia. As funções de data e hora DAX convertem implicitamente argumentos em tipo de dados datetime.

Observação

O valor exato máximo de DataTime com suporte no DAX é 31 de dezembro, 9999 00:00:00.

Literal de data e hora

Começando com a versão de agosto de 2021 do Power BI Desktop, os valores de data e datetime do DAX poderão ser especificados como um literal nos formatos dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss" ou dt"YYYY-MM-DD hh:mm:ss". Quando especificado como um literal, não é necessário usar as funções DATE, TIME, DATEVALUE, TIMEVALUE na expressão.

Por exemplo, a expressão a seguir usa funções DATE e TIME para o filtro OrderDate:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

A mesma expressão de filtro pode ser especificada como um literal:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Observação

O formato literal de data e datetime de DAX não tem suporte em todas as versões do Power BI Desktop, Analysis Services e Power Pivot no Excel. Funcionalidades DAX novas e atualizadas geralmente são introduzidas primeiro no Power BI Desktop e, posteriormente, incluídas no Analysis Services e no Power Pivot no Excel.