Partilhar via


Contexto em fórmulas DAX

O contexto permite a você executar análise dinâmica, na qual os resultados de uma fórmula podem ser 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.

Esta seção define os diferentes tipos de contexto: contexto de linha, contexto de consulta e contexto de filtro. Ela explica como o contexto é avaliado para fórmulas em colunas calculadas e em Tabelas Dinâmicas.

A última parte desta seção fornece links para exemplos detalhados que ilustram como os resultados de fórmulas mudam de acordo com o contexto.

Introdução ao contexto

As fórmulas do PowerPivot podem ser afetadas pelos filtros aplicados em uma Tabela Dinâmica, pelas relações entre as tabelas e pelos filtros usados em fórmulas. O contexto é que torna possível executar a análise dinâmica. É importante compreender o contexto para criar fórmulas e solucionar seus problemas.

Há tipos diferentes de contexto: contexto de linha, contexto de consulta e contexto de filtro.

O contexto de linha pode ser considerado como "a linha atual". Se você criou uma coluna calculada, o contexto de linha consistirá em valores de cada linha individual e valores das colunas relacionadas à linha atual. Também existem algumas funções (EARLIER e EARLIEST) que obtêm um valor da linha atual e o utilizam ao executar uma operação em uma tabela inteira.

Contexto de consulta refere-se ao subconjunto de dados criados implicitamente para cada célula de uma Tabela Dinâmica, dependendo dos títulos de linha e de coluna.

Contexto de filtro é o conjunto de valores permitidos em cada coluna, com base em restrições de filtro que foram aplicadas à linha ou definidas por expressões de filtro na fórmula.

O seguinte tópico explica os tipos diferentes de contexto com mais detalhes: Contexto em fórmulas DAX.

Voltar ao início

Contexto de linha

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 duas colunas da mesma tabela. Essa fórmula se comporta como fórmulas em uma tabela do Excel que automaticamente referenciam valores da mesma linha. Observe que as tabelas são diferentes dos intervalos: você não pode referenciar um valor da linha antes da linha atual usando notação de intervalo e não pode referenciar nenhum único valor arbitrário em uma tabela ou célula. Você sempre deve trabalhar com tabelas e colunas.

O contexto de linha segue automaticamente as relações entre tabelas 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 simplesmente a taxa de imposto para a região atual, a partir da tabela Região. Você não precisa saber ou especificar a chave que conecta as tabelas.

Contexto de várias linhas

Além disso, a DAX inclui várias funções que iteram cálculos em uma tabela. Essas funções podem ter várias linhas atuais e contextos de linha atuais. Em termos de programação, você pode criar fórmulas que se repitam em um loop interno e externo.

Por exemplo, vamos supor que a pasta de trabalho contenha uma tabela Products e uma tabela Sales. Talvez você queira 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.

No Excel, este cálculo requer uma série de resumos intermediários que teriam que ser recriados se os dados fossem alterados. Se você for um usuário avançado do Excel, talvez possa criar fórmulas de matriz que fariam o trabalho. Alternativamente, em um banco de dados relacional, você pode gravar subseleções aninhadas.

No entanto, 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 dados sejam adicionados às tabelas.

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

Para obter um passo a passo detalhado dessa fórmula, consulte Função EARLIER (DAX).

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. Quando você insere uma medida ou outro campo de valor em uma célula em uma Tabela Dinâmica, o mecanismo do PowerPivot examina os cabeçalhos de linha e coluna, Segmentações de Dados e filtros de relatório para determinar o contexto. Em seguida, o PowerPivot faz os cálculos necessários para popular cada célula no Tabela Dinâmica. O conjunto de dados recuperado é o contexto de consulta para cada célula.

Como o contexto pode ser alterado de acordo com o local em que você coloca a fórmula, os resultados da fórmula também são alterados, dependendo se você usa a fórmula em uma Tabela Dinâmica com muitos agrupamentos e filtros ou em uma coluna calculada sem filtros e contexto mínimo.

Por exemplo, suponhamos que você crie esta fórmula simples que soma os valores na coluna Profit da tabela Sales: =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 da consulta da fórmula sempre será todo o conjunto de dados da tabela Vendas. Seus resultados terão lucro para todas as regiões, todos os produtos, todos os anos etc.

No entanto, em geral você não deseja ver o mesmo resultado centenas de vezes, mas deseja obter o lucro de um determinado ano, um país específico, um certo produto ou uma combinação desses itens e depois obter um total geral.

Em uma Tabela Dinâmica, é fácil alterar o contexto adicionando ou removendo cabeçalhos de coluna e linha, e adicionando ou removendo Segmentações de Dados. Você pode criar uma fórmula como a especificada acima, em uma medida, e depois inseri-la em um Tabela Dinâmica. Sempre que adiciona cabeçalhos de coluna ou linha à Tabela Dinâmica, você altera o contexto de consulta no qual a medida é avaliada. As operações de divisão e filtragem também afetam o contexto. Portanto, a mesma fórmula, usada em uma Tabela Dinâmica, é avaliada em um contexto de consulta diferente para cada célula.

Contexto de filtro

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.

Por exemplo, uma Tabela Dinâmica calcula seus valores para cada célula com base nos cabeçalhos de linha e coluna, conforme descrito na seção acima no contexto de consulta. No entanto, dentro das medidas ou colunas calculadas que você adiciona à Tabela Dinâmica, é possível especificar expressões de filtro para controlar os valores usados pela fórmula. Você também pode desmarcar seletivamente os filtros em colunas específicas.

Para obter mais informações sobre como criar filtros dentro de fórmulas, consulte Função FILTER (DAX).

Para obter um exemplo de como os filtros são limpos para criar totais gerais, consulte Função ALL (DAX).

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

Portanto, você deve examinar a definição das medidas ou fórmulas usadas em uma Tabela Dinâmica de forma que conheça o contexto de filtro durante a interpretação dos resultados de fórmulas.

Determinando o contexto em fórmulas

Quando uma fórmula é criada, o PowerPivot para Excel primeiro verifica a sintaxe geral e, em seguida, os nomes de colunas e tabelas que você fornece, em relação a possíveis colunas e tabelas no contexto atual. Se o PowerPivot não conseguir localizar as colunas e tabelas especificadas pela fórmula, você receberá um erro.

O contexto é determinado conforme descrito nas seções anteriores, usando as tabelas disponíveis na pasta de trabalho, qualquer relacionamento entre tabela e qualquer filtro que tenha sido aplicado.

Por exemplo, se você tiver importado alguns dados em uma nova tabela e ainda não tiver aplicado filtros, todo o conjunto de colunas da tabela fará parte do contexto atual. Se você tiver várias tabelas vinculadas por relações e estiver trabalhando em uma Tabela Dinâmica filtrada adicionando títulos de coluna e usando Segmentações de Dados, o contexto incluirá as tabelas relacionadas e todos os filtros nos dados.

O contexto é um conceito avançado que também pode dificultar a solução de erros de fórmulas. É recomendável começar com fórmulas simples e relações para ver como o contexto funciona e depois começar a fazer experiências com fórmulas simples em Tabelas Dinâmicas. A seção a seguir também fornece alguns exemplos de como as fórmulas usam tipos diferentes de contexto para retornar resultados dinamicamente.

Exemplos de contexto em fórmulas

  • A função RELATED expande o contexto da linha atual para incluir valores em uma coluna relacionada. Isso permite a execução de pesquisas. O exemplo neste tópico ilustra a interação entre a filtragem e o contexto de linha.

  • A função FILTER permite especificar as linhas a serem incluídas no contexto atual. Os exemplos neste tópico também ilustram como inserir filtros em outras funções que executam agregados.

  • A função ALL define o contexto dentro de uma fórmula. Você pode usá-la para anular filtros aplicados como resultado do contexto de consulta.

  • A função ALLEXCEPT permite remover todos os filtro, exceto um especificado por você. Os dois tópicos incluem exemplos que orientam você durante a criação de fórmulas e a compreensão dos contextos complexos.

  • As funções EARLIER e EARLIEST permitem percorrer em loop as tabelas que executam cálculos, enquanto referencia um valor de um loop interno. Se você estiver familiarizado com o conceito de recursão e com loops internos e externos, apreciará o poder proporcionado pelas funções EARLIER e EARLIEST. Se você não for experiente com esses conceitos, siga as etapas no exemplo atentamente para ver como os contextos internos e externos são usados ao fazer cálculos.

Integridade referencial

Esta seção discute alguns conceitos avançados relacionados a valores não encontrados em tabelas PowerPivot conectadas através de relações. Ela poderá ser útil se você tiver pastas de trabalho com várias tabelas e fórmulas complexas e quiser ajuda para compreender os resultados.

Se você ainda não conhece os conceitos de dados relacionais, é recomendável que primeiro leia o tópico introdutório, Visão geral de relações.

Integridade referencial e relações do PowerPivot

O PowerPivot não exige que a integridade referencial seja imposta entre duas tabelas para definir uma relação válida. Em vez disso, uma linha em branco é criada na extremidade "um" de cada relação um para muitos, e é usada para manipular todas as linhas não correspondentes da tabela relacionada. Ela se comporta efetivamente como uma junção externa do SQL.

Nas Tabelas Dinâmicas, se você agrupar dados pelo lado um da relação, os dados não correspondentes do lado muitos da relação serão agrupados e incluídos em totais com um cabeçalho de linha em branco. O título em branco é um equivalente do "membro desconhecido".

Noções básicas sobre o membro desconhecido

O conceito de membro desconhecido deverá ser familiar se você já trabalhou com sistemas de banco de dados multidimensionais, como o SQL Server Analysis Services. Se o termo for novo para você, o exemplo a seguir explicará o que é membro desconhecido é como ele afeta os cálculos.

Suponha que você esteja criando um cálculo que some as vendas mensais de cada loja, mas uma coluna da tabela Sales esteja sem um valor para o nome da loja. Considerando-se que as tabelas de Store e Sales estão conectadas pelo nome da loja, o que você espera que aconteça na fórmula? Como o grupo de Tabelas Dinâmicas deve agrupar ou exibir os valores de vendas que não estão relacionados a uma loja existente?

Esse problema é comum em data warehouses, onde tabelas grandes de dados de fato devem ser logicamente relacionadas a tabelas de dimensão que contêm informações sobre lojas, regiões e outros atributos usados para categorizar e calcular fatos. Para resolver o problema, quaisquer novos fatos não relacionados a uma entidade existente são atribuídos temporariamente ao membro desconhecido. Isso porque fatos não relacionados parecerão agrupados em uma Tabela Dinâmica com um título em branco.

Tratamento de valores em branco X linha em branco

Os valores em branco são diferentes das linhas em branco adicionadas para acomodar o membro desconhecido. O valor em branco é um valor especial usado para representar nulos, cadeias de caracteres vazios e outros valores não encontrados. Para obter mais informações sobre o valor em branco, bem como outros tipos de dados DAX, consulte Tipos de dados com suporte em pastas de trabalho PowerPivot.