Realizar a transição de contexto

Concluído

O que acontece quando uma medida ou uma expressão de medida é avaliada dentro do contexto da 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 à tabela Customer para classificar clientes em uma classe de fidelidade. O cenário é simples: quando a receita produzida pelo cliente é inferior a US$ 2.500, o cliente é classificado como Baixo; do contrário, ele é classificado como Alto.

Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

Na Página 4 do relatório, adicione a coluna Customer Segment como a legenda do gráfico de pizza.

Só existe um valor Customer Segment. O motivo é porque a fórmula de coluna calculada produz um resultado incorreto: cada cliente recebe o valor Alto porque a expressão SUM(Sales[Sales Amount]) não é avaliada em um contexto de filtro. Consequentemente, cada cliente é avaliado com base na soma de cada valor da coluna Sales Amount na tabela Sales.

Para forçar a avaliação da expressão SUM(Sales[Sales Amount]) para cada cliente, uma transição de contexto deve acontecer aplicando os valores da coluna de contexto da linha ao contexto do filtro. Você pode realizar essa transição usando a função CALCULATE sem passar expressões de filtro.

Modifique a definição de coluna calculada, de maneira que ela produza o resultado correto.

Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

No visual do gráfico de pizza, adicione a nova coluna calculada à caixa Legenda, verifique se dois segmentos de pizza são exibidos agora.

Nesse caso, a função CALCULATE aplica valores de contexto da linha como filtros, conhecidos 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 na coluna CustomerKey para o valor no contexto da linha.

Se você referenciar medidas em uma expressão avaliada no contexto da linha, a transição do contexto será automática. Assim, você não precisa passar referências de medida para a função CALCULATE.

Modifique a definição de coluna calculada, que faz referência à medida Revenue, e observe que ela continua produzindo o resultado correto.

Customer Segment = 
VAR CustomerRevenue = [Revenue]
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

Você já pode concluir a fórmula da medida Sales Commission. Para produzir um total, você precisa usar uma função de iterador para iterar em todas as regiões no contexto do filtro. A expressão da função de iterador deve usar a função CALCULATE para fazer a transição do contexto da linha para o contexto do filtro. Ela não precisa mais testar se apenas um valor da coluna Country na tabela Sales Territory está no contexto do filtro, porque se sabe que ela está filtrando por apenas um país (porque ela está iterando pelas regiões no contexto do filtro, e uma região pertence a apenas um país).

Alterne para a Página 3 do relatório e modifique a definição da 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 da tabela agora exibe um total da comissão de vendas para todas as regiões.