1. Faro

Nivel 4 · Clasifica categorías con RANKX

La solicitud

De Jordan Hayes, Director de categorías

“En el informe mensual las categorías aparecen por orden alfabético, porque así es como las encuentran los gerentes regionales. Aun así quiero una columna Rank junto a Sales, para que vean de un vistazo en qué lugar está su categoría en 2025.”

Tu objetivo

La matriz lista products[category] por orden alfabético, con una segmentación en 'Date'[Year] = 2025 y la medida [Sales] del informe a su lado. Crea una medida llamada Sales Rank que dé a cada categoría su posición según [Sales] entre las seis categorías: 1 para la mayor.

  • Llena [Sales Rank] en cada fila del visualpendiente

Tu medida

DAX
Visual
A matrix: rows = products[category]; values = [Sales], [Sales Rank]
Segmentaciones
'Date'[Year] = 2025
Medidas del informe
Sales = CALCULATE(SUM(order_items[line_total]), orders[status] = "completed")
Panel de datos: tablas y columnas
  • order_items order_item_id, order_id, product_id, quantity, unit_price, discount_pct, line_total
  • orders order_id, customer_id, order_date, status, channel, shipping_fee, coupon_code
  • products product_id, name, category, subcategory, unit_price, unit_cost, launched_on, is_active
  • customers customer_id, first_name, last_name, email, city, state, signup_date, segment, referral_source
  • returns return_id, order_item_id, returned_on, reason, refund_amount
  • Date Date, Year, Quarter, Month Number, Month, Year Month, Year Quarter, Day, Weekday Number, Weekday

Cargando el editor…

    Visual[Sales Rank] fills in when you press Check
    El visual antes de tu respuesta
    categorySalesSales Rank
    Decor$290,301
    Furniture$573,131
    Kitchen$292,808
    Lighting$385,145
    Outdoor$507,358
    Textiles$251,426

    Mote revisa tu resultado

    Presiona Comprobar. Mote completa tu respuesta y la compara con lo que necesita el informe.

    La lección

    Ordenar un visual por Sales muestra el orden, pero solo mientras dure esa ordenación. Los lectores de Jordan ordenan por nombre. Una medida de ranking pone la posición en una columna propia, así que sigue siendo correcta sin importar cómo se ordene la tabla.

    Dónde estás trabajando

    La matriz de abajo es un informe de práctica creado para este sitio. Power BI Desktop solo funciona en Windows, así que un motor DAX en la página rellena cada celda, siguiendo las reglas de Power BI. En Power BI Desktop: Inicio → Nueva medida (Home → New measure), escribe la fórmula y suelta Sales Rank en Valores (Values) de la matriz, junto a Sales.

    RANKX en dos argumentos

    Sales Rank = RANKX(ALL(products[category]), [Sales])

    RANKX(tabla, expresión):

    1. Quién compite. Una tabla con una fila por competidor. ALL(products[category]) es la lista de las seis categorías con todos los filtros de esa columna eliminados.
    2. Qué decide el orden. RANKX evalúa la expresión una vez por competidor, cada uno en su propio contexto, y la evalúa una vez más en la celda actual y devuelve su posición.

    Siguen argumentos opcionales: un valor que clasificar en lugar del actual, el orden (DESC, el predeterminado, hace que el mayor sea 1; ASC hace que el menor sea 1) y cómo se tratan los empates (SKIP, el predeterminado, da 1, 2, 2, 4; DENSE da 1, 2, 2, 3).

    Por qué ALL es obligatorio

    Dentro de la fila Furniture, el contexto de filtro solo contiene Furniture. VALUES(products[category]) ahí devuelve una categoría, así que RANKX compara Furniture con Furniture y devuelve 1. Todas las filas valen 1. ALL( ) elimina el filtro de la fila sobre esa columna, y así compiten las seis.

    Los demás filtros siguen aplicándose. La segmentación de 2025 filtra la tabla Date, no la columna de categoría, así que el [Sales] de cada categoría son sus ventas de 2025. El ranking se calcula dentro de lo que el lector haya seleccionado en otras columnas.

    Clasifica por una medida, no por una columna

    El segundo argumento debería ser una medida, [Sales]. Dentro de RANKX, una referencia a una medida aplica el competidor actual como filtro, así que cada categoría obtiene su propio número. Un SUM(order_items[line_total]) sin más no recibe ese filtro y devuelve el mismo total para cada competidor, así que todos los rankings valen 1. Si tienes que escribir la expresión directamente, envuélvela en CALCULATE.

    La fila Total

    En una fila Total no hay categoría actual, y RANKX clasificaría el total general frente a las seis categorías, devolviendo 1. Este visual oculta la fila Total. En tus propios informes, envuelve el ranking en IF(ISINSCOPE(products[category]), RANKX( … )) para que la celda Total quede vacía.

    Errores comunes

    • VALUES en lugar de ALL. Un competidor, ranking 1 en todas partes.
    • ALL(products). Elimina todos los filtros de la tabla products y clasifica frente a 120 productos, no a seis categorías.
    • Esperar que 1 sea el menor. El orden predeterminado es descendente.

    Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.