Uso de medidas en contexto de fila

Otro factor a tener en cuenta es que, si estamos en contexto de fila, la máquina DAX va a rodear cualquier medida a la que hagamos referencia con un CALCULATE implícito (también de forma automática y sin que sea visible), forzando la transición de contexto.

Pongamos un ejemplo: ya tenemos una medida que calcula la suma de la columna Sales[Amount] (la medida [Sales]):

Sales = SUM(Sales[Amount])

Y ya hemos visto que, si creamos una columna calculada haciendo uso explícito de la función SUM, obtenemos las ventas totales con independencia de la subcategoría de que se trate:

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

Pues bien, si en lugar de usar la función SUM hiciésemos referencia a la medida [Sales] para crear la columna calculada:

Subcategory Sales = [Sales]

El resultado no coincidiría con el mostrado en la captura de pantalla anterior:

Uso de medidas en contexto de fila

De hecho, el resultado es el correspondiente al obtenido cuando se ejecuta la transición de contexto. El motivo es, como se ha comentado, que la máquina DAX rodea la medida con un CALCULATE implícito. Es decir, lo que realmente se está ejecutando es esto:

Subcategory Sales =
CALCULATE(
    [Sales]
)

O, yendo más allá, para -por ejemplo- el primer valor de la columna que estamos creando (el correspondiente a la subcategoría “Servers”), lo que realmente se está ejecutando es esto:

Subcategory Sales = 
CALCULATE(
    [Sales],
    Subcategory[Category Id] = 1,
    Subcategory[Subcategory] = "Servers",
    Subcategory[Subcategory Id] = 1
)
Este comportamiento, si no se tiene en cuenta, puede provocar que el resultado que obtengamos de una expresión DAX sea totalmente incomprensible, por lo que conviene que nos acostumbremos a imaginar un CALCULATE implícito rodeando a cualquier medida referenciada en contexto de fila.