Usar funções modificadoras de filtro
Ao usar a função CALCULATE, é possível passar funções de modificação de filtro, que permitem que você faça mais do que apenas adicionar filtros.
Remover filtros
Use a função REMOVEFILTERS como uma expressão de filtro CALCULATE para remover filtros do contexto de filtro. Ela pode remover filtros de uma ou mais colunas ou de todas as colunas de uma única tabela.
Observação
A função REMOVEFILTERS é relativamente nova. Em versões anteriores do DAX, você removia filtros usando a função ALL ou variantes, incluindo as funções ALLEXCEPT e ALLNOBLANKROW. Essas funções se comportam tanto como modificadoras de filtro quanto como funções que retornam objetos de tabela de valores distintos. Essas funções são mencionadas agora porque possivelmente você encontrará exemplos de documentação e fórmulas que fazem uso delas para remover filtros.
No exemplo a seguir, você adiciona uma nova medida à tabela Sales, que avalia a medida de Revenue, mas faz isso removendo filtros da tabela Sales Territory. Formate a medida como moeda com duas casas decimais.
Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))
Agora, adicione a medida Revenue Total Region ao visual de matriz que é encontrado na Página 2 do relatório. O visual de matriz será agrupado por três colunas da tabela Sales Territory nas linhas: Group, Country e Region.
Observe que os valores da medida Revenue Total Region são iguais. Trata-se do valor da receita total.
Embora esse resultado não seja útil, quando ele é usado como um denominador em uma taxa, ele calcula um percentual do total geral. Portanto, você substituirá a definição de medida Revenue Total Region pela definição a seguir. Essa nova definição altera o nome da medida e declara duas variáveis. Certifique-se de formatar a medida como uma porcentagem com duas casas decimais.
Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory')
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalRegionRevenue
)
Verifique se o visual de matriz agora exibe os valores de Revenue % Total Region.
Agora você vai criar outra medida, mas, desta vez, calculará a taxa de receita de uma região dividida pela receita de seu país ou região.
Antes de concluir essa tarefa, observe que o valor de Revenue % Total Region para a região Sudoeste é de 22,95%. Investigue o contexto de filtro desta célula. Alterne para a exibição de dados e, no painel Dados, selecione a tabela Sales Territory.
Aplique os seguintes filtros de coluna:
-
Group- América do Norte -
Country- Estados Unidos -
Region- Sudoeste
Observe que os filtros reduzem a tabela para apenas uma linha. Agora, ao pensar em seu novo objetivo de criar uma proporção entre a receita da região e a receita do seu país, desmarque o filtro na coluna Region.
Observe que agora existem cinco linhas, sendo cada linha pertencente ao país Estados Unidos. Da mesma forma, ao limpar os filtros da coluna Region e preservar filtros nas colunas Country e Group, você obtém um novo contexto de filtro para o país da região.
Na definição de medida a seguir, observe como é possível limpar ou remover um filtro de uma coluna. Na lógica DAX, é uma alteração pequena e sutil feita na fórmula de medida Revenue % Total Region: a função REMOVEFILTERS agora remove filtros da coluna Region, e não de todas as colunas da tabela Sales Territory.
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
Adicione a medida Revenue % Total Country à tabela Sales e formate-a como uma porcentagem com duas casas decimais. Adicione a nova medida ao visual de matriz.
Observe que todos os valores, exceto os valores para as regiões dos Estados Unidos, são de 100%. Isso porque na empresa Adventure Works, os Estados Unidos têm regiões, enquanto todos os outros países/regiões, não.
Observação
Os modelos tabulares não dão suporte a hierarquias desbalanceadas, que são hierarquias com profundidades variáveis. Portanto, a repetição de valores pai (ou outros ancestrais) em níveis inferiores da hierarquia é uma abordagem de design comum. Por exemplo, a Austrália não tem uma região, portanto, o valor de país/região é repetido como o nome da região. É sempre melhor armazenar um valor significativo em vez de BLANK.
O exemplo a seguir é a última medida que você criará. Adicione a medida Revenue % Total Group e formate-a como uma porcentagem com duas casas decimais. Em seguida, adicione a nova medida ao visual de matriz.
Revenue % Total Group =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalGroupRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS(
'Sales Territory'[Region],
'Sales Territory'[Country]
)
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalGroupRevenue
)
Quando você remove os filtros das colunas Region e Country na tabela Sales Territory, a medida calcula a receita da região como uma proporção da receita do grupo a que ela pertence.
Preservar filtros
Você pode usar a função KEEPFILTERS como uma expressão de filtro na função CALCULATE para preservar os filtros.
Para observar como realizar essa tarefa, passe para a Página 1 do relatório. Em seguida, modifique a definição da medida Revenue Red para usar a função KEEPFILTERS.
Revenue Red =
CALCULATE(
[Revenue],
KEEPFILTERS('Product'[Color] = "Red")
)
No visual de tabela, observe que existe apenas um valor da medida Revenue Red. Isso porque a expressão de filtro booliana preserva os filtros existentes na coluna Color da tabela Product. As cores diferentes de vermelho são BLANK porque os contextos de filtro e as expressões de filtro estão combinados para esses dois filtros. A cor preta e a cor vermelha são interseccionadas e, como não podem ser TRUE ao mesmo tempo, a expressão não é filtrada por uma linha de produto. Só é possível que ambos os filtros vermelhos sejam TRUE ao mesmo tempo, o que explica por que apenas o valor da medida Revenue Red é mostrado.
Usar relacionamentos inativos
Um relacionamento de modelo inativo só pode propagar filtros quando a função USERELATIONSHIP é passada como uma expressão de filtro para a função CALCULATE. Quando você usar essa função para engajar um relacionamento inativo, o relacionamento ativo ficará inativo automaticamente.
Examine um exemplo de uma definição de medida que usa um relacionamento inativo para calcular a medida Revenue por datas de remessa:
Revenue Shipped =
CALCULATE (
[Revenue],
USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)
Modificar o comportamento do relacionamento
Você pode modificar o comportamento do relacionamento do modelo quando uma expressão é avaliada passando a função CROSSFILTER como uma expressão de filtro para a função CALCULATE. Essa é uma funcionalidade avançada.
A função CROSSFILTER pode modificar as direções do filtro (de ambas para uma única ou de uma única para ambas) e até mesmo desabilitar um relacionamento.