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 DAX 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 DAX ALL
ou variantes, incluindo as funções DAX 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 é provável que você encontre exemplos de documentação e fórmulas que fazem uso delas para remover filtros.
No exemplo a seguir, você adicionará 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 da matriz será agrupado por três colunas da tabela Sales Territory nas linhas: Group, Country e Region.
Observe que o valor de cada Revenue Total Region é o mesmo. É o 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, agora você substituirá a definição da medida Revenue Total Region pela definição a seguir. (Essa nova definição altera o nome da medida e declara duas variáveis. Formate 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 da matriz agora exibe os valores de Revenue % Total Region.
Agora você 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 o modo de exibição de dados e, no painel Campos, 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 preserva 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 da 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 em um em BRANCO.
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 da 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 calculará 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 DAX 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 da tabela, observe que existe apenas um valor de Revenue Red. O motivo é que a expressão de filtro booliana preserva os filtros existentes na coluna Color da tabela Product. O motivo pelo qual as cores diferentes de vermelho estão EM BRANCO é 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 de vermelho possam ser TRUE
ao mesmo tempo, o que explica por que apenas o valor de Revenue Red é mostrado.
Usar relacionamentos inativos
Um relacionamento de modelo inativo só pode propagar filtros quando a função DAX 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 envio:
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 DAX 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.