Utilizar funções de modificador de filtro

Concluído

Ao utilizar a CALCULATE função, pode transmitir funções de modificação de filtro, que lhe permitem realizar mais do que adicionar filtros sozinho.

Remover filtros

Utilize a REMOVEFILTERS função DAX como uma expressão de CALCULATE filtro para remover filtros do contexto de filtro. Esta função permite remover filtros de uma ou mais colunas ou de todas as colunas de uma única tabela.

Nota

A REMOVEFILTERS função é relativamente nova. Em versões anteriores do DAX, removeu filtros com a ALL função DAX ou variantes, incluindo as ALLEXCEPT funções DAX e ALLNOBLANKROW . Estas funções funcionam como modificadores de filtro e como funções que apresentam objetos da tabela com valores distintos. Estas funções são mencionadas agora, porque é provável que encontre documentação e exemplos de fórmulas que removem filtros com recurso às mesmas.

No exemplo seguinte, irá adicionar uma nova medida à tabela Vendas que avalia a medida Receita , mas que o faz ao remover filtros da tabela Território de Vendas . Formate a medida como moeda com duas casas decimais.

Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))

Agora, adicione a medida Receita Total por Região ao elemento visual de matriz que se encontra na Página 2 do relatório. O elemento visual de matriz será agrupado em três colunas da tabela Território de Vendas nas linhas: Grupo, País e Região.

Repare que todos os valores de Receita Total por Região são iguais. Este é o valor da receita total.

Embora este resultado não seja útil de forma independente, quando utilizado como um denominador num rácio, calcula uma percentagem do total geral. Assim, vai agora substituir a definição da medida Receita Total por Região pela definição seguinte. (Esta nova definição altera o nome da medida e declara duas variáveis. Certifique-se de que formatar a medida como uma percentagem com duas casas decimais.)

Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory')
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalRegionRevenue
    )

Confirme que o elemento visual de matriz agora mostra os valores de Receita Total por Região em %.

Agora, vai criar outra medida, mas, desta vez, vai calcular o rácio da receita de uma região dividido pela receita do país correspondente.

Antes de concluir esta tarefa, repare que o valor de Receita Total por Região em % para a região Sudoeste é de 22,95%. Investigue o contexto de filtro desta célula. Mude para a vista de dados e, em seguida, no painel Campos , selecione a tabela Território de Vendas .

Aplique os seguintes filtros de colunas:

  • Grupo – América do Norte
  • País – Estados Unidos
  • Região – Sudoeste

Repare que os filtros reduzem a tabela a apenas uma linha. Agora, enquanto determina o novo objetivo de criar um rácio da receita da região relativamente à receita do país correspondente, limpe o filtro da coluna Região.

Repare que agora existem cinco linhas, cada uma pertencente ao país Estados Unidos. Em conformidade, quando limpa os filtros da coluna Região, ao preservar os filtros nas colunas País e Grupo, fica com um novo contexto de filtro para o país da região.

Na definição de medida seguinte, repare como pode limpar ou remover um filtro de uma coluna. Na lógica DAX, é uma pequena e subtil alteração efetuada à fórmula de medida % da Receita Total da Região : a REMOVEFILTERS função remove agora os filtros da coluna Região em vez de todas as colunas da tabela Território de Vendas .

Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory'[Region])
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalCountryRevenue
    )

Adicione a medida % de Receita Total do País à tabela Vendas e, em seguida, formate-a como uma percentagem com duas casas decimais. Adicione a nova medida ao elemento visual de matriz.

Repare que todos os valores, exceto os valores para as regiões dos Estados Unidos, estão a 100%. Tal deve-se ao facto de, na empresa Adventure Works, os Estados Unidos terem regiões, enquanto os outros países não têm.

Nota

Os modelos tabulares não suportam hierarquias desequilibradas, que são hierarquias com profundidades variáveis. Portanto, repetir valores principais (ou outros predecessores) em níveis inferiores da hierarquia é uma prática de conceção comum. Por exemplo, a Austrália não tem uma região, pelo que o valor país/região é repetido como o nome da região. É sempre preferível guardar um valor com significado do que o valor EM BRANCO.

O exemplo seguinte é a última medida que criará. Adicione a medida Receita Total por Grupo em % e, em seguida, formate-a como uma percentagem com duas casas decimais. Em seguida, adicione a nova medida ao elemento 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 remove filtros das colunas Região e País na tabela Território de Vendas , a medida calculará a receita da região como um rácio das receitas do grupo.

Preservar os filtros

Pode utilizar a KEEPFILTERS função DAX como uma expressão de filtro na CALCULATE função para preservar os filtros.

Para verificar como pode realizar esta tarefa, mude para a Página 1 do relatório. Em seguida, modifique a definição de medida Receita Vermelha para utilizar a KEEPFILTERS função.

Revenue Red =
CALCULATE(
    [Revenue],
    KEEPFILTERS('Product'[Color] = "Red")
)

No elemento visual de tabela, repare que existe apenas um valor Receita a Vermelho. O motivo deve-se ao facto de a expressão de filtro booleano preservar os filtros existentes na coluna Cor na tabela Produto . As outras cores além do vermelho estão EM BRANCO devido aos contextos de filtro e às expressões de filtro estarem combinados para estes dois filtros. A cor preta e a cor vermelha são interseccionadas e, uma vez que ambas não podem ser TRUE ao mesmo tempo, a expressão é filtrada sem linhas de produto. Só é possível que ambos os filtros vermelhos possam ser TRUE ao mesmo tempo, o que explica o motivo pelo qual o valor Receita Vermelha é apresentado.

Utilizar relações inativas

Uma relação de modelo inativa só pode propagar filtros quando a USERELATIONSHIP função DAX é transmitida como uma expressão de filtro para a CALCULATE função. Quando utiliza esta função para criar uma relação inativa, a relação ativa fica inativa automaticamente.

Observe um exemplo de uma definição de medida que utiliza 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

Pode modificar o comportamento da relação do modelo quando uma expressão é avaliada ao transmitir a CROSSFILTER função DAX como uma expressão de filtro para a CALCULATE função. Esta é uma capacidade avançada.

A CROSSFILTER função pode modificar as direções do filtro (de um para um ou de um único para ambos) e até mesmo desativar uma relação.