Cálculo de clasificaciones

Completado

La función RANKX de DAX es una función especial del iterador que se puede usar para calcular clasificaciones. Su sintaxis es la siguiente:

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

Al igual que con todas las funciones del iterador, debe pasar una tabla y una expresión. De manera opcional, puede pasar un valor de clasificación para establecer la dirección del orden o para determinar cómo controlar las clasificaciones cuando los valores están asociados.

Dirección del orden

La dirección del orden es ascendente o descendente. Al clasificar algo favorable, como los valores de ingresos, es probable que use el orden descendente para que los ingresos mayores se clasifiquen primero. Al clasificar algo no favorable, como las quejas de los clientes, puede usar el orden ascendente para que el número más bajo de quejas se clasifique primero. Cuando no se pasa un argumento de orden, la función usará 0 (cero) para el orden descendente.

Control de asociaciones

Para controlar las asociaciones, puede omitir los valores de clasificación o usar la clasificación densa, que usa el valor de clasificación siguiente después de una asociación. Cuando no se pasa un argumento de asociaciones, la función usará Skip (omitir). Tendrá la oportunidad de trabajar con un ejemplo de cada argumento de asociación a lo largo de esta unidad.

Creación de medidas de clasificación

Agregue la siguiente medida a la tabla Product:

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity]
)

Agregue la medida Product Quantity Rank (Clasificación por cantidad de producto) al objeto visual de tabla que se encuentra en la Página 2 del informe. El objeto visual de tabla agrupa productos de bicicletas y muestra la cantidad, lo que ordena los productos por cantidad descendente.

La función RANKX recorre en iteración una tabla devuelta por la función ALL de DAX. La función ALL se usa para devolver todas las filas de una tabla de modelo o valores en una o más columnas y omite todos los filtros. Por lo tanto, en este caso, devuelve una tabla que consta de todos los valores de la columna Product de la tabla Product. La función RANKX debe usar la función ALL, porque el objeto visual de tabla se agrupará por producto (que es un filtro en la tabla Product).

En el objeto visual de tabla, observe que dos productos se asocian en el décimo lugar y que la clasificación del producto siguiente es 12. Este objeto visual es un ejemplo del uso del argumento de asociaciones Skipped (Omitido).

Una imagen muestra un objeto visual de tabla con el título Bike Sales (Ventas de bicicletas). Tiene tres columnas: Product (Producto), Quantity (Cantidad) y Product Quantity Rank (Clasificación por cantidad de producto). Las filas de la tabla se ordenan por Cantidad descendente. Dos productos comparten la clasificación 10 y el producto siguiente tiene la clasificación 12.

La próxima tarea es escribir la lógica siguiente para modificar la definición de la medida Product Quantity Rank (Clasificación por cantidad de producto) para usar la clasificación densa:

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity],
    ,
    ,
    DENSE
)

En el objeto visual de tabla, observe que ya no existe una clasificación de omisión. Después de los dos productos que se asocian en el décimo lugar, la clasificación siguiente es 11.

Una imagen muestra un objeto visual de tabla con el título Bike Sales (Ventas de bicicletas). Tiene tres columnas: Product (Producto), Quantity (Cantidad) y Product Quantity Rank (Clasificación por cantidad de producto). Las filas de la tabla se ordenan por Cantidad descendente. Dos productos comparten la clasificación 10 y el producto siguiente tiene la clasificación 11.

Tenga en cuenta que el total del objeto visual de tabla correspondiente a Product Quantity Rank (Clasificación por cantidad de producto) es uno (1). La razón es que el total de todos los productos está clasificado.

Imagen que muestra que Product Quantity Rank (Clasificación por cantidad de producto) total es 1.

No es adecuado clasificar el total de los productos, por lo que ahora se usará la lógica siguiente para modificar la definición de medida para que devuelva BLANK, a menos que se filtre un solo producto:

Product Quantity Rank =
IF(
    HASONEVALUE('Product'[Product]),
    RANKX(
        ALL('Product'[Product]),
        [Quantity],
        ,
        ,
        DENSE
    )
)

Imagen que muestra que Product Quantity Rank (Clasificación por cantidad de producto) total es BLANK.

Observe que la Product Quantity Rank (Clasificación por cantidad de producto) ahora es BLANK, lo que se logró mediante el uso de la función HASONEVALUE de DAX para probar si la columna Product de la tabla Product tiene un valor único en el contexto de filtro. Es el caso para cada grupo de productos, pero no para el total, que representa todos los productos.

El contexto de filtro y la función HASONEVALUE se introducirán en el módulo de contexto de filtro.