RANKX

La función RANKX devuelve la posición o rango del cada valor resultante de aplicar una expresión a las filas de una tabla comparándolos entre sí.

Sintaxis

RANKX(
    table,
    expression
    [, value
    [, order
    [, ties]]]
)

Parámetros
  • table: Tabla conteniendo las filas para las que se evaluará la expresión.
  • expression: Expresión a evaluar para cada fila de la tabla.
  • value: Argumento opcional. Escalar o expresión que devuelve un escalar que se desea buscar en la lista de valores a analizar.
  • order: Argumento opcional. Valor que especifica cómo aplicar un rango a un valor (ordenando la lista de abajo arriba o de arriba abajo).
  • ties: 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 value, 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 order 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 order 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 ties 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 ties toma el valor Skip (o si se omite), el siguiente valor tras una igualdad (en nuestro ejemplo, el número 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 ties 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 la 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 repetidos, la máquina DAX los combinará en un único elemento y les aplicará el ranking 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:

Función RANKX. Ejemplo de uso

Comencemos definiendo una medida que calcule las ventas totales:

Ventas totales = SUM(Ventas[Cantidad])

...y llevemos a una visualización tipo "Tabla" el campo Producto y la medida recién creada:

Función RANKX. Ejemplo de uso

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:

Función RANKX. Ejemplo de uso

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 encontrase 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 order:

Rango = RANKX(ALL(Ventas[Producto]), Ventas[Ventas totales], ,1)

Puede apreciarse cómo, en este caso, el tercer argumento no se incluye en la definición de la medida. Si actualizamos la tabla anterior obtenemos lo siguiente:

Función RANKX. Ejemplo de uso

Si, volviendo a ordenar los rangos de mayor a menor, queremos saber qué posición ocupa el producto que ha tenido ventas de 6 unidades, la medida tendría que ser modificada de la siguiente forma:

Rango = RANKX(ALL(Ventas[Producto]), Ventas[Ventas totales], 6)

Podemos llevar la medida a una visualización tipo "Tarjeta" para ver el resultado:

Función RANKX. Ejemplo de uso

Efectivamente, fue el producto C que, con ventas de 6 unidades, ocupa la segunda posición.

Imaginemos ahora que queremos calcular la posición del producto del que se vendieron 5 unidades (y sabemos que no hay ningún producto con esta cifra de ventas):

Rango = RANKX(ALL(Ventas[Producto]), Ventas[Ventas totales], 5)

Ahora, la visualización anterior muestra lo siguiente:

Función RANKX. Ejemplo de uso

Básicamente, lo que está diciéndonos la medida es "si existiese un producto para el que se hubiesen registrado ventas por valor de 5 unidades, ocuparía la posición 3 en el ranking".

Como se ha comentado, en el caso de estar calculando rankings para elementos duplicados, la máquina DAX los combina en un único elemento y les aplica el ranking más elevado que tendrían por separado.

Para ver esto, consideremos el listado de clientes (en el que tenemos tanto el nombre de pila como el apellido y el nombre completo) y las ventas asociadas a cada uno. Suponiendo que el nombre completo se encuentre en el campo Customer[Name] y que las ventas estén calculadas en la medida [Sales], podemos evaluar el ranking de cada clientes con la siguiente medida:

Rank = RANKX(ALL(Customer[Name]), [Sales])

Si llevamos el campo con el nombre completo, las ventas y este ranking a una tabla, el resultado es el siguiente:

Nombres completos, ventas y su ranking

Observamos cómo dos clientes tienen como nombre de pila Alisha y reciben rankings 94 y 26.

Si sustituimos el nombre completo por el nombre de pila y modificamos la medida que calcula el ranking:

Rank = RANKX(ALL(Customer[FirstName]), [Sales])

...el resultado es el siguiente:

Nombres de pila, ventas y ranking

Efectivamente, la máquina DAX ha combinado ambos nombres y ha asignado al resultado el valor del mayor ranking: 26.

Categoría
Estadísticas
Enviado por admin el Lun, 03/12/2018 - 23:02