Y, hasta ahora, hemos estado generando tablas calculadas (tablas que hemos añadido al modelo de datos), pero normalmente no va a ser esto lo que hagamos. Por el contrario, lo usual será que, en nuestras medidas, generemos tablas intermedias y las almacenemos en variables para trabajar con ellas en el resto de la expresión DAX. Por ejemplo, si quisiéramos obtener la ciudad italiana con mayores ventas, podríamos conseguirlo con la siguiente medida:
VAR __italianCities =
CALCULATETABLE(
ADDCOLUMNS(
VALUES(Geography[City]),
"Sales", [Sales]
),
Geography[Country] = "Italy"
)
VAR __topCity =
TOPN(
1,
__italianCities,
[Sales]
)
RETURN
SELECTCOLUMNS(
__topCity,
"City", [City]
)
En esta expresión -que se ha escrito así solo por motivos pedagógicos, pues hay otras formas más eficientes y simples de obtener el mismo resultado- comenzamos creando una tabla (que almacenamos en la variable __italianCities) con dos columnas: nombres de ciudades y sus ventas, y realizamos la evaluación modificando el contexto de filtro de forma que solo se consideren las ciudades italianas.
A continuación, nos quedamos con la ciudad con mayores ventas y almacenamos el resultado (que también es una tabla) en la variable __topCity.
Por último, seleccionamos solo la columna City de la tabla anterior. Como es una única columna y contiene una única fila, el valor en cuestión puede devolverse como resultado de una medida.
En ningún caso -salvo que esté justificado por motivos de rendimiento- deberemos crear tablas calculadas en nuestro modelo de datos para almacenar estos resultados intermedios: una tabla calculada añadida al modelo de datos ya sabemos que ocupa espacio en memoria y en disco, complica la gestión del modelo de datos y, lo que es más importante, no son necesarias pues, como estamos viendo, son tablas que pueden generarse temporalmente en variables.