Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
3 years ago

Countrows basados en el resultado de RANKX

Hola gurús de PBI,

Tengo una tabla de datos llamada Tabla con dos columnas "Producto" y "Volumen". He realizado el cálculo de los 5 mejores Rankx que funciona bien. Ahora quiero contar las filas basadas en el resultado de Rankx y devolver los 5 primeros o los 4 primeros dependiendo del número de resultados de la medida Top5. Por ejemplo, el resultado de la medida Top5 devuelve 9 resultados, quiero poner una condición si devuelve <=5 resultados Quiero devolver la medida Top5, si no, quiero devolver Top4 así que <=4.

Creo que esto necesitaría un recuento agregado al cálculo de Rankx, pero luchando por combinar los dos.

Top 5 Medida;

Top5 = si(RANKX(TODO('Tabla'[Producto]),calcular(suma('Tabla'[Volumen])),,DESC,Denso)<=5,RANKX(TODO('Tabla'[Producto]),calcular(suma('Tabla'[Volumen])),,DESC,Denso),espacio en blanco())
Resultado de la medida Top 5
ProductoArriba5
Producto J1
Producto N2
Producto G3
Producto I3
Producto E4
Producto A5
Producto B5
Producto K5
Producto M5

Resultado deseado ya que Top 5 devuelve 9 resultados (volver al top4)

ProductoArriba5
Producto J1
Producto N2
Producto G3
Producto I3
Producto E4

Tabla de datos

Producto

Volumen
Producto A2
Producto B2
Producto C1
Producto D1
Producto E3
Producto F1
Producto G4
Producto H1
Producto I4
Producto J21
Producto K2
Producto L1
Producto M2
Producto N17

5 Replies

  • @hemann

    Aquí hay una solución para usted

    Measure = rankx(all('Table'[Product]),CALCULATE(sum('Table'[Volume])),,DESC)+rankx(all('Table'[Product]),CALCULATE(max('Table'[Product])),,DESC)/100
    
    Measure 2 = rankx(all('Table'[Product]),[Measure],,ASC)

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Gracias por su respuesta. Basándome en mis requisitos, no busco un divisor de desempate, sino más bien lógica si los 5 primeros resultados en más de 5 resultados vuelven al top 4. La única forma en que pude ver esto es por lógica de countrows en el Rankx

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        @hemann

        Puedes probar esto

        Measure 2 = 
        VAR _tbl=SUMMARIZE(ALL('Table'),'Table'[Product],"value",sum('Table'[Volume]))
        VAR _tbl2=ADDCOLUMNS(_tbl,"rank",rankx(_tbl,[value],,DESC,Dense))
        VAR _count=COUNTROWS(FILTER(_tbl2,[rank]<=5))
        return If(_count>5,IF([Measure]<5,1))

        y agregue la medida 2 para filtrar

        Por favor, vea el archivo adjunto a continuación