Realizar a transição de contexto
O que acontece quando uma medida ou expressão de medida é avaliada no contexto de linha? Este cenário pode ocorrer numa fórmula de coluna calculada ou quando se avalia uma expressão numa função de iterador.
No exemplo seguinte, irá adicionar uma coluna calculada à tabela Cliente para classificar os clientes numa classe de fidelização. O cenário é simples: quando a receita produzida pelo cliente for inferior a $2500, o cliente é classificado como Baixo; caso contrário, são classificados como Altos.
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 Clientes como a legenda do gráfico circular.
Repare que existe apenas um valor de Segmento de Clientes. Tal deve-se ao facto de a fórmula da coluna calculada produzir um resultado incorreto: atribui-se a cada cliente o valor Elevado, porque a expressão SUM(Sales[Sales Amount])
não é avaliada num contexto de filtro. Consequentemente, cada cliente é avaliado sobre a soma de cada valor de coluna Montante de Vendas na tabela Vendas.
Para forçar a avaliação da expressão SUM(Sales[Sales Amount])
para cada cliente, tem de ocorrer uma transição de contexto que aplica os valores da coluna de contexto de linha ao contexto de filtro. Pode efetuar esta transição utilizando a CALCULATE
função sem transmitir expressões de filtro.
Modifique a definição de coluna calculada para que produza o resultado correto.
Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
No elemento visual do gráfico circular, adicione a nova coluna calculada ao conjunto Legenda, verifique se são agora apresentados dois segmentos circulares.
Neste caso, a CALCULATE
função aplica valores de contexto de linha como filtros, conhecidos como transição de contexto. Em termos precisos, o processo não funciona muito bem dessa forma quando uma única coluna está na tabela. Quando tal acontece, só precisa de aplicar um filtro nessa coluna para concretizar a transição. Neste caso, o Power BI aplica um filtro na coluna CustomerKey para o valor no contexto de linha.
Se fizer referência às medidas numa expressão que é avaliada no contexto de linha, a transição de contexto será automática. Assim, não precisa de transmitir referências de medida à CALCULATE
função.
Modifique a definição de coluna calculada, que faz referência à medida Receita. Repare que continua a produzir o resultado correto.
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Agora, pode concluir a fórmula da medida Comissão de Vendas. Para produzir um total, precisa de utilizar uma função de iterador para iterar em todas as regiões no contexto de filtro. A expressão da função iterador tem de utilizar a CALCULATE
função para fazer a transição do contexto de linha para o contexto de filtro. Tenha em atenção que já não precisa de testar se um único valor de coluna País na tabela Território de Vendas está no contexto de filtro porque se sabe que está a filtrar por um único país (porque está a iterar sobre as regiões no contexto de filtro e uma região pertence apenas a um país).
Mude para a Página 3 do relatório e, em seguida, modifique a definição de medida da Comissão de Vendas para utilizar a SUMX
função iterador:
Sales Commission =
SUMX(
VALUES('Sales Territory'[Region]),
CALCULATE(
[Revenue]
* IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
)
O elemento visual de tabela agora mostra um total da comissão de vendas para todas as regiões.