Executar a transição de contexto
O que acontece quando uma medida ou expressão de medida é avaliada dentro do contexto de linha? Esse cenário pode ocorrer em uma fórmula de coluna calculada ou quando uma expressão em uma função de iterador é avaliada.
No exemplo a seguir, você adicionará uma coluna calculada na tabela Customer para classificar os clientes em uma classe de fidelidade. O cenário é simples: Quando a receita produzida pelo cliente é inferior a US$ 2500, os clientes são classificados como Low; caso contrário, eles são classificados como High.
Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Na Página 4 do relatório, adicione a coluna Segmento de Cliente como a legenda do gráfico de pizza.
Observe que existe apenas um valor de Segmento de Cliente. O motivo é que a fórmula da coluna calculada produz um resultado incorreto: Cada cliente recebe o valor de Alta porque a expressão SUM(Sales[Sales Amount])
não é avaliada em um contexto de filtro. Consequentemente, cada cliente é avaliado na soma de cadavalor da coluna Valor das Vendas na tabela Vendas.
Para forçar a avaliação da expressão SUM(Sales[Sales Amount])
para cada cliente, uma transição de contexto que aplica os valores de coluna de contexto de linha ao contexto de filtro precisa ocorrer. É possível realizar essa transição usando a função CALCULATE
sem inserir expressões de filtro.
Modifique a definição de coluna calculada para que ela produza o resultado correto.
Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
No visual de gráfico de pizza, adicione a nova coluna calculada à caixa Legenda. Verifique se agora são exibidos dois segmentos da pizza.
Nesse caso, a função CALCULATE
aplica valores de contexto de linha como filtros, o que é conhecido como transição de contexto. Para ser preciso, o processo não funciona exatamente assim quando há uma coluna exclusiva na tabela. Quando uma coluna exclusiva está na tabela, você só precisa aplicar um filtro a essa coluna para fazer a transição acontecer. Nesse caso, o Power BI aplica um filtro à coluna CustomerKey para o valor no contexto de linha.
Se você referenciar medidas em uma expressão que é avaliada no contexto de linha, a transição de contexto será automática. Portanto, você não precisa inserir referências de medida para a função CALCULATE
.
Modifique a definição de coluna calculada, que faz referência à medida Receita, e observe que ela continua a produzir o resultado correto.
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Agora, você pode concluir a fórmula da medida Comissão de Vendas. Para produzir um total, você precisa usar uma função de iterador para iterar em todas as regiões no contexto de filtro. A expressão de função de iterador precisa usar a função CALCULATE
para fazer a transição do contexto de linha para o contexto de filtro. Observe que ele não precisa mais testar se apenas um valor de coluna Country na tabela Sales Territory está no contexto de filtro, porque sabe-se que ela está filtrando por apenas um país (considerando que ela está iterando pelas regiões no contexto de filtro, sendo que uma região pertence a apenas um país).
Passe para a Página 3 do relatório e modifique a definição de medida Sales Commission para usar a função de iterador SUMX
:
Sales Commission =
SUMX(
VALUES('Sales Territory'[Region]),
CALCULATE(
[Revenue]
* IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
)
O visual de tabela agora exibe um total de comissão de vendas para todas as regiões.