(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo hacer Top N Dinámico en Power BI: paso a paso

João Barros 12 de August de 2026 3 min de lectura

Este tutorial muestra cómo crear un Top N dinámico en Power BI controlado por un slicer, útil para destacar los principales clientes, productos o categorías y agregar el resto en 'Others'. Explica el porqué y ofrece pasos prácticos con DAX y modelado sencillo.

Requisitos previos

  • Power BI Desktop (versión reciente).
  • Una tabla de ventas con columnas: CustomerName, Product, SalesAmount, OrderDate.
  • Conocimientos básicos de relaciones, tablas y medidas DAX.

Paso 1: Preparar la tabla de ranking

Necesitamos una tabla para seleccionar el N (Top 3, Top 10, etc.). Crea una tabla de parámetros en Power BI con números que tengan sentido para tu informe.

TopN = GENERATESERIES(1, 20, 1)

Después conviértela en un slicer en el informe para que el usuario elija el N. Esta tabla está desconectada (no necesita relaciones) y sirve para filtrado vía medidas DAX.

Paso 2: Medida de total de ventas

Crea una medida base con el total de ventas. Esta sirve como referencia para ranking y filtros.

Total Sales = SUM(Sales[SalesAmount])

Paso 3: Medida de ranking por dimensión

Vamos a crear una medida que calcula el rank de cada miembro (ej.: CustomerName) ordenado por Total Sales. Usamos RANKX con ALLSELECTED para respetar los slicers relevantes.

Customer Rank =
RANKX(
  ALLSELECTED(Customer[CustomerName]),
  CALCULATE([Total Sales]),
  ,
  DESC,
  DENSE
)

Paso 4: Medida que identifica Top N

Con el rank y el valor de TopN seleccionado, creamos una medida booleana que indica si un cliente está en el Top N elegido.

Is TopN =
VAR SelectedN = SELECTEDVALUE(TopN[Value], 5)
RETURN
IF([Customer Rank] <= SelectedN, 1, 0)

Paso 5: Medida para agrupar 'Others'

Queremos mostrar los Top N individualmente y sumar el resto en 'Others'. Crea una medida que devuelva el valor del cliente si está en el Top N o agregue para 'Others'.

TopN Sales =
VAR IsTop = [Is TopN]
RETURN
IF(
  IsTop = 1,
  [Total Sales],
  BLANK()
)

Others Sales =
VAR SelectedN = SELECTEDVALUE(TopN[Value], 5)
VAR TableAll =
    ADDCOLUMNS(
        VALUES(Customer[CustomerName]),
        "Rank", [Customer Rank],
        "Sales", [Total Sales]
    )
VAR OthersSum =
    SUMX(
      FILTER(TableAll, [Rank] > SelectedN),
      [Sales]
    )
RETURN
IF(HASONEVALUE(Customer[CustomerName]) = FALSE(), OthersSum, BLANK())

Paso 6: Construir el visual con 'Others'

Usa una tabla o gráfico de columnas. Coloca Customer[CustomerName] y la medida TopN Sales. Para incluir 'Others' en el mismo visual, crea una tabla auxiliar virtual con los Top N y una fila 'Others' o usa un visual combinado:

// Ejemplo simplificado para tabla virtual en un visual de tabla
Display Name =
IF([Is TopN] = 1, SELECTEDVALUE(Customer[CustomerName]), "Others")

Display Sales =
IF([Is TopN] = 1, [Total Sales], CALCULATE([Others Sales]))

Si lo prefieres, crea una tabla resumida con SUMMARIZE y úsala en un visual con la función 'Display Name' y 'Display Sales'.

Paso 7: Tratar empates y rendimiento

Los empates en el ranking pueden duplicar posiciones; usando DENSE evitas saltos, pero puedes usar SKIP para otro comportamiento. Para rendimiento, limita ALLSELECTED a una columna concreta y evita iteradores innecesarios en grandes volúmenes.

Verificar el resultado

Selecciona diferentes valores en el slicer TopN y verifica que el visual se actualiza: los N primeros aparecen individualmente y el total de las restantes entidades aparece como 'Others'. Confirma que los totales coinciden con el Total Sales general y prueba con diferentes filtros (fecha, producto) para garantizar que ALLSELECTED respeta los slicers deseados.

Conclusión

El Top N dinámico en Power BI permite dar foco a los items principales manteniendo contexto con el resto agregados. Próximos pasos: experimentar con Top N por producto, combinar con variables de tiempo y crear bookmarks para opciones predefinidas. Consejo: usa tooltips para explicar al usuario qué representa 'Others' y evitar confusiones.