Podría parecer que la función SUMX no es más que una alternativa a SUM, pero no es así ni mucho menos: En la tabla Sales tenemos -para cada venta- una fecha de venta (campo Order Date) y una fecha de entrega (campo Delivery Date). La diferencia de ambas fechas define el tiempo de entrega de cada venta. ¿Cuál es el tiempo medio de entrega para todas nuestras ventas? Para calcularlo tendríamos que obtener el tiempo de entrega por venta y calcular el valor medio para todas las ventas. Podríamos pensar en la posibilidad de crear una columna calculada en la tabla Sales con la diferencia entre la fecha de entrega y la fecha de venta para poder aplicarle la función AVERAGE, pero la creación de columnas calculadas como paso intermedio para realizar un cálculo más complejo no suele ser la mejor opción. Como ya sabemos, debemos tener en cuenta que una columna calculada ocupa espacio en disco y en memoria, y aunque pueda facilitar ciertos cálculos, las desventajas suelen ser mayores que las ventajas.
En todo caso, el cálculo que queremos realizar es exactamente el que realiza una función iteradora: queremos recorrer la tabla Sales haciendo un cálculo (la resta entre las dos fechas) para obtener un resultado intermedio para cada fila y, al final, aplicar una función de agregación a los resultados intermedios que, en este caso, es calcular el valor medio. Nuestra medida sería la siguiente:
AVERAGEX(
Sales,
Sales[Delivery Date] - Sales[Order Date]
)
Comprobamos -una vez más- que, en la expresión que estamos calculando para cada fila, estamos trabajando en presencia de contexto de fila pues estamos haciendo referencia a cada columna sin aplicar ninguna función de agregación.
Si quisiéramos ahora visualizar los tiempos medios de entrega por país, podríamos hacerlo llevando el campo Geography[Country] y nuestra medida a una tabla:
Y este resultado no podríamos haberlo obtenido usando funciones agregadoras “normales” (AVERAGE, en este caso) salvo recurriendo a la creación de columnas calculadas adicionales.