Recordemos el aspecto de nuestra medida:
COUNTROWS (
FILTER (
Customers,
[Sales] > [Average sales per customer]
)
)
Hemos visto que la referencia a la medida [Sales] devuelve el valor correcto (las ventas de cada cliente) y que el problema está en la referencia a la medida [Average sales per customer], que también se evalúa tras una transición de contexto que nos estropea el resultado final. Lo que querríamos sería que no se ejecutase la transición de contexto, o que, si se ejecuta, incluya a todos los clientes ¿Y cómo puede lograrse esto? De un par de formas:
La más sencilla es obtener el valor de [Average sales per customer] fuera del contexto de fila provocado por la función FILTER. Por ejemplo, en una variable:
VAR __avgSales = [Average sales per customer]
RETURN
COUNTROWS (
FILTER (
Customers,
[Sales] > __avgSales
)
)
Ahora, la medida [Average sales per customer] se va a evaluar en contexto de filtro (que es el contexto por defecto cuando creamos medidas) y va a incluir, por lo tanto, a todos los clientes visibles (obviamente, si estamos filtrando los clientes, por ejemplo, mediante una segmentación, los clientes visibles no serán todos los clientes).
Si llevamos esta medida a una tarjeta veremos el resultado correcto:
Otra forma de obtener el mismo resultado sería invocar la medida [Average sales per customer] asegurándonos de que el filtrado de la tabla Customers no se aplica a un único cliente (el siendo iterado), sino a todos los clientes, lo que podemos conseguir con la función CALCULATE e incluyendo como filtro la expresión ALL(Customers):
COUNTROWS (
FILTER (
Customers,
[Sales] >
CALCULATE(
[Average sales per customer],
ALL(Customers)
)
)
)