Realizar la transición de contexto
¿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 iteradora.
En el siguiente ejemplo, añadirá 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, añade la columna Customer Segment como leyenda del gráfico circular.
Como puede ver, solo hay 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, añada la nueva columna calculada al depósito Leyenda y compruebe 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 tiene 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.
Modifique la definición de la columna calculada, que hace referencia a la medida Revenue; como puede ver, continúa generando el resultado correcto.
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Ahora puede completar la fórmula de la medida Sales Commission. Para generar un total, debe usar una función iteradora 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. Tenga 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 o región (porque está iterando por las regiones en el contexto de filtro y una región pertenece solo a un país o región).
Cambia a la página 3 del informe y modifique la definición de la medida Sales Commission a fin de usar la función iteradora 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.