En anteriores artículos hemos visto como la función CALCULATE en DAX puede cambiar el Filter Context para una tabla y convertirlo en Row Context. CALCULATE puede hacer más cosas entre otras y la más importante función es manipular, a petición, el Filter Context.

La función CALCULATE acepta dos formas de parámetros de filtro. La primera forma es una expresión Booleana, parecido a la condición de la función FILTER. Este tipo de filtro se conoce como filtro de tabla o table filter. Por ejemplo, la siguiente expresión calcula la cantidad total para el continente europeo.

VentasEuropa:=CALCULATE ( SUM ( Orders[Amount] ); Ciudad[Continente] = "Europa" )

La anterior expresión es similar a la siguiente:

VentasEuropa := SUMX( FILTER( Orders; RELATED ( Ciudad[Continente] ) = "Europa" ); Orders[Amount] )

La diferencia principal entre ambas expresiones es que la función CALCULATE sustituye el filtro actual de la tabla Ciudad por el filtro que tiene la expresión, mientras que la expresión con FILTER retorna blancos si la tabla tiene otro filtro. Por lo tanto, si quieres sustituir el filtro actual por el filtro de la expresión, es mejor utilizar la función CALCULATE.

Como norma, recomiendo utilizar la función CALCULATE en lugar de otras funciones ya que es mucho más rápida, la expresión basada en FILTER es mucho más lenta que la función CALCULATE.  Esta es otra de las razones por las que es importante conocer la función CALCULATE a fondo, siempre es mucho más rápida que otras funciones como FILTER, SUMX ….

En el siguiente artículo, explicaré el motivo de porque la función CALCULATE es más rápida que otras funciones.