Cómo crear un ranking con RANKX en DAX: paso a paso
Ordenar productos, vendedores o regiones por rendimiento es una de las preguntas más habituales en Business Intelligence. En DAX, la función RANKX permite crear un ranking dinámico que reacciona a los filtros del informe, asignando a cada elemento su posición — 1.º, 2.º, 3.º — en función de una medida. Este tutorial muestra, paso a paso y con un ejemplo, cómo crear un ranking con RANKX en Power BI.
Requisitos previos
- Power BI Desktop instalado (versión gratuita).
- Un modelo con una tabla de hechos (p. ej.
Vendas) y una dimensión (p. ej.Produto). - Conocer lo básico de las medidas en DAX (cómo crear una medida con
SUM).
Paso 1: Crear la medida base
Antes de ordenar, necesitamos algo que ordenar. Vamos a crear una medida sencilla que sume el valor de las ventas. Haga clic derecho en la tabla Vendas, elija Nueva medida y escriba:
Total Vendas = SUM ( Vendas[Valor] )
Esta medida devuelve el total de ventas en el contexto actual — por producto, por mes o global, según el objeto visual donde la coloque. El ranking se calculará sobre este valor.
Paso 2: Crear el ranking con RANKX
Ahora creamos la medida de ranking. La idea es comparar cada producto con todos los demás y devolver su posición. Cree una nueva medida:
Ranking Produtos =
RANKX (
ALL ( Produto[Nome] ),
[Total Vendas],
,
DESC,
Dense
)
Explicando cada argumento: ALL ( Produto[Nome] ) devuelve la lista completa de productos; [Total Vendas] es el valor evaluado para cada producto; el argumento vacío que sigue es el parámetro opcional value, que dejamos en blanco para que RANKX use el valor de la fila actual; DESC coloca el valor más alto en 1.er lugar; y Dense controla cómo se tratan los empates (ver Paso 4).
Paso 3: Entender el papel de ALL
Este es el paso en el que la mayoría se equivoca. Si escribe RANKX ( Produto, [Total Vendas] ) sin ALL, todos los productos muestran un ranking de 1. ¿Por qué? Porque, en una tabla o matriz, cada fila ya está filtrada a un único producto — el contexto de filtro reduce la tabla a esa única fila, y un valor solo siempre queda primero.
La función ALL elimina ese filtro y devuelve todos los productos, dando a RANKX una lista completa con la que comparar. Regla práctica: el primer argumento de RANKX debe contener toda la lista contra la que quiere ordenar.
Paso 4: Controlar empates y orden
El argumento de orden acepta DESC (valor más alto = 1.º, lo más común en un ranking de ventas) o ASC (valor más bajo = 1.º, útil para rankings de coste o de tiempo). El último argumento define los empates:
- Dense: dos productos empatados en 2.º son ambos 2.º y el siguiente es 3.º (1, 2, 2, 3).
- Skip: dos empatados en 2.º son ambos 2.º y el siguiente salta al 4.º (1, 2, 2, 4).
Elija Dense cuando quiera un ranking continuo sin saltos y Skip cuando quiera reflejar cuántos elementos quedaron por delante.
Paso 5: Mostrar solo el Top 5
Un uso frecuente del ranking es destacar los mejores. Puede reutilizar la medida para mostrar solo los cinco primeros productos:
Top 5 Vendas =
IF ( [Ranking Produtos] <= 5, [Total Vendas], BLANK () )
Al colocar esta medida en un objeto visual y filtrar los valores en blanco, queda solo el Top 5. Como RANKX es dinámico, el ranking se recalcula siempre que el usuario aplica filtros de año, categoría o región.
Comprobar el resultado
Cree un objeto visual de tabla con el campo Produto[Nome] y las medidas Total Vendas y Ranking Produtos. Ordene la columna del ranking de forma ascendente: el producto con más ventas debe mostrar 1, el segundo debe mostrar 2, y así sucesivamente. Si todos muestran 1, falta el ALL en el primer argumento. Aplique un filtro (por ejemplo, un año concreto) y confirme que las posiciones se recalculan.
Conclusión
Con una sola medida RANKX ya puede crear rankings dinámicos que responden a los filtros del informe, controlar el orden y gestionar los empates. El siguiente paso natural es combinar el ranking con CALCULATE para ordenar dentro de categorías (por ejemplo, el Top 3 de cada familia de producto) usando ALLEXCEPT. ¿Cuál será el primer ranking que construya en su informe — productos, vendedores o regiones?