03-09-2026 3 min. de lectura (aproximado)
Rankx vs topn en power bi: guía definitiva para elegir la función correcta (3 min. de lectura)
Aunque ambas funciones sirven para trabajar con “los mejores” o “los peores”, no son intercambiables. Usar una u otra de forma incorrecta genera resultados erróneos, problemas de rendimiento o filas en blanco.
¿Qué es RANKX?
"RANKX " es una función escalar. Devuelve el ranking para cada fila en el contexto actual.
Sintaxis básica
RANKX(
tabla,
expresión,
[valor],
[orden],
[empates]
)
Características principales
Asigna un puesto (1, 2, 3…) a cada elemento.
Puede manejar empates de tres formas: "SKIP ", "DENSE " o "STANDARD ".
Es dinámica: se recalcula según los filtros de la parte visual, como segmentadores etc.
Se usa casi siempre como medida.
Ejemplo típic
Ranking Ventas Producto =
RANKX(
ALLSELECTED(productos[nombre_producto]),
[Total Ventas],
,
DESC,
Dense
)
¿Qué es TOPN?
"TOPN " es una función de tabla. Devuelve una tabla con las "N" primeras filas según una expresión.
Sintaxis básica
Características principales
Devuelve un subconjunto de filas, los "Top N".
No asigna ranking, solo selecciona.
Se usa normalmente dentro de "CALCULATE ", "SUMX ", "FILTER " o para crear tablas calculadas.
Es muy eficiente cuando solo necesitas un número fijo de elementos.
Ejemplo típico
Top 5 Productos =
CALCULATE(
[Total Ventas],
TOPN(5, ALL(productos[nombre_producto]), [Total Ventas], DESC)
)
Comparación directa
Aspecto
RANKX
TOPN
Tipo de función
Escalar (devuelve número)
Tabla (devuelve tabla)
¿Asigna ranking?
Sí
No
¿Devuelve Top N?
No (asigna puesto a todos)
Sí
Manejo de empates
Excelente (Skip, Dense, Standard)
Limitado
Uso más común
Medidas de ranking dinámico
Filtrar Top N dentro de CALCULATE
Rendimiento
Puede ser costoso con muchas filas
Generalmente más rápido
Filas en blanco
Frecuente si no se controla
Menos frecuente
Ideal para
Tablas con ranking visible
KPIs de “Top 5”, “Top 10”
¿Cuándo usar cada una?
Usar "RANKX " cuando:
Se necesitas mostra el puesto de cada producto, cliente o categoría.
Se quiere que el ranking sea dinámico con los segmentadores.
Se tienen que manejar empates de forma profesional.
Se va a poner el ranking en una tabla o matriz junto al nombre del producto.
Usa "TOPN " cuando:
Cuando solo interesan los N mejores, Top 5, Top 10, Top 20….
Si se quiere calcular un total solo de los "Top N".
Se está creando una medida de “% del Top 5 sobre el total”.
Se necesita mejor rendimiento y no te importa el puesto exacto.
Combinar las dos
Muchas veces la mejor solución es combinarlas:
Ranking Solo Top 10 =
VAR Ranking =
RANKX(
ALLSELECTED(productos[nombre_producto]),
[Total Ventas],
,
DESC,
Dense
)
RETURN
IF(Ranking <= 10, Ranking)
O la versión más limpia y recomendada actualmente:
Top 10 Ranking =
IF(
[Total Ventas] > 0,
RANKX(
FILTER(ALLSELECTED(productos[nombre_producto]), [Total Ventas] > 0),
[Total Ventas],
,
DESC,
Dense
)
)
Errores comunes que generan filas en blanco
Usar "ALL() " en lugar de "ALLSELECTED() " → incluye productos sin ventas.
No filtrar "[Total Ventas] > 0" dentro del "RANKX ".
Usar "TOPN " pensando que asigna ranking (no lo hace).
Olvidar que "RANKX " evalúa la expresión en un contexto de fila diferente.
"RANKX " = “Dime en qué puesto está cada uno”.
"TOPN " = “Dame solo los N mejores”.