Efectivamente, los cálculos realizados en ambas variables están devolviendo el mismo resultado, cosa que podríamos comprobar si modificásemos (temporalmente) nuestra medida para mostrar no el resultado de la división, sino el supuesto total de ventas que estamos obteniendo:
VAR __sales = [Sales]
VAR __allSales =
CALCULATE(
[Sales],
ALL('Calendar'[Date])
)
RETURN
__allSales
Si damos a la medida formato de moneda, nuestra matriz mostrará lo siguiente:
Es decir, el resultado de nuestro CALCULATE es el mismo que el devuelto por la medida [Sales] o, dicho con otras palabras, no estamos eliminando los filtros adecuadamente.
Pensemos: ¿Cuál es el contexto de filtro inicial que rodea al cálculo de la medida [Sales %] para 2015, por ejemplo? (en rojo en la imagen anterior). Bueno, solo hay una fuente de filtrado, que es… ¿el campo [Date] de la tabla calendario? ¡No! El contexto de filtro inicial está filtrando el año que se ha extraído de la columna Calendar[Date]. Y no es lo mismo. ¿Y dónde está esa supuesta columna conteniendo el año? No lo sabemos.
De forma que, como para obtener el resultado que queremos tenemos que limpiar la columna correcta pero no la vemos -ni podemos verla-, no nos queda otro remedio más que limpiar los filtros que se estén aplicando a toda la tabla Calendar, de la siguiente manera:
VAR __sales = [Sales]
VAR __allSales =
CALCULATE(
[Sales],
ALL('Calendar')
)
RETURN
DIVIDE(
__sales,
__allSales
)
Ahora la matriz sí muestra el resultado esperado:
Este es el planteamiento que se sigue en la sección correspondiente del bloque teórico dedicado a la función CALCULATE.