Realizar la transición de contexto

Completado

¿Qué ocurre cuando se evalúa una expresión de medida o una medida en el contexto de fila? Este escenario puede producirse en una fórmula de columna calculada o cuando se evalúa una expresión en una función de iterador.

En el siguiente ejemplo, agregarás una columna calculada a la tabla Customer para clasificar a los clientes en una clase de fidelidad. El escenario es sencillo: cuando los ingresos que produce el cliente son menores a 2500 $, el cliente se clasifica como Bajo; de lo contrario se clasifica como Alto.

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

En la página 4 del informe, agregas la columna Customer Segment como la leyenda del gráfico circular.

Ten en cuenta que solo existe un valor Customer Segment. Esto se debe a que la fórmula de la columna calculada produce un resultado incorrecto: a cada cliente se le asigna el valor Alto porque la expresión SUM(Sales[Sales Amount]) no se evalúa en un contexto de filtro. En consecuencia, a cada cliente se le aplica la suma de cada valor de la columna Sales Amount en la tabla Sales.

Para forzar la evaluación de la expresión SUM(Sales[Sales Amount]) para cada cliente, debe tener lugar una transacción de contexto que aplique los valores de la columna de contexto de fila al contexto de filtro. Puedes lograr esta transición utilizando la función CALCULATE sin pasar expresiones de filtro.

Modifica la definición de la columna calculada para que genere el resultado correcto.

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

En el objeto visual del gráfico circular, agrega la nueva columna calculada al depósito Leyenda y comprueba que se vean ahora dos segmentos circulares.

En este caso, la función CALCULATE aplica valores de contexto de fila como filtros, conocidos como transición de contexto. Para ser precisos, el proceso no funciona de la misma manera cuando en la tabla hay una sola columna. Cuando hay una sola columna en la tabla, solo tienes que aplicar un filtro en esa columna para que se produzca la transición. En este caso, Power BI aplica un filtro en la columna CustomerKey para el valor en el contexto de fila.

Si hace referencia a medidas en una expresión que se evalúa en el contexto de fila, la transición de contexto es automática. Por lo tanto, no es necesario pasar referencias de medidas a la función CALCULATE.

Modifica la definición de la columna calculada, que hace referencia a la medida Revenue; como puedes ver, continúa generando el resultado correcto.

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

Ahora puedes completar la fórmula de medida Sales Commission. Para generar un total, debes usar una función de iterador para iterar todas las regiones en el contexto de filtro. La expresión de la función iteradora debe utilizar la función CALCULATE para hacer la transición del contexto de fila al contexto de filtro. Ten en cuenta que ya no es necesario comprobar si un valor único de la columna Country en la tabla Sales Territory está en el contexto de filtro, ya que sabemos que está filtrando por un único país (porque está iterando por las regiones en el contexto de filtro y una región pertenece solo a un país).

Cambia a la página 3 del informe y modifique la definición de medida Sales Commission para usar la función de iterador SUMX:

Sales Commission =
SUMX(
    VALUES('Sales Territory'[Region]),
    CALCULATE(
        [Revenue]
        * IF(
            VALUES('Sales Territory'[Country]) = "United States",
            0.15,
            0.1
        )
    )
)

En el objeto visual de tabla ahora se muestra un total de comisión de ventas para todas las regiones.