El motivo principal por el que la función DAX CALCULATE es más rápida que la función DAX FILTER es por la naturaleza de la la misma. La función CALCULATE hace el filtro dentro de la tabla de referencia.

Si consideramos el ejemplo anterior comparando las dos expresiones, es decir:

EuropeSales := CALCULATE( SUM ( Orders[Amount] ), Cities[Continent] = "Europe" )

EuropeSales := SUMX ( FILTER ( Orders, RELATED( Cities[Continent] ) = "Europe" ), Orders[Amount] )

En la primera expresión la función CALCULATE utiliza el filtro de sobre la tabla Cities y el filtro real sobre la tabla Orders, se hace teniendo en cuenta el filtro sobre la tabla Cities, en nuestro caso el continente Europa. Esto es mucho más rápido ya que no es necesario recorrerse toda la tabla Orders para obtener el resultado y además utiliza los índices internos de las tablas.

La segunda expresión utiliza la función SUMX, el filtro sobre la tabla Orders se hace recorriendo toda la tabla a través de la función FILTER, la cual va fila a fila recorriendo completamente la tabla. Esto lo hace sin tener en cuenta los índices internos que se han creado en las tablas entre las tablas Cities y Orders.

Por estos motivos hay que tener mucho cuidado al cambiar SUMX por SUM. Para un cálculo simple, no hay problema pero para cálculos más complicados puede haber problemas de rendimiento y utilización excesiva de memoria. Es recomendable realizar un test antes de decidirse por alguna expresión DAX en concreto.