Calcular percentiles en PowerBI

Un usuario Pregunto ✅

Sid10

En Excel, podemos usar la función percentrank.inc para calcular las puntuaciones de percentiles para una lista de valores. ¿Cómo logro lo mismo en powerbi? Entonces, a modo de ilustración, digamos, tengo un conjunto de 7 valores: para cada valor, quiero saber cuál es su puntaje percentil. Espero luego poner cada valor en diferentes cuartiles.

Sid10_0-1599075732268.png

Pude calcular el ‘rango’, si eso ayuda.

Rank = RANKX(ALL('Table'),CALCULATE(SUM('Table'[Value])))

Tahreem24

Pruebe este DAX:

Percentil = RANKX (ALL (TableName), CALCULATE (SUM (TableName[Value] )),, ASC, SKIP) / COUNTX (ALL (TableName), TableName[Value] )

Greg_Deckler

@ Sid10 Según traducción de Excel a DAX: https://community.powerbi.com/t5/Community-Blog/Excel-to-DAX-Translation/ba-p/1060991

https://community.powerbi.com/t5/Community-Blog/PQ-Excel-to-DAX-Translation/ba-p/1061107

El equivalente de PERCENTRANK está aquí:

https://community.powerbi.com/t5/Quick-Measures-Gallery/PERCENTILERANK/td-p/1082573

y se parece a esto:

PERCENTILERANK.INC = 
    VAR __Value = MAX('RanksInc'[Rank])
RETURN
    IF(
        __Value IN SELECTCOLUMNS('ValuesInc',"Values",[Value]),
                VAR __NumLower = COUNTROWS(FILTER('ValuesInc',[Value] < __Value))
                VAR __NumHigher = COUNTROWS(FILTER('ValuesInc',[Value] > __Value))
                VAR __Rank = __NumLower / (__NumLower + __NumHigher)
            RETURN IF(ISBLANK(__Rank),0,__Rank),
                VAR __Lower = MAXX(FILTER('ValuesInc',[Value] < __Value),[Value])
                VAR __Higher = MINX(FILTER('ValuesInc',[Value] > __Value),[Value])
                VAR __LowerNumLower = COUNTROWS(FILTER('ValuesInc',[Value] < __Lower))
                VAR __LowerNumHigher = COUNTROWS(FILTER('ValuesInc',[Value] > __Lower))
                VAR __LowerRank = __LowerNumLower / (__LowerNumLower + __LowerNumHigher)
                VAR __HigherNumLower = COUNTROWS(FILTER('ValuesInc',[Value] < __Higher))
                VAR __HigherNumHigher = COUNTROWS(FILTER('ValuesInc',[Value] > __Higher))
                VAR __HigherRank = __HigherNumLower / (__HigherNumLower + __HigherNumHigher)
            RETURN
                __LowerRank + ( __Value - __Lower ) / (__Higher - __Lower ) * ( __HigherRank - __LowerRank )
    )

Tahreem24

Pruebe este DAX:

Percentil = RANKX (ALL (TableName), CALCULATE (SUM (TableName[Value] )),, ASC, SKIP) / COUNTX (ALL (TableName), TableName[Value] )

Sid10

En respuesta a Tahreem24

@ Tahreem24 ¡Gracias por esa elegante solución para llegar a percentiles utilizando una función simple de clasificación y recuento!

Sin embargo, hay un pequeño error en su fórmula. Percentil = R / (n + 1) [In other words you need to add 1 to the denominator]. Edite su respuesta para que otros no se equivoquen al respecto.

Sid10_0-1602800893256.jpeg

En respuesta a Sid10

hola @ Sid10

Simplemente ajuste la medida de rango como se muestra a continuación:

Rank 1 = RANKX(ALL('Table'[Name]),CALCULATE(SUM('Table'[Value])))

o

Rank 2 = RANKX(ALLSELECTED('Table'[Name]),CALCULATE(SUM('Table'[Value])))

Resultado:

1.JPG

Saludos,

Lin

Deja un comentario

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