Los 10 primeros y últimos resultados, sin clasificación repetitiva

Un usuario Pregunto ✅

holanda

Hola,

Estoy tratando de calcular las regiones minoristas clasificadas en la parte superior e inferior en función de un resultado porcentual. Cada Minorista tiene un número diferente de Regiones. El resultado de % es una simple suma/cuenta. Encontré el siguiente resultado DAX en una publicación anterior del foro:

Rango de región = rankx(ALLSELECTED(‘Todos los datos de conversiones múltiples'[Retailer Region]),[Entry %])

Esto funciona bien si quiero usarlo para filtrar y mostrar los 10 mejores resultados, solo lo agrego como un filtro a mi visual. Pero no puedo usarlo para encontrar los 10 resultados inferiores. ¿Alguien sabe cómo haría esto? Puedo ver que la función RANKX permite obtener resultados en orden Ascendente o Descendente, pero esto no será adecuado debido a la diferencia en el número de regiones por minorista.

Además, si tengo 4 regiones minoristas con el mismo resultado, ¿hay alguna forma de clasificarlas en 1, 2, 3, 4 en función de otro campo (por ejemplo, recuento de puntos de datos), en lugar de que todas tengan una clasificación de 1? Puede hacer esto en Excel usando la siguiente fórmula, pero no estoy seguro de cómo hacerlo en DAX:

=RANGO(A2,$A$2:$A$10)+CONTAR.SI($A$2:A2,A2)-1

¡Por favor ayuda!

holanda

En respuesta a Baskar

Tuve que modificarlo un poco, pero ahora funciona bien. Esto es lo que tengo:

Top Rank = rankx(TODOS LOS SELECCIONADOS(‘TABLA[FIELD]),[MEASURE],,Desc)

Rango inferior = rangox(TODOS LOS SELECCIONADOS(‘TABLA[FIELD]),[MEASURE],,ASC,Denso)-1

Gracias por tu ayuda.

Baskar

Hola miholland,

Podemos establecer Top 10 y Bottom 10 en una sola medida de cálculo, necesitamos crear dos medidas,

1. Clasificación superior = ClasificaciónX(Todoslosseleccionados(«Nombre de campo»),[Entry %],,1,Desc,Densa)

2. Clasificación inferior = ClasificaciónX(Todoslosseleccionados(«Nombre de campo»),[Entry %],,1,Asc,Denso)

Intenta eso y dejame saber

holanda

Hola,

Estoy tratando de calcular las regiones minoristas clasificadas en la parte superior e inferior en función de un resultado porcentual. Cada Minorista tiene un número diferente de Regiones. El resultado de % es una simple suma/cuenta. Encontré el siguiente resultado DAX en una publicación anterior del foro:

Rango de región = rankx(ALLSELECTED(‘Todos los datos de conversiones múltiples'[Retailer Region]),[Entry %])

Esto funciona bien si quiero usarlo para filtrar y mostrar los 10 mejores resultados, solo lo agrego como un filtro a mi visual. Pero no puedo usarlo para encontrar los 10 resultados inferiores. ¿Alguien sabe cómo haría esto? Puedo ver que la función RANKX permite obtener resultados en orden Ascendente o Descendente, pero esto no será adecuado debido a la diferencia en el número de regiones por minorista.

Además, si tengo 4 regiones minoristas con el mismo resultado, ¿hay alguna forma de clasificarlas en 1, 2, 3, 4 en función de otro campo (por ejemplo, recuento de puntos de datos), en lugar de que todas tengan una clasificación de 1? Puede hacer esto en Excel usando la siguiente fórmula, pero no estoy seguro de cómo hacerlo en DAX:

=RANGO(A2,$A$2:$A$10)+CONTAR.SI($A$2:A2,A2)-1

¡Por favor ayuda!

Baskar

En respuesta a holanda

Hola miholland,

Podemos establecer Top 10 y Bottom 10 en una sola medida de cálculo, necesitamos crear dos medidas,

1. Clasificación superior = ClasificaciónX(Todoslosseleccionados(«Nombre de campo»),[Entry %],,1,Desc,Densa)

2. Clasificación inferior = ClasificaciónX(Todoslosseleccionados(«Nombre de campo»),[Entry %],,1,Asc,Denso)

Intenta eso y dejame saber

holanda

En respuesta a Baskar

Tuve que modificarlo un poco, pero ahora funciona bien. Esto es lo que tengo:

Top Rank = rankx(TODOS LOS SELECCIONADOS(‘TABLA[FIELD]),[MEASURE],,Desc)

Rango inferior = rangox(TODOS LOS SELECCIONADOS(‘TABLA[FIELD]),[MEASURE],,ASC,Denso)-1

Gracias por tu ayuda.

En respuesta a holanda

@mjholland

Si tiene 4 regiones minoristas con el mismo resultado, puede seguir los pasos a continuación para clasificarlas 1, 2, 3, 4 en función de otro campo (por ejemplo, recuento de puntos de datos). Podemos crear otra tabla Top10 para desempatar en base a otra columna.

  1. Cree una columna para % de entrada. La siguiente fórmula es solo una muestra correspondiente a la siguiente tabla de prueba.
    Entry%_Column =
    'All Mults Conv Data'[Sales] / SUM ( 'All Mults Conv Data'[Sales] )
    
  2. Cree una columna para el rango de Región de minorista.
    Rank_Column = 
    RANKX ( ALL ( 'All Mults Conv Data' ), 'All Mults Conv Data'[Entry%_Column] )
    

    11.jpg

  3. Cree una nueva tabla Top10.
    Top10_Table =
    TOPN ( 10, 'All Mults Conv Data', 'All Mults Conv Data'[Rank_Column], 1 )
    
  4. Cree una columna para marcar las regiones minoristas que tienen el mismo
    rango.
    Duplicate_Rank_Rows = 
    IF (
        CALCULATE (
            COUNTROWS ( Top10_Table ),
            ALLEXCEPT ( Top10_Table, Top10_Table[Rank_Column] )
        )
            > 1,
        TRUE(),
        FALSE()
    )
    
  5. Cree una columna para clasificar las 4 regiones minoristas en función de «Recuento de puntos de datos» nuevamente.
    Second_Rank_Column = 
    RANKX (
        FILTER ( ALL ( Top10_Table ), Top10_Table[Duplicate_Rank_Rows] = TRUE () ),
       Top10_Table[Count of data points]
    )
    
  6. Cree una columna para enumerar el rango final.
    Final_Rank =
    VAR AddedRank =
        IF (
            Top10_Table[Duplicate_Rank_Rows] = FALSE (),
            0,
            Top10_Table[Second_Rank_Column] - 1
        )
    RETURN
    Top10_Table[Rank_Column] + AddedRank
    

    22.jpg

vanessafvg

En respuesta a v-sihou-msft

@Vvelarde, ¿sabe si es posible hacer los 10 primeros y los 10 últimos en la misma medida y alternar entre los 2 con un filtro?

ryanshane

En respuesta a vanessafvg

Hola, el rango funciona si lo agrego a una tabla que muestra solo el campo por el que estoy clasificando (por ejemplo, inicio de sesión de usuario) y el número de rango (por ejemplo, rango por entradas totales por inicio de sesión de usuario). Sin embargo, si agrego un campo adicional a la tabla, como el departamento del usuario, solo para mostrarlo en la tabla, todos los valores del campo de clasificación cambian a 1. ¿Por qué sucede eso? ¿Cómo puedo mantener el rango funcionando si quiero mostrar más que solo el campo por el que estoy clasificando?

hymieho

En respuesta a vanessafvg

Aquí hay un enfoque que usé para mostrar los 10 primeros y los 5 últimos en la misma visualización:

  • Rango Ascendente (para encontrar los 5 últimos):
    Rank (Asc) of Product Line by RM = RANKX(FILTER(ALLSELECTED('Booked Order'[Product Line]),[Sum of RM]),[Sum of RM],,ASC,Dense)
  • Rango descendente (para encontrar los 10 primeros):
    Rank (Desc) of Product Line by RM = RANKX(FILTER(ALLSELECTED('Booked Order'[Product Line]),[Sum of RM]),[Sum of RM],,DESC,Dense)
  • Mida para identificar solo los 10 primeros y los 5 últimos. Devuelve 1 para cada fila que coincida con los criterios, de lo contrario, 0
    Top 10 Bottom 5 PL by RM Flag = if(CALCULATE(DISTINCTCOUNT('Booked Order'[Region]), ALLSELECTED('Booked Order'))=1,IF(OR([Rank (Desc) of Product Line by RM] <=10,[Rank (Asc) of Product Line by RM]<=5),1,0),0)

  • Filtro de nivel visual en el gráfico donde solo quiero los 10 primeros y los 5 últimos: filtro.JPG

Entonces, para llevarlo al siguiente nivel donde desea usar un filtro en la página para controlar si ve los 10 primeros o los 5 últimos, modifico la última medida anterior para usar el filtro Región en la página para determinar si muestro el Top 10 o Bottom 5. (Lo sé, no exactamente en el mundo real …) Entonces, si es NA, dame el top 10, de lo contrario, dame el bottom 5.

Top 10 Bottom 5 PL by RM Flag = IF(FIRSTNONBLANK('Booked Order'[Region],TRUE())="NA",IF([Rank (Desc) of Product Line by RM] <=10,1,0),IF([Rank (Asc) of Product Line by RM]<=5,1,0))

¡Espero que esto ayude!

Vvelarde

En respuesta a holanda

hola @mjholland

una solución complicada es crear una columna calculada

Ranking2 = RANKX (tabla; campo) * 100000000000 + calcular (suma (punto de datos))

Esto te da diferentes valores para desempatar.

KJinete

En respuesta a Vvelarde

Se me acaba de ocurrir una medida que siempre devuelve el n-ésimo mejor según el contexto de la fila. Entonces, una columna de números del 1 al 10 enumeraría los 10 principales. Definitivamente aborda el problema desde un ángulo completamente diferente, pero podría aplicarse en este caso. Consulte esta publicación, en particular el archivo de ejemplo. Es un tema bastante grave que se desvía de la pregunta original en el hilo, pero el rompecabezas fue demasiado divertido para no jugar.

sean

En respuesta a holanda

RANKX no tiene una forma integrada de desempatar en función de otra columna/medida. ¡Me gustaría que agregaran esto!

Mire esta publicación (hay un par de soluciones en la lista; personalmente no he probado ninguna)

http://community.powerbi.com/t5/Desktop/Ranking-help-por favor/mp/35445#M12814

¿Incluido @KHorseman en caso de que tenga otra idea?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *