Usar funções modificadoras de filtro
Ao usar a função CALCULATE
, você pode passar funções de modificação de filtro, que permitem que você realize mais do que 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 tabela.
Observação
A função REMOVEFILTERS
é relativamente nova. Nas versões anteriores do DAX, você removia filtros usando a função ALL
do DAX ou variantes dela, incluindo as funções ALLEXCEPT
e ALLNOBLANKROW
do DAX. Essas funções se comportam tanto como modificadores 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 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 Receita da Região Total 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 de Região de Vendas nas linhas: Grupo, País e Região.
Observe que cada valor de Receita da Região Total é 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 de medida Receita da Região Total 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 um percentual 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 Receita da Região em % do Total.
Agora você criará outra medida, mas, desta vez, calculará a taxa de receita para uma região dividida pela receita do respectivo país.
Antes de concluir esta tarefa, observe que o valor de Receita da Região em % do Total para a região do 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:
- Grupo – América do Norte
- País – Estados Unidos
- Região – 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 Região.
Observe que agora existem cinco linhas, sendo cada linha pertencente ao país Estados Unidos. Da mesma forma, quando você limpa os filtros da coluna Região e preserva filtros nas colunas País e Grupo, 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 do DAX, essa é uma alteração pequena e sutil que é feita na fórmula da medida Revenue % Total Region: a função REMOVEFILTERS
agora remove filtros da coluna Region em vez 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 e formate a tabela Sales como um percentual 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%. O motivo é que, na empresa Adventure Works, há subdivisão em regiões nos Estados Unidos, o que não ocorre em nenhum dos outros países.
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 do 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 Receita em % do Grupo e, em seguida, formate-a como um percentual 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 filters
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 de 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 Receita de Produto Vermelho. O motivo é que a expressão de filtro booliana preserva os filtros existentes na coluna Color na 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 ambas não podem ser TRUE
ao mesmo tempo, a expressão não é filtrada por nenhuma 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
Uma relação de modelo inativo só pode propagar filtros quando a função DAX USERELATIONSHIP
é inserida como uma expressão de filtro para a função CALCULATE
. Quando você usar essa função para acionar uma relação inativa, a relação ativa ficará inativa automaticamente.
Examine um exemplo de uma definição de medida que usa uma relação inativa para calcular a medida Receita por datas de envio:
Revenue Shipped =
CALCULATE (
[Revenue],
USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)
Modificar o comportamento da relação
É possível modificar o comportamento da relação de modelo quando uma expressão é avaliada passando a função DAX CROSSFILTER
como uma expressão de filtro para a função CALCULATE
. Esse é uma funcionalidade avançada.
A função CROSSFILTER
pode modificar as direções de filtro (de ambas para única ou de única para ambas) e até mesmo desabilitar uma relação.