Visão Geral do DAX
A DAX (Data Analysis Expressions) é uma linguagem de expressão de fórmula usada nos Analysis Services, no Power BI e no Power Pivot no Excel. As fórmulas DAX incluem funções, operadores e valores para realizar cálculos avançados e consultas em dados nas tabelas e colunas relacionadas nos modelos de dados tabulares.
Este artigo fornece apenas uma introdução básica aos conceitos mais importantes no DAX. Ele descreve o DAX, pois se aplica a todos os produtos que o usam. Algumas funcionalidades podem não se aplicar a determinados produtos ou casos de uso. Confira a documentação do seu produto que descreve a implementação específica do DAX.
Cálculos
As fórmulas DAX são usadas em medidas, colunas calculadas, tabelas calculadas e segurança no nível de linha.
Medidas
As medidas são fórmulas de cálculo dinâmico em que os resultados mudam dependendo do contexto. As medidas são usadas em relatórios que dão suporte à combinação e à filtragem dos dados de modelo usando vários atributos, como um relatório do Power BI ou a Tabela Dinâmica ou o Gráfico Dinâmico do Excel. As medidas são criadas usando a barra de fórmulas DAX no designer do modelo.
Uma fórmula em uma medida pode usar as funções de agregação padrão criadas automaticamente usando o recurso Autossoma, 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 um argumento para outras medidas.
Quando você define uma fórmula para uma medida na barra de fórmulas, um recurso de Dica de ferramenta mostra uma visualização rápida do que os resultados seriam para o total no contexto atual, mas, do contrário, os resultados não são produzidos imediatamente em qualquer lugar. A razão pela qual você não pode consultar os resultados filtrados do cálculo imediatamente é que 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 pode 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 um Gráfico Dinâmico do Excel, um relatório do Power BI ou uma expressão de tabela em uma consulta DAX no SSMS (SQL Server Management Studio).
Independentemente do cliente, uma consulta separada é executada para cada célula nos resultados. Isso significa que cada combinação de cabeçalhos de linha e de coluna em uma Tabela Dinâmica ou cada seleção de segmentações 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 então coloca a coluna Product Category de uma tabela Product em Filtros, a soma do Valor de Vendas é calculado e exibido para cada categoria de produtos.
Diferentemente das colunas calculadas, a sintaxe de uma medida inclui o nome da medida que antecede a fórmula. No exemplo que acabou de ser fornecido, o nome Total de Vendas é exibido antes da fórmula. Após criar uma medida, o nome e sua definição serão exibidos na lista Campos do aplicativo cliente de relatório e dependendo se as perspectivas e funções estarão disponíveis a todos os usuários do modelo.
Para obter mais informações, consulte:
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 cria uma fórmula DAX que define os valores da coluna. Quando uma coluna calculada contiver uma fórmula DAX válida, os valores serão calculados para cada coluna assim que a fórmula for inserida. Os valores serão armazenados no modelo de dados na memória. Por exemplo, em uma tabela Data, quando a fórmula é inserida na barra de fórmulas:
= [Calendar Year] & " Q" & [Calendar Quarter]
Um valor para cada linha na tabela é calculado inserindo valores da coluna Ano Calendário (na mesma Tabela de data), adicionando um espaço e a letra Q maiúscula e adicionando os valores da coluna Trimestre Calendário (na mesma Tabela de data). O resultado de cada linha na coluna calculada é calculado imediatamente e é exibido, por exemplo, como T1 2017. Os valores de coluna apenas serão recalculados se a tabela ou qualquer tabela relacionada for processada (atualização) ou o modelo for descarregado da memória e recarregado, como ocorre ao fechar e reabrir um arquivo do Power BI Desktop.
Para saber mais, confira:
Colunas calculadas no Power BI Desktop
Colunas calculadas no Analysis Services
Colunas calculadas no Power Pivot.
Tabelas calculadas
Uma tabela calculada é um objeto computado com base em uma expressão de fórmula, derivada de todas ou de parte de outras tabelas no mesmo modelo. Em vez de consultar e carregar valores nas colunas da sua nova tabela de uma fonte de dados, uma fórmula DAX define os valores da tabela.
As tabelas calculadas podem ser úteis em uma dimensão com função múltipla. Um exemplo é a Tabela de data, 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 disponível para consultas como sendo totalmente operável como qualquer outra tabela. 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. Com isso, você pode manter a tabela original intacta ao criar variações dessa tabela para dar suporte a cenários específicos.
Tabelas calculadas dão suporte a 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. Tabelas calculadas podem ser nomeadas e exibidas ou ocultas assim como qualquer outra tabela. Tabelas calculadas serão recalculadas se qualquer uma das tabelas das quais elas recebem dados por pull forem renovadas ou atualizadas.
Para saber mais, confira:
Tabelas calculadas no Power BI Desktop
Tabelas calculadas no Analysis Services.
Segurança em nível de linha
Com segurança em nível de linha, uma fórmula DAX deve ser avaliada como uma condição booliana 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 de clientes com a seguinte fórmula DAX:
= Customers[Country] = "USA"
Os membros da função Vendas só poderão exibir dados para clientes nos EUA e agregações, como SUM, são retornadas 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 configuração em nível de 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, elas simplesmente não são retornadas 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 permitirem acesso a esse conjunto de linhas específico, o usuário poderá exibir os 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 ativa. As fórmulas de segurança em nível de linha serão interseccionadas por outras fórmulas definidas para tabelas relacionadas.
Para saber mais, confira:
Segurança no nível da linha (RLS) com Power BI
Funções no Analysis Services
Consultas
As consultas DAX podem ser criadas e executadas no SSMS (SQL Server Management Studio) e em ferramentas de software livre, 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 serem escritas 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 evaluate. Por exemplo,
EVALUATE
( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC
Retorna nos resultados uma tabela que lista apenas esses produtos com um SafetyStockLevel menor do que 200, em ordem crescente por EnglishProductName.
Você pode criar medidas como parte da consulta. As medidas existem apenas durante a consulta. Para saber mais, confira Consultas DAX.
Fórmulas
As fórmulas DAX são essenciais para criar cálculos em colunas e medidas calculadas, além de proteger seus dados usando segurança em nível de linha. Para criar fórmulas para colunas e medidas calculadas, você usará a barra de fórmulas ao longo da parte superior da janela do designer de modelos ou do Editor DAX. Para criar fórmulas para segurança em nível de linha, use a caixa de diálogo Gerenciador de Função ou Gerenciar funções. As informações nesta seção devem introduzir você aos conceitos básicos de fórmulas DAX.
Conceitos básicos de fórmula
As fórmulas DAX podem ser muito simples ou muito complexas. A tabela a seguir mostra alguns exemplos de fórmulas simples que poderiam 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. |
Se a fórmula criada for simples ou complexa, você poderá usar as seguintes etapas ao criar uma fórmula:
Cada fórmula deve começar com um sinal de igual (=).
Você pode digitar ou selecionar um nome de função ou digitar uma expressão.
Comece digitando as primeiras letras da função ou dando o nome desejado. AutoComplete exibe uma lista de funções, tabelas e colunas disponíveis. Pressione TAB para adicionar um item da lista AutoComplete à 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.
Forneça os argumentos para a função selecionando-os em uma lista suspensa de possíveis tabelas e colunas ou digitando valores.
Veja se há erros de sintaxe: verifique se todos os parênteses estão fechados e se as colunas, as tabelas e os valores estão referenciados corretamente.
Pressione ENTER para aceitar a fórmula.
Observação
Em uma coluna calculada, assim que você inserir a fórmula e ela for validada, a coluna será populada com valores. Em uma medida, pressionar ENTER salva a definição da medida com a tabela. Se uma fórmula for inválida, um erro será exibido.
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])))
essa medida é usada para criar uma taxa de comparação entre um período incompleto e o período anterior. A fórmula deve levar em conta a proporção do período decorrido e compará-lo com a mesma proporção no período anterior. Nesse caso, [Dias desde o Início do Trimestre Atual]/[Dias no Trimestre Atual] fornece a proporção decorrida no período atual.
Esta fórmula contém os seguintes elementos:
Elemento da 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 de data |
() |
Os parênteses de abertura e fechamento especifica os argumentos. |
DATESBETWEEN |
A função DATESBETWEEN retorna as datas entre a última data para cada valor na coluna Data da Tabela de data. |
'Date' |
Especifica a tabela Date. As tabelas estão entre aspas simples. |
[Date] |
Especifica a coluna Date na tabela Date. As colunas estão entre colchetes. |
, |
|
STARTOFQUARTER |
A função STARTOFQUARTER retorna a data do início do trimestre. |
LASTDATE |
A função LASTDATE retorna a última data do trimestre. |
'Date' |
Especifica a tabela Date. |
[Date] |
Especifica a coluna Date na tabela Date. |
, |
|
ENDOFQUARTER |
A função ENDOFQUARTER |
'Date' |
Especifica a tabela Date. |
[Date] |
Especifica a coluna Date na tabela Date. |
Usar a fórmula AutoComplete
O Preenchimento Automático o ajuda a inserir uma sintaxe de fórmula válida fornecendo opções para cada elemento na fórmula.
É possível usar a opção AutoCompletar Fórmula no meio de uma fórmula existente com funções aninhadas. O texto pouco antes do ponto de inserção é usado para exibir valores na lista suspensa, e todo o texto depois do ponto de inserção permanece inalterado.
O Preenchimento Automático não adiciona parênteses de fechamento das funções, nem compara parênteses automaticamente. Você deve verificar se cada função está sintaticamente correta; caso contrário, não poderá salvar nem usar a fórmula.
Usar várias funções em uma 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. Entretanto, o aninhamento pode dificultar a criação ou a solução de problemas em fórmulas. Muitas funções destinam-se ao uso somente como funções aninhadas. Essas funções retornam uma tabela, que não pode ser salva diretamente como um resultado; mas deve ser fornecida como entrada para uma função de tabela. Por exemplo, as funções SUMX, AVERAGEX e MINX requerem uma tabela como o 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 chamados de parâmetros, como entrada. Quando a função é executada, um valor é retornado. O DAX inclui funções que podem ser usadas para executar cálculos usando datas e horas, criar valores condicionais, trabalhar com cadeias de caracteres, executar pesquisas com base em relações, além de incluir 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 parecerão muito similares; porém, as fórmulas DAX são diferentes dos seguintes modos importantes:
Uma função DAX sempre referencia uma coluna completa ou uma tabela. Para usar apenas valores específicos de uma tabela ou coluna, você pode adicionar filtros à fórmula.
Se for necessário personalizar os cálculos linha por linha, o DAX fornecerá 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, confira 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 contar os valores distintos nele ou calcular somas dinâmicas em tabelas filtradas ou colunas.
As funções do DAX incluem uma variedade de funções de inteligência de tempo . Estas funções permitem definir ou selecionar intervalos de datas e executar cálculos dinâmicos com base nestas datas ou intervalos. Por exemplo, você pode comparar somas em 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, confira Funções de agregação.
Funções de data e hora
As funções de data e hora na DAX são semelhantes às funções de data e hora do Microsoft Excel. No entanto, as funções DAX baseiam-se em um tipo de dados DateTime a partir de 1º de março de 1900. Para saber mais, confira Funções de data e hora.
Funções de filtro
As funções de filtro em DAX retornam tipos de dados específicos, pesquisar valores em tabelas relacionadas e filtrar pelos valores relacionados. As funções de pesquisa funcionam com tabelas e relações, assim 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, confira Funções de filtro.
Funções financeiras
As funções financeiras no DAX são usadas em fórmulas que fazem cálculos financeiros, como o valor líquido atual e a taxa de retorno. Essas funções são semelhantes às funções financeiras usadas no Microsoft Excel. Para saber mais, confira Funções financeiras.
Funções informativas
Uma função informativa verifica a célula ou linha fornecida como um argumento e indica se o valor corresponde ao tipo esperado. Por exemplo, a função ISERROR retorna TRUE quando o valor referenciado contém um erro. Para saber mais, confira Funções de informações.
Funções lógicas
As funções lógicas agem sobre uma expressão para retornar informações sobre os valores da expressão. Por exemplo, a função TRUE permite que você saiba se uma expressão que está sendo avaliada retorna um valor TRUE. Para saber mais, confira Funções lógicas.
Funções matemáticas e trigonométricas
As funções matemáticas em 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 por funções DAX. Para saber mais, confira Funções matemáticas e trigonométricas.
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, confira Outras funções.
Funções de relação
As funções de relação no DAX permitem retornar valores de outra tabela relacionada, especificar uma relação específica a ser usada em uma expressão e especificar a direção da filtragem cruzada. Para obter mais informações, confira Funções de relação.
Funções estatísticas
As funções estatísticas calculam valores relacionados a probabilidade e a distribuições estatísticas, como desvio padrão e número de permutações. Para saber mais, confira Funções estatísticas.
Funções de texto
Funções de texto no DAX são muito semelhantes às suas equivalentes no Excel. Você pode retornar parte de uma cadeia de caracteres, pesquisar texto em uma cadeia de caracteres ou concatenar valores de cadeia de caracteres. A DAX também fornece funções para controlar os formatos de datas, horas e números. Para saber mais, confira Funções de texto.
Funções de inteligência de dados temporais
As funções de inteligência de tempo fornecidas na DAX permitem criar cálculos que usam o conhecimento interno sobre calendários e datas. Usando intervalos de data e hora em combinação com agregações ou cálculos, você pode criar comparações significativas em períodos de tempo comparáveis para vendas, estoque etc. Para saber mais, confira 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 em um conjunto de grupos com a função SUMMARIZECOLUMNS. Para saber mais, confira Funções de manipulação de tabela.
Variáveis
Você pode criar variáveis dentro de uma expressão usando VAR. Tecnicamente, o VAR 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 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. O uso de variáveis em suas fórmulas DAX pode ser incrivelmente eficiente.
Tipos de dados
É possível importar para um modelo de diversas fontes de dados diferentes que podem dar suporte a diferentes tipos de dados. Quando você importa os dados em um modelo, os dados são convertidos em um dos tipos de dados de modelo de tabela. Quando os dados de 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 o tipo de dados de valor retornado automaticamente.
O DAX dá suporte aos seguintes tipos de dados:
Tipo de dados em modelo | Tipos de dados em DAX | Descrição |
---|---|---|
Número Inteiro | Um valor inteiro de 64 bits (oito bytes) 1, 2 | Números sem casas decimais. 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 grande variedade de valores: Valores negativos de -1,79E +308 a -2,23E -308 Zero Valores positivos de 2,23E -308 a 1,79E + 308 No entanto, o número de dígitos significativos está limitado a 17 dígitos decimais. |
Booliano | Booliano | Um valor True ou False. |
Texto | Cadeia de caracteres | Uma cadeia de caracteres de dados de caractere Unicode. Podem ser cadeias de caracteres, números ou datas representados 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 depois de 1º de março de 1900. |
Moeda | Moeda | O tipo de dados de moeda permite valores entre -922.337.203.685.477,5808 e 922.337.203.685.477,5807 com quatro dígitos decimais de precisão fixa. |
N/D | Em branco | Um espaço em branco é um tipo de dados no DAX que representa e substitui nulos SQL. É possível criar um espaço em branco usando a função BLANK e testar se há espaços em branco usando a função lógica, ISBLANK. |
Modelos de dados tabulares também incluem o tipo de dados de tabela como a entrada ou a saída para muitas funções DAX. Por exemplo, a função FILTER usa uma tabela como entrada e gera outra tabela que contém apenas as linhas que atendam às condições do filtro. Ao combinar funções de tabela com funções de agregação, você pode executar cálculos complexos em conjuntos de dados definidos de forma dinâmica.
Embora os tipos de dados em geral sejam definidos automaticamente, é importante entendê-los e saber como se aplicam, em particular, a fórmulas DAX. Erros em fórmulas ou resultados inesperados, por exemplo, são causados frequentemente 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 & 2
retorna um resultado de cadeia de caracteres de 12. A fórmula = "1" + "2"
, no entanto, retorna um resultado de inteiro de 3.
Contexto
Contexto é um conceito importante que deve ser entendido ao criar fórmulas DAX. O contexto é o que permite executar análise dinâmica, como os resultados de uma fórmula são alterados para refletir a seleção atual de linha ou célula, além de qualquer dado relacionado. Entender o que é contexto e seu uso eficiente é vital para compilar análises dinâmicas de alto desempenho e para solucionar problemas em fórmulas.
As fórmulas em modelos de tabela 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
Há tipos diferentes de contexto: contexto de linha, contexto de consultae contexto de filtro.
Contexto de linha
O contexto de linha pode ser considerado "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 dessa outra tabela que estão relacionados à linha atual.
Por exemplo, suponha que você crie uma coluna calculada, = [Freight] + [Tax]
, que soma os valores de duas colunas, Freight e Tax, da mesma tabela. Esta fórmula automaticamente obtém somente os valores da linha atual nas colunas especificadas.
Contexto de linha também segue os relacionamentos que foram definidos entre tabelas, incluindo relacionamentos definidos dentro de uma coluna calculada usando fórmulas DAX, para determinar quais linhas nas tabelas relacionadas estão associadas à linha atual.
Por exemplo, a fórmula a seguir usa a função RELATED 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 com o uso do valor para a região na tabela atual, pesquisando-se a região na tabela relacionada e obtendo-se o valor do imposto para essa região na tabela relacionada.
= [Freight] + RELATED('Region'[TaxRate])
Esta fórmula obtém a taxa de imposto para a região atual da tabela de Região e adiciona-a ao valor da coluna Freight. Nas fórmulas DAX, você não precisa saber ou especificar a relação específica que conecta as tabelas.
Contexto de várias linhas
A DAX inclui várias 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, estas funções permitem criar fórmulas que executam operações recursivamente em um loop interno e exterior.
Por exemplo, vamos supor que o modelo contenha uma tabela Products e uma tabela Sales . Talvez os usuários queiram percorrer toda a tabela de vendas, que contém várias transações que envolvem vários produtos, e encontrar a maior quantidade solicitada de cada produto em qualquer transação.
Com a DAX você pode criar uma única fórmula que retorna o valor correto e os resultados são atualizados automaticamente a qualquer momento em que um usuário adicionar dados às tabelas.
= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])
Para obter um exemplo detalhado desta fórmula, confira EARLIER.
Em resumo, a função EARLIER armazena o contexto de linha da operação que precedeu a operação atual. O tempo todo, a função armazena na memória dois conjuntos de contexto: um deles representa a linha atual do loop interno da fórmula, e o outro representa a linha atual do loop externo da fórmula. A DAX alimenta automaticamente valores entre os dois loops para que você possa criar agregações complexas.
Contexto de consulta
Contexto de consulta se refere ao subconjunto de dados recuperados 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, as segmentações e os filtros de relatórios para determinar o contexto. As consultas necessárias então são executadas em relação aos dados de modelo para obter o subconjunto correto de dados, fazer os cálculos definidos pela fórmula e preencher os valores no relatório.
Como o contexto muda dependendo do local em que você coloca a fórmula, os resultados dela também podem mudar. Por exemplo vamos supor que você crie uma fórmula que some os valores na coluna Lucro da tabela Vendas: = SUM('Sales'[Profit])
. Se você usar essa fórmula em uma coluna calculada na tabela Vendas, os resultados da fórmula serão os mesmos para toda a tabela, porque o contexto de consulta da fórmula sempre é todo o conjunto de dados da tabela Vendas. 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; em vez disso, desejam obter o lucro de um ano específico, um país específico, um produto específico ou alguma combinação deles e, em seguida, obter um total geral.
Em um relatório, o contexto é alterado por filtragem, adição ou remoção de campos e uso de segmentações. 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 de filtro
Contexto de filtro é o conjunto de valores permitido 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). 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 permitido em uma coluna ou tabela, usando argumentos de uma fórmula. O contexto de filtro é aplicado sobre outros contextos, como o contexto de linha ou o contexto de consulta.
Em modelos de tabela, há muitos modos de criar contexto de filtro. Dentro do contexto de clientes que podem consumir o modelo, como relatórios do Power BI, os usuários podem criar filtros dinamicamente adicionando segmentações ou filtros de relatório nos cabeçalhos de linha e coluna. Você também pode especificar expressões de filtro diretamente dentro da fórmula, para especificar valores relacionados, para filtrar tabelas que são usadas como entradas ou para obter contexto dinamicamente para os valores que são usados em cálculos. Você também pode desmarcar completa ou seletivamente os filtros em colunas específicas. Isto é muito útil ao criar fórmulas que calculam totais principais.
Para saber mais sobre como criar filtros dentro de fórmulas, confira a Função FILTER (DAX).
Para obter um exemplo de como os filtros são limpos para criar totais gerais, consulte a Função ALL (DAX).
Para obter exemplos de como limpar seletivamente e aplicar filtros dentro de fórmulas, confira ALLEXCEPT.
Determinar contexto em fórmulas
Quando você cria uma fórmula do DAX, a fórmula é testada primeiro para sintaxe válida e para ter certeza de que os nomes das colunas e tabelas incluídos na fórmula podem ser localizados no contexto atual. Se qualquer coluna ou tabela especificada pela fórmula não puder ser localizada, um erro será retornado.
O contexto durante a validação (e operações de recálculo) é determinado conforme descrito nas seções anteriores, usando as tabelas disponíveis no modelo, qualquer relacionamento entre tabela e qualquer filtro que tenha sido aplicado.
Por exemplo, se você tiver importado alguns dados em uma nova tabela e não tiver relacionado a nenhuma outra tabela (e não tiver aplicado filtros), o contexto atual será o conjunto inteiro de colunas da tabela. Se a tabela estiver vinculada por relações com outras tabelas, o contexto atual incluirá as tabelas relacionadas. Se você adicionar uma coluna da tabela a um relatório que tem segmentação de dados e talvez algum filtros de relatório, o contexto para a fórmula será o subconjunto de dados em cada célula do relatório.
O contexto é um conceito avançado que também pode dificultar a solução de erros de fórmulas. Nós recomendamos que você comece com fórmulas simples e relacionamentos para verificar como o contexto funciona. A seção a seguir fornece alguns exemplos de como as fórmulas usam tipos diferentes 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 TRUE\FALSE lógico.
- 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 caracteres 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, confira Operadores DAX.
Trabalhando com tabelas e colunas
Tabelas em modelos de dados tabulares se parecem com tabelas do Excel, mas são diferentes na maneira como funcionam com os dados e com fórmulas:
- As fórmulas só funcionam com tabelas e colunas, e não com células individuais, referências de intervalos ou matrizes.
- As fórmulas podem usar relações para obter valores de tabelas relacionadas. Os valores recuperados sempre são relacionados ao valor da linha atual.
- Não pode haver dados irregulares, como ocorre em uma planilha do Excel. Cada linha de uma tabela deve conter o mesmo número de colunas. No entanto, pode haver valores vazios em algumas colunas. As tabelas de dados do Excel e as tabelas de dados do 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.
Referenciando tabelas e colunas em fórmulas
É possível referenciar qualquer tabela e coluna usando seu nome. Por exemplo, a seguinte fórmula ilustra como referenciar colunas de duas tabelas usando o nome totalmente qualificado :
= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])
Quando uma fórmula é avaliada, o designer do modelo primeiro verifica a sintaxe geral e, em seguida, os nomes das colunas e tabelas que você fornece 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ê obterá um erro na fórmula (uma cadeia de caracteres #ERROR em lugar de um valor de dados em células nas quais o erro ocorre). Para saber mais sobre requisitos de nomenclatura para tabelas, colunas e outros objetos, confira Requisitos de Nomenclatura na sintaxe DAX.
Relações de tabela
Ao criar relações entre tabelas, você obtém a habilidade 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 somá-los para cada um. Em muitos casos, porém, uma relação talvez não seja necessária. 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 uma relação existente entre as tabelas, ou entre várias tabelas, para localizar as colunas que você referenciou e retornar resultados que tenham sentido. Outras funções tentarão identificar a relação; no entanto, tendo em vista melhores resultados, você deverá criar sempre uma relação onde for possível. Os modelos de dados tabulares dão suporte a várias relações entre tabelas. Para evitar confusão ou resultados incorretos, apenas uma relação por vez é designada como a ativa, mas você pode alterar a relação ativa, conforme necessário, para atravessar conexões diferentes nos dados em 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 essas regras de design de fórmula ao usar relações:
Quando tabelas forem conectadas por uma relação, você deve verificar se as duas colunas usadas como chaves têm 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 ocorrer, você deve estar ciente de que valores em branco ou não correspondentes pode afetar os resultados das fórmulas.
Ao vincular tabelas em seu modelo usando relações, você amplia o escopo, ou contexto, no qual as fórmulas são avaliadas. As alterações no contexto resultantes da adição de novas tabelas, novas relações, ou de alterações na relação ativa podem fazer seus resultados serem alterados de maneira imprevista. Para saber mais, confira Contexto neste artigo.
Processar e atualizar
Processo e recálculo são duas operações separadas, mas relacionadas. Você deve compreender totalmente esses conceitos ao criar um modelo que contenha fórmulas complexas, grandes volumes de dados ou dados obtidos de fontes de dados externas.
O processo (atualização) está atualizando os dados em um modelo com novos dados de uma fonte de dados externa.
Recálculo é o processo de atualizar os resultados das fórmulas para refletir todas as alterações feitas nas próprias fórmulas e nos dados subjacentes. O recálculo pode afetar o desempenho das seguintes formas:
O valores em uma coluna calculada são computados e armazenados no modelo. Para atualizar os valores na coluna calculada, você deverá processar o modelo usando um dos três comandos de processamento: Processar Completo, Processar Dados ou Processar Recálculo. O resultado da fórmula sempre deve ser recalculado para a coluna inteira, todas as vezes que você alterar a fórmula.
Os valores calculados por medidas são avaliados dinamicamente sempre que um usuário adiciona a medida a uma Tabela Dinâmica ou abre um relatório; conforme o usuário modifica o contexto, os valores retornados pela medida são alterados. Os resultados da medida sempre refletem o mais recente no cache na memória.
O processamento e o recálculo não têm efeito sobre as fórmulas de segurança em nível de linha, a menos que o resultado de um recálculo retorne um valor diferente, tornando, portanto, a linha consultável ou não pelos membros de função.
Atualizações
O DAX está constantemente sendo aprimorado. 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, SSMS (SQL Server Management Studio) e a extensão de projeto Analysis Services para Visual Studio (SSDT). SQL Server Analysis Services é atualizado com a próxima atualização cumulativa. Novas funções primeiro são anunciadas e descritas na referência da função DAX que coincide com 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.
Solução de problemas
Se você receber um erro ao definir uma fórmula, talvez a fórmula contenha um erro sintático, um erro semânticoou erro de cálculo.
Erros sintáticos são os mais fáceis de resolver. Em geral, eles envolvem a falta de um parêntese ou de uma vírgula.
O outro tipo de erro ocorre quando a sintaxe está correta, mas o valor ou uma coluna referenciado não faz sentido no contexto da fórmula. Esses erros semânticos e de cálculo podem ser causados por um dos seguintes problemas:
- A fórmula se refere a uma coluna, tabela ou função não existente.
- A fórmula parece estar correta, mas quando o mecanismo de dados os busca, ele encontra tipos incompatíveis e gera um erro.
- A fórmula passa um número ou um tipo de argumento incorreto para uma função.
- A fórmula referencia uma coluna diferente que tem o erro e, por isso, os valores são inválidos.
- A fórmula refere-se a uma coluna que não foi processada, significando que tem metadados mas nenhum dado real para usar para cálculos.
Nos quatro primeiros casos, o DAX sinaliza a coluna inteira que contém a fórmula inválida. No último caso, a DAX torna a coluna indisponível para indicar que ela está em um estado não processado.
Aplicativos e ferramentas
Power BI Desktop
O Power BI Desktop é um aplicativo gratuito de modelagem de dados e de relatório. O designer do modelo inclui um editor DAX para criar fórmulas de cálculo DAX.
Power Pivot no Excel
O designer de modelos do Power Pivot no Excel inclui um editor DAX para criar fórmulas de cálculo DAX.
Visual Studio
O Visual Studio com a extensão projetos do Analysis Services (VSIX) é usado para criar projetos de modelo de Analysis Services. O designer de modelo de tabela, instalado com a extensão de projetos, inclui um editor DAX.
SQL Server Management Studio
O SSMS (SQL Server Management Studio) é uma ferramenta essencial para trabalhar com o Analysis Services. O SSMS inclui um editor de consultas DAX para consultar modelos tabulares e multidimensionais.
DAX Studio
O DAX Studio é uma ferramenta de cliente de software livre para criar e executar consultas DAX em modelos do Analysis Services, do Power BI Desktop e do Power Pivot no Excel.
Tabular Editor
O Tabular Editor é uma ferramenta de open-source que fornece uma exibição intuitiva e hierárquica de cada objeto em metadados de modelo de tabela. O Tabular Editor inclui um editor DAX com realce de sintaxe, que fornece uma maneira fácil de editar medidas, colunas calculadas e expressões de tabelas calculadas.
Recursos de aprendizagem
Ao conhecer o DAX, é melhor usar o aplicativo que você usará para criar os 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 o DAX. Estes são alguns recursos adicionais:
Use DAX no roteiro de aprendizagem do Power BI Desktop.
The Definitive Guide to DAX (O Guia Definitivo para o DAX) de Alberto Ferrari e Marco Russo (Microsoft Press). Agora, na segunda edição, este guia extensivo fornece noções básicas para técnicas inovadoras de alto desempenho para modeladores de dados e profissionais de BI iniciantes.
Comunidade
O DAX tem uma comunidade vibrante sempre disposta a compartilhar a própria experiência. A Comunidade do Microsoft Power BI tem um fórum de discussão especial apenas para DAX, Comandos e Dicas do DAX.