Esta seção descreve como criar filtros em fórmulas DAX (Expressões de Análise de Dados). Você pode criar filtros dentro de fórmulas, para restringir os valores dos dados de origem usados nos cálculos. Você faz isso especificando uma tabela como uma entrada para a fórmula e definindo uma expressão de filtro. A expressão de filtro fornecida é usada para consultar os dados e retornar apenas um subconjunto dos dados de origem. O filtro é aplicado dinamicamente sempre que você atualiza os resultados da fórmula, dependendo do contexto atual de seus dados.
Neste artigo
Criando um filtro em uma tabela usada em uma fórmula
Você pode aplicar filtros em fórmulas que tomam uma tabela como entrada. Em vez de inserir um nome de tabela, você usa a função FILTER para definir um subconjunto de linhas da tabela especificada. Esse subconjunto então é passado para outra função, para operações como agregações personalizadas.
Por exemplo, suponha que você tenha uma tabela de dados que contém informações de pedidos sobre revendedores e que deseja calcular quanto cada revendedor vendeu. No entanto, você deseja mostrar o valor de vendas apenas para aqueles revendedores que venderam várias unidades de seus produtos de maior valor. A fórmula a seguir, com base na pasta de trabalho de exemplo DAX, mostra um exemplo de como você pode criar esse cálculo usando um filtro:
=SUMX(
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Quantidade] > 5 && 'ResellerSales_USD'[ProductStandardCost_USD] > 100), 'ResellerSales_USD'[SalesAmt] )-
A primeira parte da fórmula especifica uma das funções de agregação Power Pivot, que usa uma tabela como argumento. O SUMX calcula uma soma em uma tabela.
-
A segunda parte da fórmula, FILTER(table, expression),informa SUMX quais dados usar. SUMX requer uma tabela ou uma expressão que resulte em uma tabela. Aqui, em vez de usar todos os dados em uma tabela, você usa a função FILTER para especificar qual das linhas da tabela é usada.
A expressão de filtro tem duas partes: a primeira parte nomeia a tabela à qual o filtro se aplica. A segunda parte define uma expressão a ser usada como a condição de filtro. Nesse caso, você está filtrando em revendedores que venderam mais de 5 unidades e produtos que custam mais de US$ 100. O operador, &&, é um operador and lógico, que indica que ambas as partes da condição devem ser verdadeiras para que a linha pertença ao subconjunto filtrado.
-
A terceira parte da fórmula informa à função SUMX quais valores devem ser resumidos. Nesse caso, você está usando apenas o valor de vendas.
Observe que funções como FILTER, que retornam uma tabela, nunca retornam a tabela ou as linhas diretamente, mas estão sempre inseridas em outra função. Para obter mais informações sobre FILTER e outras funções usadas para filtragem, incluindo mais exemplos, consulte Filter Functions (DAX).
Observação: A expressão de filtro é afetada pelo contexto em que é usada. Por exemplo, se você usar um filtro em uma medida e a medida for usada em uma Tabela Dinâmica ou Gráfico Dinâmico, o subconjunto de dados retornados poderá ser afetado por filtros adicionais ou Slicers aplicados pelo usuário na Tabela Dinâmica. Para obter mais informações sobre o contexto, consulte Contexto em Fórmulas DAX.
Filtros que removem duplicatas
Além de filtrar valores específicos, você pode retornar um conjunto exclusivo de valores de outra tabela ou coluna. Isso pode ser útil quando você deseja contar o número de valores exclusivos em uma coluna ou usar uma lista de valores exclusivos para outras operações. O DAX fornece duas funções para retornar valores distintos: FUNÇÃO DISTINCT e FUNÇÃO VALUES.
-
A função DISTINCT examina uma única coluna que você especifica como um argumento para a função e retorna uma nova coluna contendo apenas os valores distintos.
-
A função VALUES também retorna uma lista de valores exclusivos, mas também retorna o membro Desconhecido. Isso é útil quando você usa valores de duas tabelas que são unidas por uma relação e um valor está ausente em uma tabela e presente na outra. Para obter mais informações sobre o membro Desconhecido, consulte Contexto em Fórmulas DAX.
Ambas as funções retornam uma coluna inteira de valores; Portanto, você usa as funções para obter uma lista de valores que são passados para outra função. Por exemplo, você pode usar a fórmula a seguir para obter uma lista dos produtos distintos vendidos por um revendedor específico, usando a chave de produto exclusiva e, em seguida, contar os produtos nessa lista usando a função COUNTROWS:
=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))
Como o contexto afeta filtros
Quando você adiciona uma fórmula DAX a uma Tabela Dinâmica ou Gráfico Dinâmico, os resultados da fórmula podem ser afetados pelo contexto. Se você estiver trabalhando em uma tabela Power Pivot, o contexto será a linha atual e seus valores. Se você estiver trabalhando em uma Tabela Dinâmica ou Gráfico Dinâmico, o contexto significa o conjunto ou subconjunto de dados definidos por operações como corte ou filtragem. O design da Tabela Dinâmica ou Gráfico Dinâmico também impõe seu próprio contexto. Por exemplo, se você criar uma Tabela Dinâmica que agrupa vendas por região e ano, somente os dados que se aplicam a essas regiões e anos serão exibidos na Tabela Dinâmica. Portanto, todas as medidas que você adicionar à Tabela Dinâmica são calculadas no contexto dos títulos de coluna e linha, além de quaisquer filtros na fórmula de medida.
Para obter mais informações, consulte Contexto em fórmulas DAX.
Removendo filtros
Ao trabalhar com fórmulas complexas, talvez você queira saber exatamente quais são os filtros atuais ou talvez queira modificar a parte de filtro da fórmula. O DAX fornece várias funções que permitem remover filtros e controlar quais colunas são retidas como parte do contexto de filtro atual. Esta seção fornece uma visão geral de como essas funções afetam resultados em uma fórmula.
Substituindo todos os filtros com a função ALL
Você pode usar a função ALL para substituir todos os filtros que foram aplicados anteriormente e retornar todas as linhas na tabela para a função que está executando a agregação ou outra operação. Se você usar uma ou mais colunas, em vez de uma tabela, como argumentos para ALL, a função ALL retornará todas as linhas, ignorando quaisquer filtros de contexto.
Observação: Se você estiver familiarizado com a terminologia do banco de dados relacional, poderá considerar ALL como gerando a junção externa esquerda natural de todas as tabelas.
Por exemplo, suponha que você tenha as tabelas, Vendas e Produtos e queira criar uma fórmula que calcule a soma das vendas do produto atual dividida pelas vendas de todos os produtos. Você deve levar em consideração o fato de que, se a fórmula for usada em uma medida, o usuário da Tabela Dinâmica poderá estar usando um Slicer para filtrar para um determinado produto, com o nome do produto nas linhas. Portanto, para obter o valor verdadeiro do denominador independentemente de quaisquer filtros ou Slicers, você deve adicionar a função ALL para substituir quaisquer filtros. A fórmula a seguir é um exemplo de como usar ALL para substituir os efeitos dos filtros anteriores:
=SUM (Sales[Amount])/SUMX(Sales[Amount], FILTER(Sales, ALL(Products))
-
A primeira parte da fórmula, SUM (Sales[Amount]), calcula o numerador.
-
A soma leva em conta o contexto atual, o que significa que, se você adicionar a fórmula em uma coluna calculada, o contexto da linha é aplicado e, se você adicionar a fórmula em uma Tabela Dinâmica como medida, todos os filtros aplicados na Tabela Dinâmica (o contexto do filtro) serão aplicados.
-
A segunda parte da fórmula calcula o denominador. A função ALL substitui todos os filtros que podem ser aplicados à tabela Products .
Para obter mais informações, incluindo exemplos detalhados, consulte ALL Function.
Substituindo filtros específicos com a função ALLEXCEPT
A função ALLEXCEPT também substitui os filtros existentes, mas você pode especificar que alguns dos filtros existentes devem ser preservados. As colunas que você nomeia como argumentos para a função ALLEXCEPT especificam quais colunas continuarão a ser filtradas. Se você quiser substituir filtros da maioria das colunas, mas não todas, ALLEXCEPT será mais conveniente que ALL. A função ALLEXCEPT é particularmente útil quando você está criando tabelas dinâmicas que podem ser filtradas em várias colunas diferentes e você deseja controlar os valores usados na fórmula. Para obter mais informações, incluindo um exemplo detalhado de como usar ALLEXCEPT em uma Tabela Dinâmica, consulte Função ALLEXCEPT.