Sintaxe 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 escalar ou uma expressão que possa ser convertida em escalar. Estes incluem:

  • 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 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 escalar e devem ser encapsuladas em uma função que avalia a tabela e retorna uma escalar; A menos que a tabela seja uma única coluna, uma única tabela de linhas, ela é tratada como um valor escalar.

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

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

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

Fórmula Result
= 3 3
= "Vendas" Vendas
= «Vendas»[Montante] Se você usar essa fórmula na tabela Vendas, obterá o valor da coluna Valor na tabela Vendas para a linha atual.
= (0,03 *[Montante])

=0,03 * [Montante]
Três por cento do valor na coluna Valor da tabela atual.

Embora esta fórmula possa ser utilizada para calcular uma percentagem, o resultado não é apresentado como uma percentagem, a menos que aplique formatação na tabela.
= PI() O valor da constante pi.

As fórmulas podem comportar-se de forma diferente dependendo da forma como são utilizadas. Você deve estar sempre ciente do contexto e de como os dados usados 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 de análise 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 dentro de cada tabela. Todos 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 adicionada a um modelo de dados existente deve pertencer a uma tabela específica. Você especifica a tabela que contém a coluna implicitamente, quando cria uma coluna calculada dentro de uma tabela, ou explicitamente, quando cria uma medida e especifica o nome da tabela onde a definição de medida deve ser armazenada.

Quando você usa uma tabela ou coluna como 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, 'Vendas nos EUA'[Produtos]. Um nome totalmente qualificado é sempre necessário quando você faz referência a uma coluna nos seguintes contextos:

  • Como argumento para a função, VALORES

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

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

  • Como argumento para a função, RELATEDTABLE

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

Um nome de coluna não qualificado é apenas o nome da coluna, entre parênteses: por exemplo, [Valor das vendas]. Por exemplo, quando você está fazendo referência a um valor escalar da mesma linha da tabela atual, você pode usar o nome da coluna não qualificada.

Se o nome de uma tabela contiver espaços, palavras-chave reservadas ou caracteres não permitidos, você deverá colocar o nome da tabela entre aspas simples. Você também deve colocar nomes de tabela entre aspas se o nome contiver caracteres fora do intervalo de caracteres alfanuméricos ANSI, independentemente de sua localidade suportar o conjunto de caracteres ou não. Por exemplo, se você abrir uma pasta de trabalho que contenha 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.

Nota

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

Tabelas

  • Os nomes de tabela são necessários sempre que a coluna é de uma tabela diferente da tabela atual. Os nomes das tabelas devem ser exclusivos dentro do banco de dados.

  • Os nomes das tabelas devem ser colocados entre aspas simples se contiverem espaços, outros caracteres especiais ou quaisquer caracteres alfanuméricos não ingleses.

Medições

  • Os nomes das medidas devem estar sempre entre parênteses.

  • Os nomes das 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 fazer referência a uma medida existente. No entanto, ao criar uma medida, você sempre deve especificar uma tabela onde a definição de medida será armazenada.

Colunas

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

Em geral, as colunas podem ser referenciadas sem fazer referência à tabela base a que pertencem, exceto quando pode haver um conflito de nomes para resolver ou com determinadas funções que exigem que os nomes das colunas 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ê pode usar palavras-chave em nomes de objetos se o nome do objeto estiver entre colchetes (para colunas) ou aspas (para tabelas).

Nota

As aspas podem ser representadas por vários caracteres diferentes, dependendo da aplicação. 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 aspas, para garantir que elas sejam as mesmas. Caso contrário, o DAX pode não conseguir reconhecer os símbolos como aspas, tornando a referência inválida.

Carateres especiais

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

  • Espaços à frente ou à direita; a menos que os espaços sejam delimitados por delimitadores de nome, colchetes ou apóstrofos únicos.

  • Caracteres de controlo

  • Os seguintes caracteres que não são válidos nos nomes de objetos:

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

Exemplos de nomes de objetos

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

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 'Vendas no Canadá' Se o nome contiver espaços, tabulações ou outros caracteres especiais, coloque o nome entre aspas simples.
Nome da coluna totalmente qualificado Vendas[Montante] O nome da tabela precede o nome da coluna e o nome da coluna é colocado entre parênteses.
Nome da medida totalmente qualificado Vendas[Lucro] O nome da tabela precede o nome da medida e o nome da medida é colocado entre parênteses. Em determinados contextos, é sempre necessário um nome totalmente qualificado.
Nome da coluna não qualificado [Montante] O nome não qualificado é apenas o nome da coluna, entre parênteses. Os 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á verificando a mesma tabela.
Coluna totalmente qualificada na tabela com espaços «Vendas no Canadá»[Qtd] O nome da tabela contém espaços, por isso deve ser cercado por 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 dependendo da função. Em geral, no entanto, as seguintes regras aplicam-se a todas as fórmulas e expressões:

  • As fórmulas e expressões DAX não podem modificar ou inserir valores individuais em tabelas.

  • Não é possível criar linhas calculadas usando DAX. Você pode criar apenas 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 suportados pelo DAX. Para obter mais informações sobre a sintaxe de operadores individuais, consulte Operadores DAX.

Tipo de operador Símbolo e utilização
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)

< (menos que)

>= (maior ou igual a)

<= (inferior ou igual a)

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

|| ou)

Tipos de dados

Não é necessário transmitir, converter ou especificar 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 digitados 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, existem 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 alterar, converter ou converter explicitamente o tipo de dados de dados existentes que você importou para um modelo de dados.

Importante

O DAX não suporta o uso do tipo de dados variante. Portanto, quando você carrega ou importa dados para um modelo de dados, espera-se que os dados em cada coluna sejam geralmente de um tipo de dados consistente.

Algumas funções retornam valores escalares, incluindo cadeias de caracteres, enquanto outras funções trabalham com números, inteiros e números 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 contendo várias colunas e várias linhas de dados como 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 vírgula flutuante onde os valores Date correspondem à porção inteira que representa o número de dias desde 30 de dezembro de 1899. Os valores de tempo correspondem à parte decimal de um valor de data onde 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.

Nota

O valor máximo exato de DateTime suportado pelo DAX é 31 de dezembro de 9999 00:00:00.

Literal de data e hora

A partir da versão de agosto de 2021 do Power BI Desktop, os valores de data e data/hora do DAX podem ser especificados como literais no formato dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"ou dt"YYYY-MM-DD hh:mm:ss". Quando especificado como literal, o uso das funções DATE, TIME, DATEVALUE, TIMEVALUE na expressão não é necessário.

Por exemplo, a expressão a seguir usa as funções DATE e TIME para filtrar 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"
)

Nota

O formato literal digitado por data e data/hora DAX não é suportado em todas as versões do Power BI Desktop, Analysis Services e Power Pivot no Excel. Normalmente, a funcionalidade DAX nova e atualizada é introduzida primeiro no Power BI Desktop e, posteriormente, incluída no Analysis Services e no Power Pivot no Excel.