Partilhar via


DAX em modelos tabulares

Aplica-se a: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Expressões de Análise de Dados (DAX) são uma linguagem de fórmulas utilizada para criar cálculos personalizados em Analysis Services, Power BI e Power Pivot no Excel. As fórmulas DAX incluem funções, operadores e valores para realizar cálculos avançados sobre dados em tabelas e colunas.

Embora o DAX seja utilizado em Serviços de Análise, Power BI e Power Pivot no Excel, este artigo aplica-se mais a projetos de modelos tabulares de Serviços de Análise criados em Visual Studio.

Fórmulas DAX em colunas calculadas, tabelas calculadas, medidas e filtros de linha

Para modelos tabulares, as fórmulas DAX são usadas em colunas calculadas, medidas e filtros de linhas.

Colunas calculadas

Uma coluna calculada é uma coluna que se adiciona a uma tabela existente (no design do modelo) e depois cria uma fórmula DAX que define os valores da coluna.

Observação

Colunas calculadas não são suportadas para modelos que recuperam dados de uma fonte de dados relacional usando o modo DirectQuery.

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 na base de dados. Por exemplo, numa tabela de datas, quando a fórmula =[Calendar Year] & " Q" & [Calendar Quarter] é introduzida na barra de fórmulas, um valor para cada linha da tabela é calculado tomando valores da coluna do Ano Civil (na mesma tabela de datas), adicionando um espaço e a letra maiúscula Q, e depois adicionando os valores da coluna do Trimestre do Calendário (na mesma tabela de datas). O resultado de cada linha na coluna calculada é calculado imediatamente e aparece, por exemplo, como Q1 de 2010. Os valores das colunas só são recalculados se os dados forem reprocessados.

Para saber mais, consulte Colunas Calculadas.

Tabelas calculadas

As tabelas calculadas são objetos calculados, baseados numa consulta ou expressão DAX, derivados de todas ou parte de outras tabelas no mesmo modelo.

Para saber mais, consulte Tabelas Calculadas.

Medidas

As medidas são fórmulas dinâmicas em que os resultados mudam consoante o contexto. As medidas são usadas em formatos de relatórios que suportam a combinação e filtragem de dados de modelos utilizando múltiplos atributos, como um relatório Power BI, Excel PivotTable ou PivotChart. As medidas são definidas pelo autor do modelo usando a grelha de medidas (e a barra de fórmulas) no designer do modelo no Visual Studio.

Uma fórmula numa medida pode usar funções de agregação padrão criadas automaticamente pela funcionalidade Autosum, como COUNT ou SUM, ou pode definir a sua própria fórmula usando DAX. Quando definir uma fórmula para uma medida na barra de fórmulas, um recurso Tooltip 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 gerados imediatamente em lado nenhum. Outros detalhes das medidas também aparecem no painel de Propriedades .

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 um Excel Pivottable ou PivotChart, um relatório Power BI ou uma consulta MDX. Independentemente do cliente de reporte, é executada uma consulta separada para cada célula dos resultados. Ou seja, cada combinação de cabeçalhos de linha e coluna numa Tabela Dinâmica, ou cada seleção de segmentadores e filtros num relatório do Power BI, gera um subconjunto diferente de dados sobre a qual a medida é calculada. Por exemplo, numa medida com a fórmula, Total Sales:=SUM([Sales Amount]), quando um utilizador coloca a medida Vendas Totais na janela de Valores de uma Tabela Dinâmica, e depois coloca a coluna CategoriaDimProduto de uma tabela DimProduct na janela de Filtros, a soma do Montante das Vendas é calculada e apresentada para cada categoria de produto.

Ao contrário das colunas calculadas e dos filtros de linhas, a sintaxe de uma medida inclui o nome da medida anterior à fórmula. No exemplo apresentado, o nome Total Sales: aparece antes da fórmula. Depois de criar uma medida, o nome e a sua definição aparecem na Lista de Campos da aplicação de relatórios e, dependendo das perspetivas e funções, estão disponíveis para todos os utilizadores do modelo.

Para saber mais, consulte Medidas.

Filtros de linha

Os filtros de linhas definem quais as linhas de uma tabela que são visíveis para os membros de um determinado papel. Filtros de linha podem ser criados para cada tabela de um modelo usando fórmulas DAX. Os filtros de linha são criados para um determinado papel usando o Role Manager no Visual Studio. Filtros de linha também podem ser definidos para um modelo implementado utilizando Propriedades de Função no SQL Server Management Studio (SSMS).

Num filtro de linhas, uma fórmula DAX, que deve avaliar para uma condição booleana TRUE/FALSE, define quais as linhas que podem ser devolvidas pelos resultados de uma consulta feita por membros desse papel específico. As linhas não incluídas na fórmula DAX não podem ser devolvidas. Por exemplo, para membros do papel de Vendas, a tabela Clientes com a seguinte fórmula DAX, =Customers[Country] = "USA", os membros do papel de Vendas só poderão visualizar dados para clientes nos EUA, e agregados, como SUM, são devolvidos apenas para clientes nos EUA.

Quando defines um filtro de linhas usando a fórmula DAX, estás a criar 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. Outros papéis podem permitir o acesso às linhas excluídas pela fórmula DAX. Se um utilizador for membro de outro papel, e os filtros de linhas desse papel permitirem o acesso a esse conjunto de linhas em particular, o utilizador pode visualizar os dados dessa linha.

Os filtros de linhas aplicam-se tanto às linhas especificadas como às linhas relacionadas. Quando uma tabela tem várias relações, os filtros aplicam segurança para a relação que está ativa. Os filtros de linha serão intersectados com outros filtros de linha definidos para tabelas relacionadas.

Para saber mais, consulte Funções.

Tipos de dados DAX

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 num cálculo, os dados são então convertidos para um tipo de dado DAX durante a duração e a saída do cálculo. Quando cria uma fórmula DAX, os termos usados na fórmula determinam automaticamente o tipo de dado de valor devolvido.

Os modelos tabulares, e DAX, suportam os seguintes tipos de dados:

Tipo de dados no modelo Tipo de dados em DAX Description
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 a -2,23E -308

Zero

Valores positivos de 2,23E -308 a 1,79E + 308

No entanto, o número de dígitos significativos é limitado a 17 dígitos decimais.
booleano booleano Um valor Verdadeiro ou Falso.
Texto Cordão Uma cadeia de dados de caracteres Unicode. Podem ser cadeias de caracteres, números ou datas representadas em um formato de texto.
Date 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 blank é um tipo de dado no DAX que representa e substitui os nulls do SQL. Pode criar um vazio usando a função BLANK e testar vazios usando a função lógica ISBLANK.

Os modelos tabulares também incluem o tipo de dados Table como entrada ou saída para muitas das funções DAX. Por exemplo, a função FILTER recebe uma tabela como entrada e produz outra tabela que contém apenas as linhas que cumprem as 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 dinamicamente.

Embora os tipos de dados sejam normalmente definidos automaticamente, é importante compreender os tipos de dados e como 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 & 2, retorna um resultado de cadeia de caracteres de 12. A fórmula, = "1" + "2", no entanto, retorna um resultado inteiro de 3.

Para informações detalhadas sobre tipos de dados em modelos tabulares e conversões explícitas e implícitas de tipos de dados em DAX, consulte Tipos de dados suportados.

Operadores DAX

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

  • Operadores de comparação para comparar valores e devolver 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 informações detalhadas sobre operadores usados em fórmulas DAX, consulte Referência de Operador DAX.

Fórmulas DAX

As fórmulas DAX são essenciais para criar cálculos em colunas e medidas calculadas, e para proteger os seus dados usando filtros ao nível das linhas. Para criar fórmulas para colunas e medidas calculadas, usará a barra de fórmulas no topo da janela do designer de modelos ou o Editor DAX. Para criar fórmulas para filtros de linhas, deve usar a caixa de diálogo Role Manager. A informação desta secção destina-se a começar a compreender o básico das fórmulas DAX.

Noções básicas sobre fórmulas

O DAX permite aos autores de modelos tabulares definir cálculos personalizados tanto em tabelas de modelos, como parte das colunas calculadas, como como medidas associadas a tabelas, mas que não aparecem diretamente nelas. O DAX também permite que os autores de modelos protejam os dados, criando cálculos que retornam um valor booleano que define quais as linhas de uma tabela particular ou relacionada que podem ser consultadas pelos utilizadores membros do papel associado.

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.

Formula Description
=TODAY() Insere a data de hoje em todas as linhas da coluna.
=3 Insere o valor 3 em cada linha da coluna.
=[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 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 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.

Observação

Numa coluna calculada, assim que introduzir a fórmula e esta for validada, a coluna é preenchida com valores. Ao trabalhar com uma medida, pressionar ENTER guarda a definição de medida na grelha de métricas associada à tabela. Se uma fórmula for inválida, será apresentado um erro.

Neste exemplo, vamos analisar uma fórmula mais complexa numa 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] indica a proporção decorrida no período atual.

Esta fórmula contém os seguintes elementos:

Elemento de fórmula Description
Days in Current Quarter:= O nome da medida.
= O sinal de igual (=) inicia a fórmula.
COUNTROWS A função COUNTROWS conta o número de linhas na tabela de datas
() O parêntese aberto e de fechamento especifica os argumentos.
DATESBETWEEN A função DATESBETWEEN devolve as datas entre a última data de cada valor na coluna Data da tabela de Datas.
'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 de início do trimestre.
LASTDATE A função LASTDATE devolve 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

Tanto a barra de fórmulas no designer do modelo como a janela de Filtros de Linhas de Fórmulas na caixa de diálogo Gestor de Funções fornecem uma funcionalidade de AutoComplete. 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 pendente, e todo o restante do 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 emparelha automaticamente os 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, significando que você usa os resultados de uma função como argumento de outra função. Você pode encadear até 64 níveis de funções em colunas calculadas. No entanto, o aninhamento pode dificultar a criação ou a resoluçã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 todas uma tabela como primeiro argumento.

Observação

Alguns limites são aplicados dentro de medidas de aninhamento de funções para garantir que o desempenho não seja afetado pelos muitos cálculos exigidos pelas dependências entre colunas.

Funções DAX

Esta secção fornece uma visão geral dos tipos de funções suportadas no DAX. Para informações mais detalhadas, consulte a Referência da Função DAX.

O DAX fornece uma variedade de funções que pode usar para realizar cálculos usando datas e horas, criar valores condicionais, trabalhar com strings, realizar pesquisas baseadas em relações e a capacidade de iterar sobre uma tabela para realizar cálculos recursivos. Se estiver familiarizado com fórmulas do Excel, muitas destas funções parecerão muito semelhantes; no entanto, as fórmulas DAX diferem nos seguintes aspetos importantes:

  • Uma função DAX refere-se sempre 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 precisar de personalizar cálculos linha a linha, o DAX fornece funções que permitem usar o valor da linha atual ou um valor relacionado como uma espécie de parâmetro, para realizar cálculos que variam consoante o contexto. Para compreender como estas funções funcionam, veja Contexto em Fórmulas DAX mais adiante 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 temporal . 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 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 baseiam-se nos tipos de dados data-hora usados pelo Microsoft SQL Server. Para saber mais, consulte Funções de Data e Hora (DAX).

Funções de filtro

As funções de filtro no DAX devolvem tipos de dados específicos, procuram valores em tabelas relacionadas 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 (DAX).

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 devolve TRUE se o valor que refere contiver um erro. Para saber mais, consulte Funções de Informação (DAX).

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 indica-lhe se uma expressão que está a avaliar devolve um valor TRUE. Para saber mais, consulte Funções Lógicas (DAX).

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 pelas funções DAX. Para saber mais, consulte Matemática e Funções Trigonométricas (DAX).

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 (DAX).

Funções estatísticas

O DAX fornece funções estatísticas que realizam agregações. Para além de criar somas e médias, ou encontrar os valores mínimos e máximos, no DAX também pode filtrar uma coluna antes de agregar ou criar agregações com base em tabelas relacionadas. Para saber mais, consulte Funções Estatísticas (DAX).

Funções de texto

As funções de texto em DAX são muito semelhantes às suas equivalentes no Excel. Você pode retornar parte de uma cadeia de caracteres, procurar 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 (DAX).

Funções de inteligência temporal

As funções de inteligência temporal fornecidas no DAX permitem-lhe criar cálculos que utilizam conhecimento incorporado 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 Temporal (DAX).

Funções com valor de tabela

Existem funções DAX que geram tabelas, recebem tabelas como entrada, ou fazem ambos. Como uma tabela pode ter uma única coluna, as funções de tabela também recebem colunas individuais como entradas. Compreender como usar estas funções de tabela é importante para utilizar plenamente as fórmulas DAX. O DAX inclui os seguintes tipos de funções com valores de tabela:

Funções de filtro - Devolve uma coluna, tabela ou valores relacionados com a linha atual.

Funções de agregação - Agregar qualquer expressão sobre as linhas de uma tabela.

Funções de inteligência temporal - Devolva uma tabela de datas, ou use uma tabela de datas para calcular uma agregação.

Contexto nas fórmulas DAX

O contexto é um conceito importante a compreender ao criar fórmulas usando 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 linhas ou células 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: de contexto de linha, de contexto de consulta e de contexto de filtro.

Contexto da linha

O contexto de linha pode ser visto 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, =[Freight] + [Tax], que soma valores de duas colunas, Frete e Imposto, 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 todas as relações definidas entre as tabelas, incluindo aquelas 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 seguinte usa a função RELATED para obter um valor fiscal de uma tabela relacionada, com base na região para onde a encomenda foi enviada. 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. Nas fórmulas DAX, não é necessário saber ou especificar a relação específica que liga as tabelas.

Contexto de múltiplas linhas

O DAX inclui funções que iteram cálculos sobre 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 DAX pode construir uma única fórmula que devolve o valor correto, e os resultados são automaticamente atualizados sempre que um utilizador adiciona dados às tabelas.

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

Para uma análise detalhada desta fórmula, consulte a Função ANTERIOR (DAX).

Para resumir, a função ANTERIOR armazena o contexto da 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 valores entre os dois ciclos para que possas criar agregados complexos.

Contexto da consulta

Contexto de consulta refere-se ao subconjunto de dados que é recuperado implicitamente para uma fórmula. Quando um utilizador coloca uma medida ou outro campo de valor numa Tabela Dinâmica ou num relatório baseado num modelo tabular, o motor examina os cabeçalhos de linhas e colunas, Slicers e filtros de relatório para determinar o contexto. Depois, as consultas necessárias são executadas contra a fonte de dados para obter o subconjunto correto de dados, fazer os cálculos definidos pela fórmula e depois preencher cada célula na Tabela Dinâmica ou relatório. O conjunto de dados que é recuperado é o contexto de consulta para cada célula.

Advertência

Para um modelo em modo DirectQuery, o contexto é avaliado, e depois as operações do conjunto para recuperar o subconjunto correto de dados e calcular os resultados são traduzidas para instruções SQL. Essas instruções são então executadas diretamente contra o armazenamento de dados relacional. Portanto, embora o método de obter os dados e calcular os resultados seja diferente, o contexto em si não muda.

Como o contexto muda dependendo de onde você coloca a fórmula, os resultados da fórmula também podem mudar.

Por exemplo, imagine que crias 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 utilizadores normalmente não querem ver o mesmo resultado centenas de vezes, mas sim obter o lucro de um ano específico, de um país/região específica, de um produto específico, ou de uma combinação destes, e depois obter um total geral.

Numa Tabela Dinâmica, o contexto pode ser alterado adicionando ou removendo cabeçalhos de colunas e linhas e adicionando ou removendo Slicers. Sempre que os utilizadores adicionam cabeçalhos de colunas ou linhas à Tabela Dinâmica, alteram o contexto da consulta em que a medida é avaliada. As operações de fatiamento e filtragem também afetam o contexto. 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 é um conjunto de valores permitidos para cada coluna ou valores recuperados de tabelas relacionadas. Os filtros podem ser aplicados à coluna no designer, ou à 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 sobre outros contextos, como o contexto de linha ou o contexto de consulta.

Em modelos tabulares, há muitas maneiras de criar contexto de filtro. No contexto de sistemas que podem consumir o modelo, como relatórios do Power BI, os utilizadores podem criar filtros instantaneamente ao adicionar segmentos 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 dentro de fórmulas, consulte a Função FILTER (DAX).

Para um exemplo de como filtros podem ser eliminados para criar totais, veja a Função ALL (DAX).

Para exemplos de como limpar e aplicar filtros seletivamente dentro de fórmulas, veja a Função ALLEXCEPT (DAX).

Determinar o contexto em fórmulas

Quando cria uma fórmula DAX, a fórmula é primeiro testada quanto à sintaxe válida e depois testada para garantir que os nomes das colunas e tabelas incluídas na fórmula podem 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 adicionar uma coluna da tabela a um relatório que tenha Segmentações e talvez alguns filtros de relatório, o contexto da fórmula será determinado pelo 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.

Exemplos de contexto em fórmulas

A função RELATED Function (DAX) expande o contexto da linha atual para incluir valores numa coluna relacionada. Isto permite-lhe realizar pesquisas. O exemplo neste artigo ilustra a interação entre filtragem e contexto de linha.

A função FILTER Function (DAX) permite-lhe especificar as linhas a incluir no contexto atual. Os exemplos neste artigo também ilustram como incorporar filtros noutras funções que realizam agregados.

A função ALL Function (DAX) define o contexto dentro de uma fórmula. Pode usá-lo para sobrepor filtros aplicados como resultado do contexto da consulta.

A função ALLEXCEPT Function (DAX) permite-lhe remover todos os filtros, exceto um que especificar. Ambos os artigos incluem exemplos que te guiam na construção de fórmulas e na compreensão de contextos complexos.

As funções EARLIER Function (DAX) e EARLIEST Function (DAX) permitem que você percorra tabelas realizando cálculos, ao referir-se a um valor de um loop interno. Se estiveres familiarizado com o conceito de recursão e com os laços internos e externos, vais apreciar o poder que as funções ANTERIOR e MAIS ANTIGA proporcionam. Se é novo nestes conceitos, deve seguir cuidadosamente os passos do exemplo para ver como os contextos interno e externo são usados nos cálculos.

Fórmulas e o modelo tabular

O designer de modelos no Visual Studio é uma área onde podes trabalhar com múltiplas tabelas de dados e ligar as tabelas num modelo tabular. Dentro deste modelo, as tabelas são unidas por relações em colunas com valores comuns (chaves). O modelo tabular permite ligar valores a colunas noutras tabelas e criar cálculos mais interessantes. Tal como numa base de dados relacional, pode ligar muitos níveis de tabelas relacionadas e usar colunas de qualquer uma das tabelas dos resultados.

Por exemplo, pode ligar uma tabela de vendas, uma tabela de produtos e uma tabela de categorias de produtos, e os utilizadores podem usar várias combinações das colunas em Tabelas Dinâmicas e relatórios. Campos relacionados podem ser usados para filtrar tabelas ligadas ou para criar cálculos sobre subconjuntos. (Se não estiver familiarizado com bases de dados relacionais e com o trabalho com tabelas e joins, veja Relações.)

Os modelos tabulares suportam múltiplas relações entre tabelas. Para evitar confusão ou resultados errados, apenas uma relação de cada vez é designada como a relação ativa, mas pode alterar a relação ativa conforme necessário para atravessar diferentes ligações nos dados nos cálculos. A Função USERELATIONSHIP (DAX) pode ser usada para especificar uma ou mais relações a serem usadas num cálculo específico.

Num modelo tabular, deve observar estas regras de desenho de fórmulas:

  • Quando as tabelas estão ligadas por uma relação, deve garantir que as duas colunas usadas como chaves têm valores que correspondam. No entanto, a integridade referencial não é aplicada; Portanto, é possível ter valores não correspondentes numa coluna chave e ainda assim 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 nas Fórmulas DAX anteriormente neste artigo.

Trabalhar com tabelas e colunas

As tabelas em modelos tabulares assemelham-se a tabelas Excel, mas são diferentes na forma como trabalham com dados e com 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 seguinte fórmula ilustra como fazer referência a colunas de duas tabelas utilizando 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 for encontrada, obterá um erro na sua fórmula (uma cadeia de #ERROR em vez de um valor de dados nas células onde o erro ocorre). Para saber mais sobre requisitos de nomenclatura para tabelas, colunas e outros objetos, consulte "Requisitos de Nomenclatura" na Referência de Sintaxe DAX.

Relações de tabela

Ao criar relações entre tabelas, ganha a capacidade de consultar dados noutra tabela e usar valores relacionados para realizar cálculos complexos. Por exemplo, pode usar uma coluna calculada para consultar todos os registos de envio relacionados com o revendedor atual e depois somar os custos de envio de cada um. Em muitos casos, no entanto, um relacionamento pode não ser necessário. Pode usar a função LOOKUPVALUE numa fórmula para devolver o valor em result_columnName para a linha que cumpre os critérios especificados nos parâmetros search_column e search_value .

Muitas funções DAX exigem que exista uma relação entre as tabelas, ou entre múltiplas tabelas, para localizar as colunas que referenciaste e devolver 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. Para saber mais, consulte Fórmulas e o Modelo Tabular anteriormente neste artigo.

Atualização dos resultados das fórmulas (processo)

Processo de dados 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.

O processamento de dados é o processo de atualizar os dados num modelo com novos dados provenientes de uma fonte de dados externa.

Recalcular é o processo de atualização dos resultados das fórmulas para refletir quaisquer alterações nas próprias fórmulas e para 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, deve processar o modelo usando um de três comandos de processamento - Process Full, Process Data ou Process Recalcul. O resultado da fórmula deve ser sempre recalculado para toda a coluna, sempre que alterar a fórmula.

  • Os valores calculados pelas 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 utilizador modifica o contexto, os valores devolvidos pela medida mudam. Os resultados da medida refletem sempre os dados mais recentes no cache em memória.

O processamento e o recálculo não têm efeito nas fórmulas do filtro de linhas, a menos que o resultado de um recálculo devolva um valor diferente, tornando assim a linha passível ou não passível de consulta pelos membros da função.

Resolução de erros em fórmulas

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

Os erros sintáticos são os mais fáceis de resolver. Normalmente envolvem um parêntese ou vírgula ausentes. Para ajuda com a sintaxe de funções individuais, consulte a referência de funções DAX.

O outro tipo de erro ocorre quando a sintaxe está correta, mas o valor ou a 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 motor de dados obtém os dados, encontra uma incompatibilidade de tipo e gera um erro.

  • A fórmula passa um número ou tipo incorreto de parâmetros a 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 toda a coluna que contém a fórmula inválida. No último caso, o DAX esvazia a coluna para indicar que a coluna está num estado não processado.

Consulte também

Referência de Expressões de Análise de Dados (DAX)
Medidas
Colunas Calculadas
Roles
KPIs
Fontes de Dados Suportadas