Saltar al contenido

Función de cálculo DAX con y sin FILTRO

Hola, hemos encontrado la respuesta a lo que buscas, desplázate y la hallarás aquí.

Solución:

No sólo los resultados, sino también la forma de obtener esos resultados para ambas medidas no será la misma.

Creé dos medidas similares a su ejemplo para probar esto:

TestAvgNoFilter = CALCULATE([PrcAvg]; cal[ReadDate]=DATE(2018;05;23))
TestAvgFilter = CALCULATE([PrcAvg]; filter(cal; cal[ReadDate]=DATE(2018;05;23)))

Cuando simplemente los arrojo a ambos en la tabla dinámica sin ningún campo o segmentación adicional, por supuesto, ambos muestran el mismo resultado:

foto1

Sin embargo:

  1. Utilizando FILTER tiene un impacto significativo en el rendimiento, que se puede ver claramente al observar los planes de consulta y la utilización de Storage Engine frente a Formula Engine. Crea una tabla temporal adicional que necesita para “interactuar” con los filtros ya existentes provenientes del informe/tabla dinámica (filas, columnas, segmentaciones). No notará nada para el valor promedio simple en una sola celda, pero si su [x] medir en sí es complicado y hay muchos de esos filtros “iniciales”, la diferencia en el tiempo de cálculo puede ser enorme.

  2. FILTER retiene e interactúa con el contexto de filtro inicial, mientras que la expresión de filtro se usa directamente en CALCULATE lo ignora Vea lo que sucede cuando agrego ReadDate a la tabla dinámica:

pic2

Precisamente por eso la medida sin FILTER es más rápido: no le importa qué fechas hay en las columnas, ya calculó una “true” valor, mientras que la medida con FILTER se evalúa a sí mismo contra los filtros iniciales para cada fila.

Los resultados en ambas columnas pueden considerarse correctos; en realidad, todo depende de la interpretación y de cómo nombre las medidas;).

Como regla general, le sugiero que no use FILTER cuando no tienes que hacerlo. Guarde su energía para cuando realmente la necesite.

La diferencia aquí es que CALCULATE permite filtros simples que reemplazarán el contexto de filtro existente. En tu ejemplo, CALCULATE calculará la medida [X] usando el contexto de filtro existente, excepto que elimina cualquier contexto de filtro existente para FactTable[Color] y lo reemplaza con FactTable[Color] = Red.

El FILTER La función es un iterador, lo que significa que recorre la tabla (pasada como su primer argumento) una fila a la vez y evalúa la expresión (segundo argumento) para cada fila. Cuando usted tiene una FILTER función dentro de CALCULATE, combinará el contexto de filtro existente con los resultados del FILTER (en lugar de reemplazarlo como un simple argumento de filtro).

En general, desea usar filtros simples siempre que tenga una opción, ya que el cálculo será más eficiente. sin embargo, el FILTER La función le permite realizar un filtrado mucho más complejo, por lo que sigue siendo muy útil en los casos en que los filtros simples no son suficientes.


Lectura adicional: FILTER() – Cuándo, por qué y cómo usarlo

La sintaxis de DAX de la función de FILTRO automática generada por DAX en lugar de una expresión lógica requiere que exprese una sola columna en la expresión de filtro. Tomemos este ejemplo –

Measure1 = CALCULATE([X], 'FactTable'[Color]="Red")

La sintaxis anterior se transforma internamente en la siguiente, que puede escribir de manera explícita obteniendo el mismo comportamiento de su medida DAX.

Measure1 = CALCULATE([X], FILTER(ALL('FactTable'[Color]), 'FactTable'[Color]="Red"))

Entonces, si usa la última función en el valor de Medida2, obtendrá el mismo resultado.

Para mayor referencia puede visitar este enlace.

Comentarios y puntuaciones del artículo

Si te apasiona la programación, tienes el poder dejar un ensayo acerca de qué te ha impresionado de este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *