Visão geral do DAX

DAX (Data Analysis Expressions) é uma linguagem de expressão de fórmula usada no Analysis Services, Power BI e Power Pivot no Excel. As fórmulas DAX incluem funções, operadores e valores para executar cálculos avançados e consultas em dados em tabelas e colunas relacionadas em modelos de dados tabulares.

Este artigo fornece apenas uma introdução básica aos conceitos mais importantes do DAX. Ele descreve o DAX como ele se aplica a todos os produtos que o usam. Algumas funcionalidades podem não se aplicar a determinados produtos ou casos de uso. Consulte a documentação do seu produto descrevendo sua implementação específica do DAX.

Cálculos

As fórmulas DAX são usadas em medidas, colunas calculadas, tabelas calculadas e segurança em nível de linha.

Medições

As medidas são fórmulas de cálculo dinâmicas onde os resultados mudam dependendo do contexto. As medidas são usadas em relatórios que dão suporte à combinação e filtragem de dados de modelo usando vários atributos, como um relatório do Power BI ou Tabela Dinâmica ou Gráfico Dinâmico do Excel. As medidas são criadas usando a barra de fórmulas DAX no designer de modelo.

Uma fórmula em uma medida pode usar funções de agregação padrão criadas automaticamente usando o recurso Soma automática, como COUNT ou SUM, ou você pode definir sua própria fórmula usando a barra de fórmulas DAX. Medidas nomeadas podem ser passadas como argumento para outras medidas.

Quando você define uma fórmula para uma medida na barra de fórmulas, um recurso Dica de ferramenta mostra uma visualização de quais seriam os resultados para o total no contexto atual, mas, caso contrário, os resultados não são imediatamente gerados em qualquer lugar. A razão pela qual você não pode ver os resultados (filtrados) do cálculo imediatamente é porque o resultado de uma medida não pode ser determinado sem contexto. Para avaliar uma medida, é necessário um aplicativo cliente de relatório que possa fornecer o contexto necessário para recuperar os dados relevantes para cada célula e, em seguida, avaliar a expressão para cada célula. Esse cliente pode ser uma Tabela Dinâmica ou Gráfico Dinâmico do Excel, um relatório do Power BI ou uma expressão de tabela em uma consulta DAX no SQL Server Management Studio (SSMS).

Independentemente do cliente, uma consulta separada é executada para cada célula nos resultados. Ou seja, cada combinação de cabeçalhos de linha e coluna em uma Tabela Dinâmica, ou cada seleção de segmentações de dados e filtros em um relatório do Power BI, gera um subconjunto diferente de dados sobre o qual a medida é calculada. Por exemplo, usando esta fórmula de medida muito simples:

Total Sales = SUM([Sales Amount])

Quando um usuário coloca a medida TotalSales em um relatório e, em seguida, coloca a coluna Categoria de Produto de uma tabela Produto em Filtros, a soma do Valor de Vendas é calculada e exibida para cada categoria de produto.

Ao contrário das colunas calculadas, a sintaxe de uma medida inclui o nome da medida que precede a fórmula. No exemplo acabado de fornecer, o nome Total Sales aparece antes da fórmula. Depois de criar uma medida, o nome e sua definição aparecem na lista Campos do aplicativo cliente de relatório e, dependendo das perspetivas e funções, ficam disponíveis para todos os usuários do modelo.

Para saber mais, veja:
Medidas no Power BI Desktop
Medidas no Analysis Services
Medidas no Power Pivot

Colunas calculadas

Uma coluna calculada é uma coluna que você adiciona a uma tabela existente (no designer de modelo) e, em seguida, cria uma fórmula DAX que define os valores da coluna. Quando uma coluna calculada contém uma fórmula DAX válida, os valores são calculados para cada linha assim que a fórmula é inserida. Os valores são então armazenados no modelo de dados na memória. Por exemplo, numa tabela Data, quando a fórmula é introduzida na barra de fórmulas:

= [Calendar Year] & " Q" & [Calendar Quarter]

Um valor para cada linha da tabela é calculado tomando valores da coluna Ano Calendário (na mesma tabela Data), adicionando um espaço e a letra maiúscula Q e, em seguida, adicionando os valores da coluna Trimestre Calendário (na mesma tabela Data). O resultado para cada linha na coluna calculada é calculado imediatamente e aparece, por exemplo, como 1º trimestre de 2017. Os valores de coluna só serão recalculados se a tabela ou qualquer tabela relacionada for processada (atualização) ou se o modelo for descarregado da memória e, em seguida, recarregado, como ao fechar e reabrir um arquivo do Power BI Desktop.

Para saber mais, veja:
Colunas calculadas no Power BI Desktop
Colunas calculadas no Analysis Services
Colunas calculadas no Power Pivot.

Tabelas calculadas

Uma tabela calculada é um objeto calculado, baseado em uma expressão de fórmula, derivado de todas ou parte de outras tabelas no mesmo modelo. Em vez de consultar e carregar valores nas colunas da nova tabela a partir de uma fonte de dados, uma fórmula DAX define os valores da tabela.

As tabelas calculadas podem ser úteis numa dimensão de interpretação de papéis. Um exemplo é a tabela Date, como OrderDate, ShipDate ou DueDate, dependendo da relação de chave estrangeira. Ao criar uma tabela calculada para ShipDate explicitamente, você obtém uma tabela autônoma que está disponível para consultas, tão totalmente operável quanto qualquer outra tabela. As tabelas calculadas também são úteis ao configurar um conjunto de linhas filtrado ou um subconjunto ou superconjunto de colunas de outras tabelas existentes. Isso permite que você mantenha a tabela original intacta enquanto cria variações dessa tabela para oferecer suporte a cenários específicos.

As tabelas calculadas suportam relações com outras tabelas. As colunas na tabela calculada têm tipos de dados, formatação e podem pertencer a uma categoria de dados. As tabelas calculadas podem ser nomeadas e exibidas ou ocultas como qualquer outra tabela. As tabelas calculadas são recalculadas se qualquer uma das tabelas das quais extrai dados for atualizada ou atualizada.

Para saber mais, veja:
Tabelas calculadas no Power BI Desktop
Tabelas calculadas no Analysis Services.

Segurança ao nível da linha

Com segurança em nível de linha, uma fórmula DAX deve ser avaliada para uma condição booleana TRUE/FALSE, definindo quais linhas podem ser retornadas pelos resultados de uma consulta por membros de uma função específica. Por exemplo, para membros da função Vendas, a tabela Clientes com a seguinte fórmula DAX:

= Customers[Country] = "USA"

Os membros da função Vendas só poderão visualizar dados de clientes nos EUA, e agregados, como SOMA, serão devolvidos apenas para clientes nos EUA. A segurança em nível de linha não está disponível no Power Pivot no Excel.

Ao definir a segurança no nível da linha usando a fórmula DAX, você está criando um conjunto de linhas permitido. Isso não nega o acesso a outras linhas; em vez disso, eles simplesmente não são retornados como parte do conjunto de linhas permitido. Outras funções podem permitir o acesso às linhas excluídas pela fórmula DAX. Se um usuário for membro de outra função e a segurança em nível de linha dessa função permitir o acesso a esse conjunto de linhas específico, o usuário poderá exibir dados dessa linha.

As fórmulas de segurança em nível de linha aplicam-se às linhas especificadas, bem como às linhas relacionadas. Quando uma tabela tem várias relações, os filtros aplicam segurança para a relação que está ativa. As fórmulas de segurança em nível de linha serão interseccionadas com outras fórmulas definidas para tabelas relacionadas.

Para saber mais, veja:
Segurança ao nível da linha (RLS) com o Power BI
Funções no Analysis Services

Consultas

As consultas DAX podem ser criadas e executadas no SQL Server Management Studio (SSMS) e em ferramentas de código aberto como o DAX Studio (daxstudio.org). Ao contrário das fórmulas de cálculo DAX, que só podem ser criadas em modelos de dados tabulares, as consultas DAX também podem ser executadas em modelos multidimensionais do Analysis Services. As consultas DAX geralmente são mais fáceis de escrever e mais eficientes do que as consultas MDX (Multidimensional Data Expressions).

Uma consulta DAX é uma instrução, semelhante a uma instrução SELECT no T-SQL. O tipo mais básico de consulta DAX é uma instrução evaluation . Por exemplo,

EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

Devolve nos Resultados uma tabela que lista apenas os produtos com um SafetyStockLevel inferior a 200, por ordem crescente por EnglishProductName.

Você pode criar medidas como parte da consulta. As medidas existem apenas durante a duração da consulta. Para saber mais, consulte Consultas DAX.

Fórmulas

As fórmulas DAX são essenciais para criar cálculos em colunas e medidas calculadas e proteger seus dados usando segurança em nível de linha. Para criar fórmulas para colunas e medidas calculadas, use a barra de fórmulas na parte superior da janela do designer de modelo ou o Editor DAX. Para criar fórmulas para segurança em nível de linha, use a caixa de diálogo Gerenciador de Funções ou Gerenciar funções. As informações nesta seção destinam-se a ajudá-lo a começar a entender os conceitos básicos das fórmulas DAX.

Noções básicas sobre fórmulas

As fórmulas DAX podem ser muito simples ou bastante complexas. A tabela a seguir mostra alguns exemplos de fórmulas simples que podem ser usadas em uma coluna calculada.

Fórmula Definição
= TODAY() Insere a data de hoje em cada linha de uma coluna calculada.
= 3 Insere o valor 3 em cada linha de uma coluna calculada.
= [Column1] + [Column2] Adiciona os valores na mesma linha de [Coluna1] e [Coluna2] e coloca os resultados na coluna calculada da mesma linha.

Quer a fórmula criada seja simples ou complexa, pode utilizar os seguintes passos ao criar uma fórmula:

  1. Cada fórmula deve começar com um sinal de igual (=).

  2. Você pode digitar ou selecionar um nome de função ou digitar uma expressão.

  3. Comece a digitar as primeiras letras da função ou nome desejado e o Preenchimento Automático exibirá uma lista de funções, tabelas e colunas disponíveis. Prima TAB para adicionar um item da lista de Conclusão Automática à fórmula.

    Você também pode clicar no botão Fx para exibir uma lista de funções disponíveis. Para selecionar uma função na lista suspensa, use as teclas de seta para realçar o item e clique em OK para adicionar a função à fórmula.

  4. Forneça os argumentos para a função selecionando-os em uma lista suspensa de tabelas e colunas possíveis ou digitando valores.

  5. Verifique se há erros de sintaxe: verifique se todos os parênteses estão fechados e se as colunas, tabelas e valores estão referenciados corretamente.

  6. Prima ENTER para aceitar a fórmula.

Nota

Numa coluna calculada, assim que introduzir a fórmula e a fórmula for validada, a coluna é preenchida com valores. Em uma medida, pressionar ENTER salva a definição de medida com a tabela. Se uma fórmula for inválida, será apresentado um erro.

Neste exemplo, vamos examinar uma fórmula em uma medida chamada Dias no trimestre atual:

Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))

Esta medida é utilizada para criar um rácio de comparação entre um período incompleto e o período anterior. A fórmula deve ter em conta a proporção do período decorrido e compará-la com a mesma proporção do período anterior. Neste caso, [Dias do trimestre atual até a data]/[Dias no trimestre atual] dá a proporção decorrida no período atual.

Esta fórmula contém os seguintes elementos:

Elemento de fórmula Descrição
Days in Current Quarter O nome da medida.
= O sinal de igual (=) inicia a fórmula.
COUNTROWS COUNTROWS conta o número de linhas na tabela Date
() O parêntese aberto e de fechamento especifica os argumentos.
DATESBETWEEN A função DATESBETWEEN retorna as datas entre a última data para cada valor na coluna Data na tabela Data.
'Date' Especifica a tabela Data. As tabelas estão entre aspas simples.
[Date] Especifica a coluna Data na tabela Data. As colunas estão entre parênteses.
,
STARTOFQUARTER A função STARTOFQUARTER devolve a data do início do trimestre.
LASTDATE A função LASTDATE retorna a última data do trimestre.
'Date' Especifica a tabela Data.
[Date] Especifica a coluna Data na tabela Data.
,
ENDOFQUARTER A função ENDOFQUARTER
'Date' Especifica a tabela Data.
[Date] Especifica a coluna Data na tabela Data.

Usando o Preenchimento Automático de fórmulas

A Conclusão Automática ajuda-o a introduzir uma sintaxe de fórmula válida, fornecendo-lhe opções para cada elemento da fórmula.

  • Você pode usar o Preenchimento Automático de fórmulas no meio de uma fórmula existente com funções aninhadas. O texto imediatamente antes do ponto de inserção é usado para exibir valores na lista suspensa e todo o texto após o ponto de inserção permanece inalterado.

  • O Preenchimento Automático não adiciona o parêntese de fechamento das funções nem corresponde automaticamente aos parênteses. Você deve certificar-se de que cada função está sintaticamente correta ou você não pode salvar ou usar a fórmula.

Utilizar várias funções numa fórmula

Você pode aninhar funções, o que significa que você usa os resultados de uma função como um argumento de outra função. Você pode aninhar até 64 níveis de funções em colunas calculadas. No entanto, o aninhamento pode dificultar a criação ou a solução de problemas de fórmulas. Muitas funções são projetadas para serem usadas apenas como funções aninhadas. Essas funções retornam uma tabela, que não pode ser salva diretamente como resultado; ele deve ser fornecido como entrada para uma função de tabela. Por exemplo, as funções SUMX, AVERAGEX e MINX requerem uma tabela como primeiro argumento.

Funções

Uma função é uma fórmula nomeada dentro de uma expressão. A maioria das funções tem argumentos obrigatórios e opcionais, também conhecidos como parâmetros, como entrada. Quando a função é executada, um valor é retornado. O DAX inclui funções que você pode usar para executar cálculos usando datas e horas, criar valores condicionais, trabalhar com cadeias de caracteres, executar pesquisas com base em relacionamentos e a capacidade de iterar em uma tabela para executar cálculos recursivos. Se você estiver familiarizado com fórmulas do Excel, muitas dessas funções aparecerão muito semelhantes; no entanto, as fórmulas DAX são diferentes das seguintes maneiras importantes:

  • Uma função DAX sempre faz referência a uma coluna completa ou a uma tabela. Se pretender utilizar apenas valores específicos de uma tabela ou coluna, pode adicionar filtros à fórmula.

  • Se você precisar personalizar cálculos linha a linha, o DAX fornece funções que permitem usar o valor da linha atual ou um valor relacionado como um tipo de parâmetro para executar cálculos que variam de acordo com o contexto. Para entender como essas funções funcionam, consulte Contexto neste artigo.

  • O DAX inclui muitas funções que retornam uma tabela, em vez de um valor. A tabela não é exibida em um cliente de relatório, mas é usada para fornecer entrada para outras funções. Por exemplo, você pode recuperar uma tabela e, em seguida, contar os valores distintos nela ou calcular somas dinâmicas em tabelas ou colunas filtradas.

  • As funções DAX incluem uma variedade de funções de inteligência de tempo. Essas funções permitem definir ou selecionar intervalos de datas e executar cálculos dinâmicos com base nessas datas ou intervalo. Por exemplo, você pode comparar somas entre períodos paralelos.

Funções de agregação

As funções de agregação calculam um valor (escalar), como contagem, soma, média, mínimo ou máximo para todas as linhas de uma coluna ou tabela, conforme definido pela expressão. Para saber mais, consulte Funções de agregação.

Funções de data e hora

As funções de data e hora no DAX são semelhantes às funções de data e hora no Microsoft Excel. No entanto, as funções DAX são baseadas em um tipo de dados datetime a partir de 1º de março de 1900. Para saber mais, consulte Funções de data e hora.

Funções de filtro

As funções de filtro no DAX retornam tipos de dados específicos, pesquisam valores em contos relacionados e filtram por valores relacionados. As funções de pesquisa funcionam usando tabelas e relações, como um banco de dados. As funções de filtragem permitem manipular o contexto de dados para criar cálculos dinâmicos. Para saber mais, consulte Funções de filtro.

Funções financeiras

As funções financeiras no DAX são usadas em fórmulas que executam cálculos financeiros, como valor presente líquido e taxa de retorno. Essas funções são semelhantes às funções financeiras usadas no Microsoft Excel. Para saber mais, consulte Funções financeiras.

Funções de informação

Uma função de informação examina a célula ou linha fornecida como um argumento e informa se o valor corresponde ao tipo esperado. Por exemplo, a função ISERROR retornará TRUE se o valor que você referenciar contiver um erro. Para saber mais, consulte Funções de informação.

Funções lógicas

As funções lógicas atuam sobre uma expressão para retornar informações sobre os valores na expressão. Por exemplo, a função TRUE permite saber se uma expressão que você está avaliando retorna um valor TRUE. Para saber mais, consulte Funções lógicas.

Funções matemáticas e trigonométricas

As funções matemáticas no DAX são muito semelhantes às funções matemáticas e trigonométricas do Excel. Existem algumas pequenas diferenças nos tipos de dados numéricos usados pelas funções DAX. Para saber mais, consulte Funções matemáticas e trig.

Outras funções

Essas funções executam ações exclusivas que não podem ser definidas por nenhuma das categorias às quais a maioria das outras funções pertence. Para saber mais, consulte Outras funções.

Funções de relacionamento

As funções de relacionamento no DAX permitem que você retorne valores de outra tabela relacionada, especifique uma relação específica para usar em uma expressão e especifique a direção da filtragem cruzada. Para saber mais, consulte Funções de relacionamento.

Funções estatísticas

As funções estatísticas calculam valores relacionados a distribuições estatísticas e probabilidade, como desvio padrão e número de permutações. Para saber mais, consulte Funções estatísticas.

Funções de texto

As funções de texto no DAX são muito semelhantes às suas contrapartes no Excel. Você pode retornar parte de uma cadeia de caracteres, pesquisar texto dentro de uma cadeia de caracteres ou concatenar valores de cadeia de caracteres. O DAX também fornece funções para controlar os formatos de datas, horas e números. Para saber mais, consulte Funções de texto.

Funções de inteligência de tempo

As funções de inteligência de tempo fornecidas no DAX permitem criar cálculos que usam conhecimento interno sobre calendários e datas. Usando intervalos de tempo e data em combinação com agregações ou cálculos, você pode criar comparações significativas entre períodos de tempo comparáveis para vendas, estoque e assim por diante. Para saber mais, consulte Funções de inteligência de tempo (DAX).

Funções de manipulação de tabelas

Essas funções retornam uma tabela ou manipulam tabelas existentes. Por exemplo, usando ADDCOLUMNS, você pode adicionar colunas calculadas a uma tabela especificada ou pode retornar uma tabela de resumo sobre um conjunto de grupos com a função SUMMARIZECOLUMNS. Para saber mais, consulte Funções de manipulação de tabela.

Variáveis

Você pode criar variáveis dentro de uma expressão usando VAR. VAR tecnicamente não é uma função, é uma palavra-chave para armazenar o resultado de uma expressão como uma variável nomeada. Essa variável pode então ser passada como um argumento para outras expressões de medida. Por exemplo:

VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

Neste exemplo, TotalQty pode ser passado como uma variável nomeada para outras expressões. As variáveis podem ser de qualquer tipo de dados escalares, incluindo tabelas. Usar variáveis em suas fórmulas DAX pode ser incrivelmente poderoso.

Tipos de dados

Você pode importar dados para um modelo de muitas fontes de dados diferentes que podem oferecer suporte a diferentes tipos de dados. Quando você importa dados para um modelo, os dados são convertidos em um dos tipos de dados de modelo tabular. Quando os dados do modelo são usados em um cálculo, os dados são convertidos em um tipo de dados DAX para a duração e a saída do cálculo. Quando você cria uma fórmula DAX, os termos usados na fórmula determinarão automaticamente o tipo de dados de valor retornado.

O DAX suporta os seguintes tipos de dados:

Tipo de dados no modelo Tipo de dados no DAX Descrição
Número Inteiro Um valor inteiro de 64 bits (oito bytes) 1, 2 Números sem casas decimais. Números inteiros podem ser números positivos ou negativos, mas devem ser números inteiros entre -9.223.372.036.854.775.808 (-2^63) e 9.223.372.036.854.775.807 (2^63-1).
Número Decimal Um número real de 64 bits (oito bytes) 1, 2 Números reais são números que podem ter casas decimais. Os números reais abrangem uma vasta gama de valores:

Valores negativos de -1,79E +308 até -2,23E -308

Zero

Valores positivos de 2.23E -308 até 1.79E + 308

No entanto, o número de dígitos significativos é limitado a 17 dígitos decimais.
Boolean Boolean Um valor True ou False.
Texto String Uma cadeia de dados de caracteres Unicode. Podem ser cadeias de caracteres, números ou datas representadas em um formato de texto.
Data Data/hora Datas e horas em uma representação de data-hora aceita.

As datas válidas são todas as datas posteriores a 1 de março de 1900.
Moeda Moeda O tipo de dados de moeda permite valores entre -922.337.203.685.477.5808 a 922.337.203.685.477.5807 com quatro dígitos decimais de precisão fixa.
N/A Blank Um espaço em branco é um tipo de dados no DAX que representa e substitui nulos SQL. Você pode criar um espaço em branco usando a função BLANK e testar espaços em branco usando a função lógica, ISBLANK.

Os modelos de dados tabulares também incluem o tipo de dados Tabela como entrada ou saída para muitas funções DAX. Por exemplo, a função FILTER usa uma tabela como entrada e produz outra tabela que contém apenas as linhas que atendem às condições de filtro. Ao combinar funções de tabela com funções de agregação, você pode executar cálculos complexos em conjuntos de dados definidos dinamicamente.

Embora os tipos de dados normalmente sejam definidos automaticamente, é importante entender os tipos de dados e como eles se aplicam, em particular, às fórmulas DAX. Erros em fórmulas ou resultados inesperados, por exemplo, geralmente são causados pelo uso de um operador específico que não pode ser usado com um tipo de dados especificado em um argumento. Por exemplo, a fórmula, , = 1 & 2retorna um resultado de cadeia de caracteres de 12. A fórmula, no entanto, = "1" + "2"retorna um resultado inteiro de 3.

Contexto

O contexto é um conceito importante para entender ao criar fórmulas DAX. O contexto é o que permite executar a análise dinâmica, pois os resultados de uma fórmula mudam para refletir a seleção atual de linha ou célula e também quaisquer dados relacionados. Compreender o contexto e usar o contexto de forma eficaz são essenciais para criar análises dinâmicas de alto desempenho e para solucionar problemas em fórmulas.

As fórmulas em modelos tabulares podem ser avaliadas em um contexto diferente, dependendo de outros elementos de design:

  • Filtros aplicados em uma tabela dinâmica ou relatório
  • Filtros definidos dentro de uma fórmula
  • Relações especificadas usando funções especiais dentro de uma fórmula

Existem diferentes tipos de contexto: contexto de linha, contexto de consulta e contexto de filtro.

Contexto da linha

O contexto da linha pode ser considerado como "a linha atual". Se você criar uma fórmula em uma coluna calculada, o contexto de linha dessa fórmula incluirá os valores de todas as colunas na linha atual. Se a tabela estiver relacionada a outra tabela, o conteúdo também incluirá todos os valores da outra tabela relacionados à linha atual.

Por exemplo, suponha que você crie uma coluna calculada, , que soma valores de duas colunas, Frete e Imposto, = [Freight] + [Tax]da mesma tabela. Esta fórmula obtém automaticamente apenas os valores da linha atual nas colunas especificadas.

O contexto de linha também segue quaisquer relações que tenham sido definidas entre tabelas, incluindo relações definidas dentro de uma coluna calculada usando fórmulas DAX, para determinar quais linhas em tabelas relacionadas estão associadas à linha atual.

Por exemplo, a fórmula a seguir usa a função RELACIONADO para buscar um valor de imposto de uma tabela relacionada, com base na região para a qual o pedido foi enviado. O valor do imposto é determinado usando o valor para região na tabela atual, procurando a região na tabela relacionada e, em seguida, obtendo a taxa de imposto para essa região da tabela relacionada.

= [Freight] + RELATED('Region'[TaxRate])  

Esta fórmula obtém a taxa de imposto para a região atual da tabela Região e adiciona-a ao valor da coluna Frete. Em fórmulas DAX, você não precisa saber ou especificar a relação específica que conecta as tabelas.

Contexto de várias linhas

O DAX inclui funções que iteram cálculos em uma tabela. Essas funções podem ter várias linhas atuais, cada uma com seu próprio contexto de linha. Em essência, essas funções permitem criar fórmulas que executam operações recursivamente em um loop interno e externo.

Por exemplo, suponha que seu modelo contenha uma tabela Produtos e uma tabela Vendas. Os usuários podem querer percorrer toda a tabela de vendas, que está cheia de transações envolvendo vários produtos, e encontrar a maior quantidade encomendada para cada produto em qualquer transação.

Com o DAX, você pode criar uma única fórmula que retorna o valor correto, e os resultados são atualizados automaticamente sempre que um usuário adiciona dados às tabelas.

= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])  

Para obter um exemplo detalhado desta fórmula, consulte ANTERIORMENTE.

Para resumir, a função EARLIER armazena o contexto de linha da operação que precedeu a operação atual. Em todos os momentos, a função armazena na memória dois conjuntos de contexto: um conjunto de contexto representa a linha atual para o loop interno da fórmula e outro conjunto de contexto representa a linha atual para o loop externo da fórmula. O DAX alimenta automaticamente os valores entre os dois loops para que você possa criar agregações complexas.

Contexto da consulta

Contexto de consulta refere-se ao subconjunto de dados que é recuperado implicitamente para uma fórmula. Por exemplo, quando um usuário coloca uma medida ou campo em um relatório, o mecanismo examina cabeçalhos de linha e coluna, segmentações de dados e filtros de relatório para determinar o contexto. As consultas necessárias são executadas em relação aos dados do modelo para obter o subconjunto correto de dados, fazer os cálculos definidos pela fórmula e, em seguida, preencher os valores no relatório.

Como o contexto muda dependendo de onde você coloca a fórmula, os resultados da fórmula também podem mudar. Por exemplo, suponha que você crie uma fórmula que soma os valores na coluna Lucro da tabela Vendas: = SUM('Sales'[Profit]). Se utilizar esta fórmula numa coluna calculada dentro da tabela Sales, os resultados da fórmula serão os mesmos para toda a tabela, porque o contexto de consulta para a fórmula é sempre o conjunto de dados inteiro da tabela Sales. Os resultados terão lucro para todas as regiões, todos os produtos, todos os anos, e assim por diante.

No entanto, os usuários normalmente não querem ver o mesmo resultado centenas de vezes, mas querem obter o lucro de um determinado ano, um determinado país, um determinado produto ou alguma combinação destes, e então obter um total geral.

Em um relatório, o contexto é alterado filtrando, adicionando ou removendo campos e usando segmentações de dados. Para cada alteração, o contexto de consulta no qual a medida é avaliada. Portanto, a mesma fórmula, usada em uma medida, é avaliada em um contexto de consulta diferente para cada célula.

Contexto do filtro

Contexto de filtro é o conjunto de valores permitidos em cada coluna ou nos valores recuperados de uma tabela relacionada. Os filtros podem ser aplicados à coluna no designer ou na camada de apresentação (relatórios e Tabelas Dinâmicas). Os filtros também podem ser definidos explicitamente por expressões de filtro dentro da fórmula.

O contexto de filtro é adicionado quando você especifica restrições de filtro no conjunto de valores permitidos em uma coluna ou tabela, usando argumentos para uma fórmula. O contexto de filtro aplica-se a outros contextos, como contexto de linha ou contexto de consulta.

Em modelos tabulares, há muitas maneiras de criar contexto de filtro. No contexto de clientes que podem consumir o modelo, como relatórios do Power BI, os usuários podem criar filtros instantaneamente adicionando segmentações de dados ou filtros de relatório nos cabeçalhos de linha e coluna. Você também pode especificar expressões de filtro diretamente na fórmula, especificar valores relacionados, filtrar tabelas que são usadas como entradas ou obter dinamicamente contexto para os valores usados em cálculos. Você também pode limpar completamente ou limpar seletivamente os filtros em colunas específicas. Isso é muito útil ao criar fórmulas que calculam totais gerais.

Para saber mais sobre como criar filtros em fórmulas, consulte a Função FILTER (DAX).
Para obter um exemplo de como os filtros podem ser limpos para criar totais gerais, consulte a Função ALL (DAX).

Para obter exemplos de como limpar seletivamente e aplicar filtros em fórmulas, consulte ALLEXCEPT.

Determinar o contexto em fórmulas

Quando você cria uma fórmula DAX, a fórmula é primeiro testada para sintaxe válida e, em seguida, testada para garantir que os nomes das colunas e tabelas incluídas na fórmula possam ser encontrados no contexto atual. Se não for possível encontrar qualquer coluna ou tabela especificada pela fórmula, será retornado um erro.

O contexto durante as operações de validação (e recálculo) é determinado conforme descrito nas seções anteriores, usando as tabelas disponíveis no modelo, quaisquer relações entre as tabelas e quaisquer filtros que tenham sido aplicados.

Por exemplo, se você acabou de importar alguns dados para uma nova tabela e eles não estão relacionados a nenhuma outra tabela (e você não aplicou nenhum filtro), o contexto atual é todo o conjunto de colunas na tabela. Se a tabela estiver vinculada por relações a outras tabelas, o contexto atual incluirá as tabelas relacionadas. Se você adicionar uma coluna da tabela a um relatório que tenha Segmentações de Dados e talvez alguns filtros de relatório, o contexto da fórmula será o subconjunto de dados em cada célula do relatório.

O contexto é um conceito poderoso que também pode dificultar a solução de problemas de fórmulas. Recomendamos que você comece com fórmulas e relacionamentos simples para ver como o contexto funciona. A seção a seguir fornece alguns exemplos de como as fórmulas usam diferentes tipos de contexto para retornar resultados dinamicamente.

Operadores

A linguagem DAX usa quatro tipos diferentes de operadores de cálculo em fórmulas:

  • Operadores de comparação para comparar valores e retornar um valor lógico TRUE\FALSE.
  • Operadores aritméticos para executar cálculos aritméticos que retornam valores numéricos.
  • Operadores de concatenação de texto para unir duas ou mais cadeias de texto.
  • Operadores lógicos que combinam duas ou mais expressões para retornar um único resultado.

Para obter informações detalhadas sobre operadores usados em fórmulas DAX, consulte Operadores DAX.

Trabalhar com tabelas e colunas

As tabelas em modelos de dados tabulares parecem tabelas do Excel, mas são diferentes na forma como trabalham com dados e fórmulas:

  • As fórmulas funcionam apenas com tabelas e colunas, não com células individuais, referências de intervalo ou matrizes.
  • As fórmulas podem usar relações para obter valores de tabelas relacionadas. Os valores recuperados estão sempre relacionados ao valor da linha atual.
  • Você não pode ter dados irregulares ou "esfarrapados" como em uma planilha do Excel. Cada linha de uma tabela deve conter o mesmo número de colunas. No entanto, você pode ter valores vazios em algumas colunas. As tabelas de dados do Excel e as tabelas de dados de modelo tabular não são intercambiáveis.
  • Como um tipo de dados é definido para cada coluna, cada valor nessa coluna deve ser do mesmo tipo.

Referência a tabelas e colunas em fórmulas

Você pode fazer referência a qualquer tabela e coluna usando seu nome. Por exemplo, a fórmula a seguir ilustra como fazer referência a colunas de duas tabelas usando o nome totalmente qualificado :


= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])  

Quando uma fórmula é avaliada, o designer de modelo primeiro verifica a sintaxe geral e, em seguida, verifica os nomes das colunas e tabelas fornecidas em relação a possíveis colunas e tabelas no contexto atual. Se o nome for ambíguo ou se a coluna ou tabela não puder ser encontrada, você receberá um erro na fórmula (uma cadeia de caracteres #ERROR em vez de um valor de dados nas células onde o erro ocorre). Para saber mais sobre os requisitos de nomenclatura para tabelas, colunas e outros objetos, consulte Requisitos de nomenclatura na sintaxe DAX.

Relações entre tabelas

Ao criar relações entre tabelas, você ganha a capacidade de valores relacionados em outras tabelas a serem usados em cálculos. Por exemplo, você pode usar uma coluna calculada para determinar todos os registros de envio relacionados ao revendedor atual e, em seguida, somar os custos de envio de cada um. Em muitos casos, no entanto, um relacionamento pode não ser necessário. Você pode usar a função LOOKUPVALUE em uma fórmula para retornar o valor em result_columnName para a linha que atende aos critérios especificados nos argumentos search_column e search_value.

Muitas funções DAX exigem que exista uma relação entre as tabelas, ou entre várias tabelas, para localizar as colunas que você fez referência e retornar resultados que façam sentido. Outras funções tentarão identificar a relação; No entanto, para obter melhores resultados, deve sempre criar uma relação sempre que possível. Os modelos de dados tabulares suportam várias relações entre tabelas. Para evitar confusão ou resultados incorretos, apenas um relacionamento de cada vez é designado como o relacionamento ativo, mas você pode alterar o relacionamento ativo conforme necessário para percorrer diferentes conexões nos dados nos cálculos. A função USERELATIONSHIP pode ser usada para especificar uma ou mais relações a serem usadas em um cálculo específico.

É importante observar estas regras de design de fórmula ao usar relações:

  • Quando as tabelas são conectadas por uma relação, você deve garantir que as duas colunas usadas como chaves tenham valores correspondentes. A integridade referencial não é imposta, portanto, é possível ter valores não correspondentes em uma coluna de chave e ainda criar uma relação. Se isso acontecer, você deve estar ciente de que valores em branco ou valores não correspondentes podem afetar os resultados das fórmulas.

  • Ao vincular tabelas em seu modelo usando relações, você amplia o escopo, ou contexto, no qual suas fórmulas são avaliadas. Alterações no contexto resultantes da adição de novas tabelas, novos relacionamentos ou de alterações no relacionamento ativo podem fazer com que seus resultados mudem de maneiras que você pode não prever. Para saber mais, consulte Contexto neste artigo.

Processar e atualizar

Processo e recálculo são duas operações separadas, mas relacionadas. Você deve entender completamente esses conceitos ao projetar um modelo que contém fórmulas complexas, grandes quantidades de dados ou dados obtidos de fontes de dados externas.

Processo (atualização) é atualizar os dados em um modelo com novos dados de uma fonte de dados externa.

O recálculo é o processo de atualização dos resultados das fórmulas para refletir quaisquer alterações às próprias fórmulas e refletir as alterações nos dados subjacentes. O recálculo pode afetar o desempenho das seguintes maneiras:

  • Os valores em uma coluna calculada são calculados e armazenados no modelo. Para atualizar os valores na coluna calculada, você deve processar o modelo usando um dos três comandos de processamento – Processar Completo, Processar Dados ou Recalcar Processo. O resultado da fórmula deve ser sempre recalculado para toda a coluna, sempre que alterar a fórmula.

  • Os valores calculados por medidas são avaliados dinamicamente sempre que um utilizador adiciona a medida a uma Tabela Dinâmica ou abre um relatório; À medida que o usuário modifica o contexto, os valores retornados pela medida mudam. Os resultados da medida sempre refletem o que há de mais recente no cache na memória.

O processamento e o recálculo não têm efeito nas fórmulas de segurança em nível de linha, a menos que o resultado de um novo cálculo retorne um valor diferente, tornando a linha consultável ou não consultável pelos membros da função.

Atualizações

O DAX está constantemente sendo melhorado. Funções novas e atualizadas são lançadas com a próxima atualização disponível, que geralmente é mensal. Os serviços são atualizados primeiro, seguidos por aplicativos instalados como Power BI Desktop, Excel, SQL Server Management Studio (SSMS) e extensão de projeto do Analysis Services para Visual Studio (SSDT). O SQL Server Analysis Services é atualizado com a próxima atualização cumulativa. Novas funções são anunciadas e descritas pela primeira vez na referência de função DAX coincidindo com as atualizações do Power BI Desktop.

Nem todas as funções têm suporte em versões anteriores do SQL Server Analysis Services e do Excel.

Resolução de problemas

Se você receber um erro ao definir uma fórmula, a fórmula pode conter um erro sintático, semântico ou de cálculo.

Os erros sintáticos são os mais fáceis de resolver. Normalmente envolvem um parêntese ou vírgula ausentes.

O outro tipo de erro ocorre quando a sintaxe está correta, mas o valor ou uma coluna referenciada não faz sentido no contexto da fórmula. Esses erros semânticos e de cálculo podem ser causados por qualquer um dos seguintes problemas:

  • A fórmula refere-se a uma coluna, tabela ou função não existente.
  • A fórmula parece estar correta, mas quando o mecanismo de dados busca os dados, ele encontra uma incompatibilidade de tipo e gera um erro.
  • A fórmula passa um número incorreto ou tipo de argumentos para uma função.
  • A fórmula refere-se a uma coluna diferente que tem um erro e, portanto, seus valores são inválidos.
  • A fórmula refere-se a uma coluna que não foi processada, o que significa que tem metadados, mas não dados reais para usar para cálculos.

Nos primeiros quatro casos, o DAX sinaliza a coluna inteira que contém a fórmula inválida. No último caso, o DAX acinzenta a coluna para indicar que a coluna está em um estado não processado.

Aplicações e ferramentas

Power BI Desktop

Power BI Desktop

O Power BI Desktop é um aplicativo gratuito de modelagem de dados e relatórios. O designer de modelo inclui um editor DAX para criar fórmulas de cálculo DAX.

Power Pivot no Excel

Power Pivot in Excel

O designer de modelos do Power Pivot no Excel inclui um editor DAX para criar fórmulas de cálculo DAX.

Visual Studio

Visual Studio

Visual Studio com extensão de projetos do Analysis Services (VSIX) é usado para criar projetos de modelo do Analysis Services. O designer de modelo tabular, instalado com a extensão de projetos, inclui um editor DAX.

SQL Server Management Studio

SQL Server Management Studio

O SQL Server Management Studio (SSMS) é uma ferramenta essencial para trabalhar com o Analysis Services. O SSMS inclui um editor de consultas DAX para consultar modelos tabulares e multidimensionais.

DAX Estúdio

DAX Studio icon

O DAX Studio é uma ferramenta de cliente de código aberto para criar e executar consultas DAX em modelos do Analysis Services, Power BI Desktop e Power Pivot no Excel.

Tabular Editor

Tabular Editor icon

O Editor de Tabelas é uma ferramenta de código aberto que fornece uma visão intuitiva e hierárquica de cada objeto em metadados de modelo tabular. O Editor de Tabelas inclui um Editor DAX com realce de sintaxe, que fornece uma maneira fácil de editar medidas, colunas calculadas e expressões de tabela calculadas.

Recursos de aprendizagem

Ao aprender DAX, é melhor usar o aplicativo que você usará para criar seus modelos de dados. O Analysis Services, o Power BI Desktop e o Power Pivot no Excel têm artigos e tutoriais que incluem lições sobre como criar medidas, colunas calculadas e filtros de linha usando DAX. Aqui estão alguns recursos adicionais:

Vídeos

Use o DAX no caminho de aprendizado do Power BI Desktop .

O Guia Definitivo do DAX por Alberto Ferrari e Marco Russo (Microsoft Press). Agora em sua segunda edição, este extenso guia fornece noções básicas para técnicas inovadoras de alto desempenho para modeladores de dados iniciantes e profissionais de BI.

The Definitive Guide to DAX book image

Comunidade

O DAX tem uma comunidade vibrante sempre disposta a compartilhar seus conhecimentos. A Comunidade do Microsoft Power BI tem um fórum de discussão especial apenas para DAX, Comandos e Dicas DAX.