Hemos aprendido en artículos anteriores a consultar una tabla cualquiera con la función EVALUATE. En el presente artículo vamos a aprender a ordenar una consulta filtrada. Como sabemos el contexto se puede modificar a través de las funciones CALCULATE y CALCULATETABLE. CALCULATETABLE se puede utilizar para filtrar filasen una tabla, la sintaxis es la siguiente:

           CALCULATETABLE(<expression> [,<filter1>] [,<filter2>] [, …] )

La expresión del primer parámetro debe devolver una tabla, la cual se evalúa en un contexto que se modifica por los filtros pasados en los otros parámetros. Por ejemplo, la expresión de abajo se usa para controlar las filas devueltas por la consulta:

EVALUATE 

CALCULATETABLE (

         'Ventas por Territorio';

        'Ventas por Territorio'[País] = "España")

ORDER BY 'Ventas por Territorio'[Id]

Otra de las funciones que se usa para filtrar filas es FILTER, la cual se puede utilizar para aplicar el filtro por cada una de las filas de la tabla que se utiliza en la expresión. En el siguiente ejemplo, el predicado se ejecuta en el contexto de fila pudiéndose aplicar a más de una columna de la misma tabla o tablas relacionadas.

EVALUATE

FILTER (‘Ventas por Internet’;

          ‘Ventas por Internet'[Fecha de Embarque] > ‘Ventas por Internet'[Fecha de Entrega]

)

También podemos anidar filtros, cuya forma de evaluación se realiza del nivel más profundo al nivel alto. Por ejemplo,

EVALUATE

FILTER (

      FILTER(

            ‘Ventas por Internet’;

            ‘Ventas por Internet'[Fecha de Embarque] > ‘Ventas por Internet'[Fecha de Entrega]);

      ‘Ventas por Internet'[Precio Unitario] > 2

   )

Por cada fila de la tabla Ventas por Internet, se evalúa el filtro «Fecha de Embarque > Fecha Entrega», después para las filas que cumplen esta condición se evalúa la segunda condición «Precio Unitario > 2». Como se deben cumplir ambas condiciones, esta expresión se puede sustituir por la siguiente:

EVALUATE

FILTER ('Ventas por Internet'; 

         'Ventas por Internet'[Fecha de Embarque] > 'Ventas por Internet'[Fecha                                  de Entrega] && 'Ventas por Internet'[Precio Unitario] > 2

   )

Existe, por lo tanto, una equivalencia entre ambas sentencias tanto la nested expresión como la que utiliza un short circuit logical AND.

Las dos funciones CALCULATETABLE y FILTER son dos de las funciones más potentes e importantes de DAX.