Usar funções modificadoras de filtro

Concluído

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.

Uma imagem mostra uma matriz intitulada Receita de Revendedor com Grupo, País e Região agrupados por linhas, além dos resumos Receita e Receita da Região Total. O valor da Receita da Região Total é o mesmo para cada grupo de linhas.

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.

Uma imagem mostra um visual de matriz intitulado Receita de Revendedor e tem Grupo, País e Região agrupados por linhas, além dos resumos Receita e 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

Uma imagem mostra os filtros de tabela do Power BI Desktop para a tabela Região de Vendas. Os filtros são aplicados a (1) Grupo = América do Norte, (2) País = Estados Unidos e (3) 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.

Uma imagem 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, 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.

Uma imagem mostra um visual de matriz intitulado Receita de Revendedor e tem Grupo, País e Região agrupados por linhas, além dos resumos Receita, Receita da Região em % do Total e Receita em % do Total do País. Os valores de Receita em % do Total do País para os Estados Unidos são os únicos não equivalentes a 100%.

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
    )

Uma imagem mostra um visual de matriz intitulado Receita de Revendedor e tem Grupo, País e Região agrupados por linhas, além dos resumos Receita, Receita da Região em % do Total, Receita em % do Total do País e Receita em % do Total do Grupo.

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

Uma imagem mostra um visual de tabela com três colunas: Cor, Receita e Receita de Produto Vermelho. Nove linhas e um total são exibidos. Para Receita de Produto Vermelho, somente a linha Vermelho e o total não estão em branco.

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.