Los filtros ocultos de CALCULATE

Sin embargo, decir que la función CALCULATE hace que “la fila siendo iterada en este momento filtre el modelo de datos” no es contar la historia completa. Lo que realmente ocurre es un poco más complejo: Lo que hace la máquina DAX cuando se encuentra con la función CALCULATE en contexto de fila es añadir (automáticamente y sin que sea visible en ningún momento) filtros a la función CALCULATE, filtros que se corresponden con todos y cada uno de los campos de la tabla que estamos iterando asociándoles el valor que toma en la fila siendo considerada. Es decir, para el cálculo del valor de la columna calculada de la primera fila (la de la subcategoría “Servers”):

Transición de contexto

aun cuando nuestra columna calculada venía dada por la siguiente expresión

Subcategory Sales =
CALCULATE(
    SUM(Sales[Amount])
)

la expresión DAX que realmente se está ejecutando es:

Subcategory Sales = 
CALCULATE(
    SUM(Sales[Amount]),
    Subcategory[Category Id] = 1,
    Subcategory[Subcategory Id] = 1,
    Subcategory[Subcategory] = "Servers"
)

Es decir, la tabla Subcategory se filtra según los tres criterios indicados (que el identificador de categoría tome el valor 1, que el identificador de subcategoría tome el valor 1 y que la subcategoría tome el valor “Servers”). En nuestro modelo de datos, esto deja una única fila visible en la tabla Subcategory (la primera fila), lo que -como ya sabemos- filtra la tabla de productos a través de los campos Subcategory Id que, en ambas tablas, definen la relación, y este filtro aplicado a la tabla de productos filtra, a su vez, la tabla de ventas.