O contexto permite 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 é muito importante para compilar fórmulas de alto desempenho, análises dinâmicas 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 deste artigo fornece links para exemplos detalhados que ilustram como os resultados de fórmulas são alterados de acordo com o contexto.
Compreendendo o contexto
As fórmulas do Power Pivot podem ser afetadas pelos filtros aplicados a uma Tabela Dinâmica, pelas relações entre as tabelas e pelos filtros usados em fórmulas. O contexto é o que torna possível executar a análise dinâmica. A compreensão do contexto é importante para compilar e solucionar problemas de fórmulas.
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. Há também algumas funções (EARLIER e EARLIEST) que obtêm um valor da linha atual e, em seguida, usam esse valor durante a execução de 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.
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, =[Frete] + [Imposto], que adicione 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 desta fórmula, consulte a Função EARLIER.
Em resumo, a função EARLIER armazena o contexto de linha da operação que precedeu a operação atual. Em todos os momentos, a função armazena dois conjuntos de contexto na memória: 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. A DAX alimenta automaticamente valores entre os dois loops para que você possa criar agregações complexas.
Contexto de consulta
O Contexto de consulta se refere ao subconjunto de dados recuperados implicitamente para uma fórmula. Quando você solta uma medida ou outro campo de valor em uma célula em uma Tabela Dinâmica, o mecanismo Power Pivot examina os cabeçalhos de linha e coluna, segmentações e filtros de relatório para determinar o contexto. Em seguida, o Power Pivot faz os cálculos necessários para popular cada célula na 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, suponha que você crie esta fórmula simples que soma 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 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 ou região específica, 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 acima, em uma medida e, em seguida, soltá-la em uma Tabela Dinâmica. Sempre que você adiciona títulos 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, você pode 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 as funções Filtrar.
Para obter um exemplo de como os filtros podem ser limpos para criar grandes totais, consulte a Função ALL.
Para obter exemplos de como desmarcar e aplicar filtros seletivamente em fórmulas, consulte a Função ALLEXCEPT.
Portanto, você deve examinar a definição de medidas ou fórmulas usadas em uma Tabela Dinâmica para que você esteja ciente do contexto de filtro ao interpretar os resultados das fórmulas.
Determinando o contexto em fórmulas
Quando uma fórmula é criada, o Power Pivot para Excel verifica primeiro 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 Power Pivot não puder localizar as colunas e tabelas especificadas pela fórmula, um erro será exibido.
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 manipulaçã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 agregações.
-
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 do Power Pivot conectadas por meio de relações. Ela pode ser útil se você tiver pastas de trabalho com várias tabelas e fórmulas complexas e precisar de 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 Power Pivot
O Power Pivot 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 de um para vários e é usada para lidar com 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 está a criar um cálculo que soma as vendas mensais de cada loja, mas uma coluna na tabela Vendas não tem um valor para o nome da loja. Tendo em conta que as tabelas para Loja e Vendas estão ligadas pelo nome da loja, o que esperaria que acontecesse 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 um valor em branco, assim como outros tipos de dados DAX, consulte Tipos de dados com suporte em Modelos de Dados.