Efetuar a transição de contexto

Concluído

O que acontece quando uma medida ou expressão de medida é avaliada no contexto de uma linha? Isto cenário pode ocorrer numa fórmula de coluna calculada ou quando uma expressão numa função de iterador é avaliada.

No exemplo a seguir, você adicionará uma coluna calculada à tabela Customer para classificar os clientes em uma classe de fidelidade. O cenário é simples: Quando a receita produzida pelo cliente é inferior a $2500,, o cliente é classificado como Low; caso contrário, é classificado como High.

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

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

Repare que existe apenas um valor Customer segmento . A razão é que a fórmula da coluna calculada produz um resultado incorreto: A cada cliente é atribuído o valor de High porque a expressão SUM(Sales[Sales Amount]) não é avaliada num contexto de filtro. Consequentemente, cada cliente é avaliado pela soma de cada valor da colunaSales Amount na tabela Sales .

Para forçar a avaliação da expressão SUM(Sales[Sales Amount]) para cada cliente, deve ocorrer uma transição de contexto que aplique os valores da coluna de contexto de linha ao contexto de filtro. É possível efetuar esta transição utilizando a função CALCULATE sem passar expressões de filtro.

Modificar o definição de coluna calculado para que 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 ao poço Legenda e verifique se são agora apresentados dois segmentos de pizza.

Neste caso, a função CALCULATE aplica valores de contexto de linha como filtros, conhecidos como context transition. Para ser exato, o processo não funciona exatamente dessa forma quando existe uma coluna única na tabela. Quando existe uma coluna única na tabela, basta aplicar um filtro a essa coluna para efetuar a transição. Neste caso, Power BI aplica um filtro na coluna CustomerKey para o valor no contexto da linha.

Se fizer referência a medidas numa expressão que é avaliada no contexto de linha, a transição de contexto é automática. Assim, não é necessário passar referências de medidas para a função CALCULATE .

Modificar o definição de coluna calculado, que faz referência à medida Revenue , e verificar que continua a produzir o resultado correto.

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

Agora, pode completar a fórmula da medida Sales Commission . Para produzir um total, é necessário utilizar uma função iteradora para percorrer todas as regiões no contexto do filtro. A expressão da função iteradora deve utilizar a função CALCULATE para efetuar a transição do contexto de linha para o contexto de filtro. Repare que já não precisa de testar se um único valor da coluna Country na tabela Sales Territory está no contexto do filtro porque se sabe que está a filtrar por um único país/região (porque está a iterar sobre as regiões no contexto do filtro e uma região pertence apenas a um país/região).

Mudar para Página 3 do relatório e, em seguida, modificar 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 apresenta agora um total de comissões de vendas para todas as regiões.