Examinar contexto de filtro
A função VALUES
do DAX permite que as suas fórmulas determinem quais valores estão no contexto do filtro.
A sintaxe da função VALUES
é a seguinte:
VALUES(<TableNameOrColumnName>)
A função requer a passagem de uma referência de tabela ou uma referência de coluna. Quando você passa uma referência de tabela, ela retorna um objeto de tabela com as mesmas colunas que contêm linhas para o que está no contexto de filtro. Quando você passa uma referência de coluna, ela retorna uma tabela de coluna única de valores exclusivos que estão no contexto de filtro.
A função sempre retorna um objeto de tabela e é possível que uma tabela contenha várias linhas. Portanto, para testar se um valor específico está no contexto de filtro, sua fórmula precisa primeiro testar se a função VALUES
retorna apenas uma linha. Duas funções podem ajudar você a realizar essa tarefa: as funções HASONEVALUE
e SELECTEDVALUE
do DAX.
A função HASONEVALUE
retorna TRUE
quando uma determinada referência de coluna foi filtrada para apenas um valor.
A função SELECTEDVALUE
simplifica a tarefa de determinar qual pode ser um valor individual. Quando a função é passada para uma referência de coluna, ela retorna apenas um valor; quando mais de um valor está no contexto de filtro, ela retorna em branco (ou um valor alternativo que você passa para a função).
No exemplo a seguir, você usará a função HASONEVALUE
. Adicione a medida a seguir, que calcula a comissão de vendas na tabela Sales. Observe que, na Adventure Works, a taxa de Comissão é 10% da receita para todos os países/regiões, exceto os Estados Unidos. Na Estados Unidos, os vendedores recebem 15% de comissão. Formate a medida como moeda com duas casas decimais e, em seguida, adicione-a à tabela encontrada na Página 3 do relatório.
Sales Commission =
[Revenue]
* IF(
HASONEVALUE('Sales Territory'[Country]),
IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
Observe que o resultado da Comissão de Vendas total está em branco. O motivo é porque vários valores estão no contexto de filtro para a coluna Country na tabela Sales Territory. Nesse caso, a função HASONEVALUE
retorna FALSE
, o que resulta na multiplicação da medida Revenue por um valor BLANK (um valor multiplicado por BLANK também é BLANK). Para produzir um total, você precisará usar uma função de iterador, que é explicada posteriormente neste módulo.
Três outras funções que você pode usar para testar o estado do filtro são:
-
ISFILTERED
– retornaTRUE
quando uma referência de coluna inserida é filtrada diretamente. -
ISCROSSFILTERED
– retornaTRUE
quando uma referência de coluna inserida é filtrada indiretamente. Uma coluna é considerada com filtros cruzados quando um filtro aplicado a outra coluna na mesma tabela ou em uma tabela relacionada afeta a coluna de referência filtrando-a. -
ISINSCOPE
– retornaTRUE
quando uma referência de coluna inserida é o nível em uma hierarquia de níveis.
Retorne para Página 2 do relatório e modifique a definição da medida Revenue % Total Country para testar se a coluna Region na tabela Sales Territory está no escopo. Se não estiver no escopo, o resultado da medida deverá ficar em branco.
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
IF(
ISINSCOPE('Sales Territory'[Region]),
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
)
No visual de matriz, observe que os valores de Receita em % do Total do País agora são exibidos apenas quando uma região está no escopo.