Usar funções modificadoras de filtro

Concluído

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.

Captura de tela da matriz com todos os valores iguais para cada linha na coluna Revenue Total 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.

A captura de tela agora mostra valores exclusivos por região na coluna Revenue e uma nova coluna

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

A captura de tela mostra o painel Dados com filtros para as três colunas, conforme descrito.

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.

A captura de tela mostra o menu de contexto da coluna e o comando Limpar Filtros é realçado.

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.

A captura de tela mostra a matriz com valores individuais para cada região, totalizando 100%.

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
    )

A captura de tela mostra a matriz agora com uma coluna de resumo Revenue % Total Group.

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")
)

A captura de tela mostra uma tabela com Colors, Revenue e Revenue Red. Revenue red retorna resultados apenas onde a cor é vermelha.

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.