AVERAGEX
La función AVERAGEX devuelve la media aritmética de los valores que toma una
expresión que se evalúa para todas las filas de una tabla.
SINTAXIS
AVERAGEX(<tabla>; <expresión>)
PARÁMETROS
tabla:Tabla conteniendo las filas para las que se evaluará la expresión.
expresión: Expresión a evaluar para cada fila de la tabla.
VALOR DEVUELTO
La función AVERAGEX devuelve un número real.
INFORMACIÓN ADICIONAL
La función evalúa la expresión incluida como segundo argumento para cada una de las
filas de la tabla indicada, devolviendo la media aritmética de los valores encontrados. Solo
se consideran valores numéricos y fechas: la función no acepta valores no numéricos ni
celdas nulas. Cuando no hay valores para los que calcular la media aritmética, la función
devuelve un "blank". Cuando hay filas pero ninguna cumple los criterios adecuados, la
función devuelve 0.
El argumento <tabla> puede ser o bien una tabla o bien una función que devuelva una
tabla.
EJEMPLOS
Supongamos que tenemos la siguiente tabla mostrando el listado de ventas, incluyendo el
número de elementos vendidos y su precio unitario:
Si quisiéramos calcular la media aritmética del valor de las facturas emitidas (esto es, el
precio de venta considerando la cantidad de productos vendidos), podríamos hacerlo con
la siguiente medida:
Precio medio = AVERAGEX(Ventas;Ventas[Precio]*Ventas[Cantidad])
Obteniendo el siguiente resultado (llevado a una visualización tipo "Card"):
LASTDATE
La función LASTDATE devuelve el último día en el contexto actual para la columna de
fechas especificada.
SINTAXIS
LASTDATE(<fechas>)
PARÁMETROS
fechas: Columna conteniendo fechas.
VALOR DEVUELTO
La función LASTDATE devuelve una tabla conteniendo una única columna con una única
fila con un valor de fecha.
INFORMACIÓN ADICIONAL
El argumento <fechas> puede ser una referencia a una columna conteniendo fechas, una
expresión que devuelva una tabla con una única columna conteniendo fechas o una
expresión booleana que defina una tabla con una única columna conteniendo fechas.
Esta función puede ser usada como argumento de cualquier función que requiera una
tabla, pero también puede ser usada allí donde se requiera una fecha.
EJEMPLOS
Considérese la siguiente tabla conteniendo fechas de ventas:
Si llevamos esta información a una matriz en la que tenemos el nombre del mes en filas y
la suma de los importes de venta en columnas tenemos:
En estas condiciones, el contexto de las celdas de la columna "Importe" viene dado por el
mes en el que se produjo la venta. Si ahora definimos la medida "Última Venta":
Última venta = LASTDATE(Ventas[Fecha])
...en la que añadimos como argumento la columna de la tabla de ventas en la que se
incluye las fechas en las que se produjeron las ventas, al llevar esta medida a la matriz
obtenemos:
Es decir, se muestra en la columna "Última venta" la última de las fechas que se incluyen
en la columna Ventas[Fecha] dentro del contexto actual de cada celda.
DATESINPERIOD
La función DATESINPERIOD devuelve un conjunto de fechas a partir de un cierto día y
cubriendo n intervalos del tipo indicado hacia atrás o hacia adelante en el tiempo.
SINTAXIS
DATESINPERIOD(<fechas>; <fecha_comienzo>; <número_de_intervalos>;
<intervalo>)
PARÁMETROS
fechas: columna de referencia conteniendo fechas
fecha_comienzo: día de partida a considerar
número_de_intervalos: número entero que especifica el número de intervalos a
añadir o restar de la fecha de comienzo
intervalo: intervalo a añadir o restar: YEAR, QUARTER, MONTH o DAY
VALOR DEVUELTO
La función DATESINPERIOD devuelve una tabla.
INFORMACIÓN ADICIONAL
Si el número de intervalos indicado es positivo, el intervalo se añadirá a la fecha de inicio
dicho número de veces. Por el contrario, si es negativo, se restará.
El <intervalo> a considerar no deberá escribirse entre comillas.
Esta función DAX no puede usarse en modo DirectQuery.
EJEMPLOS
En este ejemplo se calculan las ventas ocurridas durante las dos semanas que terminan el
23 de abril de 2003 (Sales es una medida que suma la columna de importes de ventas):
RANKX
La función RANKX devuelve la posición (rango) de cada valor resultante de aplicar una
expresión a las filas de una tabla.
SINTAXIS
RANKX(<tabla>; <expresión> [; <valor> [; <orden> [; <igualdades>]]])
PARÁMETROS
tabla:Tabla conteniendo las filas para las que se evaluará la expresión.
expresión: Expresión a evaluar para cada fila de la tabla.
valor: Argumento opcional. Escalar o expresión que devuelve un escalar que se
desea buscar en la lista de valores a analizar.
orden: Argumento opcional. Valor que especifica cómo aplicar un rango a un valor
(ordenando la lista de abajo arriba o de arriba abajo)
igualdades: Argumento opcional. Argumento que determina cómo aplicar rangos
cuando hay igualdades en la lista.
VALOR DEVUELTO
La función RANKX devuelve un número entero.
INFORMACIÓN ADICIONAL
Los valores "Blank" son tratados como ceros.
Si se incluye el argumento <valor>, la función devolverá el rango de dicho valor en la lista
(y solo el rango de este valor, no el rango de los demás valores). Si este valor no se
encuentra en la lista, RANKX lo incluye (temporalmente) en la lista y vuelve a analizarla
para obtener su posición (véase un ejemplo más adelante).
Si <orden> toma el valor DESC, 0 o FALSE (o si se omite), el rango se aplica en orden
descendente. Es decir, el valor más alto de la lista recibirá el número 1. Por el contrario, si
<orden> toma el valor ASC, 1 o TRUE, el rango se aplica en orden ascendente. Es decir,
el valor más bajo de la lista recibirá el número 1.
El argumento <igualdades> determina cómo aplicar rangos tras encontrarse en la lista
valores idénticos. Por ejemplo, si los cinco valores más altos de una lista son 10, 9, 9, 9 y 8
(es decir, si en la posición 2 hay tres valores idénticos), será este argumento el que
determine qué rango recibe el valor 8 situado en la quinta posición de nuestra lista
ordenada. Si <igualdades> toma el valor Skip (o si se omite), el siguiente valor tras una
igualdad (en nuestro ejemplo, el 8) recibirá el rango de los valores de la igualdad (2 en
nuestro ejemplo, pues son el segundo valor más elevado) más el número de elementos de
la igualdad (2 + 3 = 5, en nuestro ejemplo). Por el contrario, si <igualdades> toma el
valor Dense, el siguiente valor tras una igualdad recibirá el siguiente rango al aplicado a
los valores iguales. Es decir, en nuestro ejemplo, el valor 8 recibiría el rango 3 (habría un
valor con rango 1 -el 10-, tres valores con rango 2 -los tres 9-, y un valor con rango 3 -el
8-).
Si no se desea incluir uno de los argumentos, puede añadirse el punto y coma que lo
precede y no añadir valor alguno para el mismo.
En el caso de que se esté calculando el ranking para elementos que puedan mostrarse
repetidos, la máquina DAX los combinará en un único elemento y les aplicará el raking
más elevado que tengan por separado (véase ejemplo más adelante).
EJEMPLOS
Supongamos que tenemos un listado de ventas en el que se incluye el producto vendido y
el número de unidades vendidas:
Comencemos definiendo una medida que calcule las ventas totales para cada producto:
Ventas totales = SUM(Ventas[Cantidad])
...y llevemos a una visualización tipo "Tabla" el campo <Producto> y la medida recién
creada:
Si deseásemos saber qué productos son los más vendidos -independientemente del
contexto- y en qué posición se ordenan tras este análisis, podríamos recurrir a la función
RANKX:
Rango = RANKX(ALL(Ventas[Producto]); Ventas[Ventas totales])
Si añadimos esta medida a la tabla anterior obtenemos:
Como puede verse, la función RANKX ha aplicado los rangos correctamente, dando el
valor 1 al producto más vendido (el producto B, con 7 unidades) y el valor 4 al producto
menos vendido (el producto D, con 2 unidades).
Obsérvese la necesidad de incluir en la definición de la medida <Rango> la función ALL.
De otra forma, cuando la máquina DAX comenzase con el primero de los productos (el
producto A), el contexto quedaría limitado a este producto. Es decir, la medida <Rango> se
calcularía en este contexto limitado a las filas correspondientes al producto A. Y el orden
que ocupan las ventas del producto A en una lista en la que solo se encuentra este
producto es el 1 (es el producto más vendido pues es el único). Y lo mismo ocurriría con
los demás productos: el rango se calcularía siempre considerando una tabla en la que solo
se encuentrase dicho producto, por lo que su rango sería siempre 1.
Supongamos ahora que deseamos que los rangos se apliquen en orden inverso, es decir,
que se dé el valor 1 al producto menos vendido y el 4 al más vendido. Para esto bastaría
con incluir el parámetro <orden>:
Rango = RANKX(ALL(Ventas[Producto]); Ventas[Ventas totales];;1)
Puede apreciarse cómo, en este caso, el tercer argumento no existe en la definición de la
medida. Si actualizamos la tabla anterior obtenemos lo siguiente: