Esta seção descreve como criar filtros em fórmulas DAX (Data Analysis Expressions). Você pode criar filtros dentro de fórmulas, para restringir os valores dos dados de origem usados nos cálculos. Para fazer isso, especifique uma tabela como uma entrada para a fórmula e, em seguida, defina 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 dos seus dados.
Neste artigo
Criando um filtro em uma tabela usada em uma fórmula
Você pode aplicar filtros em fórmulas que usam uma tabela como entrada. Em vez de inserir um nome de tabela, use a função FILTRO para definir um subconjunto de linhas da tabela especificada. Esse subconjunto é passado para outra função, para operações como agregações personalizadas.
Por exemplo, vamos supor que você tenha uma tabela de dados que contenha informações sobre pedidos de revendedores e queira calcular quanto cada revendedor vendeu. No entanto, você deseja mostrar o valor das vendas apenas para os 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:
=SOMAX(
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Quantity] > 5 &&
'ResellerSales_USD'[ProductStandardCost_USD] > 100),
'ResellerSales_USD'[SalesAmt]
)
A primeira parte da fórmula especifica uma das funções de agregação do Power Pivot, que usa uma tabela como argumento. SOMAXX calcula uma soma em uma tabela.
A segunda parte da fórmula
FILTER(table, expression),informaSUMXquais dados usar.SUMXRequer uma tabela ou uma expressão que resulte em uma tabela. Aqui, em vez de usar todos os dados em uma tabela, você usa aFILTERfunção para especificar quais linhas da tabela são usadas.
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 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 à
SUMXfunção quais valores devem ser somados. Nesse caso, você está usando apenas o valor das vendas.
Observe que funções como FILTRO, que retornam uma tabela, nunca retornam a tabela ou as linhas diretamente, mas estão sempre incorporadas em outra função. Para obter mais informações sobre FILTER e outras funções usadas para filtragem, incluindo mais exemplos, consulte Funções de filtro (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 retornado poderá ser afetado por filtros ou Segmentações de Dados adicionais que o usuário aplicou na Tabela Dinâmica. Para obter mais informações sobre 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 VALORES também retorna uma lista de valores exclusivos, mas também retorna o membro Desconhecido. Isso é útil quando você usa valores de duas tabelas 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 é passada 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 do produto (Product Key) exclusiva, e contar os produtos nessa lista usando a função COUNTROWS:
=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))
Como o contexto afeta os filtros
Quando você adiciona uma fórmula DAX a uma Tabela Dinâmica ou a um 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 em um Gráfico Dinâmico, contexto significa o conjunto ou subconjunto de dados definido por operações como fatiamento ou filtragem. O design da Tabela Dinâmica ou do 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 adicionadas à 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.
Remoção de filtros
Ao trabalhar com fórmulas complexas, convém saber exatamente quais são os filtros atuais ou 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 os resultados em uma fórmula.
Substituindo todos os filtros com a função ALL
Você pode usar a ALL função para substituir todos os filtros que foram aplicados anteriormente e retornar todas as linhas da 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 ALL função retornará todas as linhas, ignorando os filtros de contexto.
Observação
Se você estiver familiarizado com a terminologia do banco de dados relacional, poderá pensar ALL como gerando a junção externa esquerda natural de todas as tabelas.
Por exemplo, vamos supor 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 pode estar usando uma Segmentação de Dados para filtrar um produto específico, com o nome do produto nas linhas. Portanto, para obter o valor verdadeiro do denominador, independentemente de quaisquer filtros ou segmentações de dados, 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:
=SOMA (Vendas[Valor])/SOMAX(Vendas[Valor], FILTRO(Vendas, TODOS(Produtos)))
- A primeira parte da fórmula, SOMA (Vendas[Valor]), calcula o numerador.
- A soma leva em conta o contexto atual, o que significa que, se você adicionar a fórmula a uma coluna calculada, o contexto de linha será aplicado e, se você adicionar a fórmula a uma Tabela Dinâmica como medida, todos os filtros aplicados na Tabela Dinâmica (o contexto de filtro) serão aplicados.
- A segunda parte da fórmula calcula o denominador. A função ALL substitui todos os filtros que possam ser aplicados à
Productstabela.
Para obter mais informações, incluindo exemplos detalhados, consulte Função ALL.
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 de todos, ALLEXCEPT é mais conveniente do que ALL. A função ALLEXCEPT é particularmente útil quando você está criando tabelas dinâmicas que podem ser filtradas em muitas colunas diferentes e 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 .