Medir para generar el rango de los empleados dentro del equipo

Un usuario Pregunto ✅

Anónimo

Hola tios,

Somos una organización que tiene alrededor de 200 oficiales diferentes en equipos que procesan solicitudes. Estamos enfocados en mejorar la velocidad de procesamiento, y quiero poder escribir una medida que, cuando se filtre por un segmentador por empleado y mes, dé el rango de ese empleado en términos de velocidad de procesamiento dentro de su equipo.

Tengo tres tablas en mi modelo de datos: una lista de aplicaciones, una lista de oficiales (con sus respectivos equipos) y un calendario. La lista de aplicaciones tiene:

Numero de aplicacion Días para procesar Nombre del oficial Fecha de procesamiento
BKJ9087 56

Bob Andrews

1 de julio de 2019

BKJ9089 24

Bob Andrews

28 de julio de 2019

BKJ9090 101

Shelly Thomson

4 de julio de 2019

BKJ9091 77

Kelle White

17 de julio de 2019

BKJ9092 34

Nav Gunaratna

8 de julio de 2019

BKJ9093 33

Shelly Thomson

24 de junio de 2019

Lista de oficiales:

Nombre del oficial Nombre del equipo
Bob Andrews Equipo ABC
Shelly Thomson Equipo ABC
Nav Gunaratna Equipo ABC
Kelle White Equipo XYZ

La «Fecha de procesamiento» en la lista de solicitudes está vinculada al calendario, y los dos campos «Nombre del oficial» están vinculados entre sí.

En uno de mis informes en la Vista de informes, tengo dos segmentaciones en una página: una que filtra todo solo a «Bob Andrews» (usando el campo «Nombre del oficial» de la lista de oficiales) y otra que filtra todo a solo » Jul-2019 «(utilizando el campo» ShrtMnth «del calendario).

Me gustaría poder escribir una medida que pueda poner en una tarjeta para devolverme el rango de Bob Andrews dentro de su equipo (Equipo ABC) en términos de porcentaje de sus solicitudes que se completaron en 35 días o menos (de los completados en julio de 2019). ¿Alguien podría aconsejarme sobre la mejor manera de hacer esto? He estado jugando con «RANKX», pero solo he podido obtener algo que devuelve una lista clasificada de todos los empleados en una tabla (y no se limita solo a los miembros del equipo):

RANKX(ALL('Staff List'[Employee Name]),COUNTX(RELATEDTABLE(Applications),CALCULATE(COUNTROWS(Applications),Applications[Days to Process]<=35))/COUNTX(RELATEDTABLE(Applications),CALCULATE(COUNTROWS(Applications))))

¿Cómo consigo que devuelva un valor único y lo limite solo a los miembros del equipo relevante?

Hola @Anónimo,

Podemos intentar crear la siguiente medida para cumplir con sus requisitos:

Measure =
VAR tname =
    CALCULATE ( MAX ( 'Staff List'[Team Name] ) )
VAR v =
    CALCULATE (
        SUM ( 'Applications'[Days to Process] ),
        'Applications'[Days to Process] <= 35
    )
VAR t =
    CALCULATETABLE (
        'Staff List',
        REMOVEFILTERS ( 'Staff List'[Officer Name] ),
        'Staff List'[Team Name] = tname
    )
VAR t2 =
    FILTER (
        CALCULATETABLE (
            'Applications',
            REMOVEFILTERS ( 'Applications'[Officer Name] ),
            REMOVEFILTERS ( 'Staff List'[Officer Name] )
        ),
        [Days to Process] <= 35
            && [Officer Name] IN SELECTCOLUMNS ( t, "name", [Officer Name] )
    )
VAR i =
    RANKX ( t2, [Days to Process], v, ASC )
RETURN
    i / COUNTROWS ( t2 )

21.PNG

Si no cumple con sus requisitos, muestre el resultado esperado exacto según las tablas que ha compartido.

Atentamente,

Anónimo

En respuesta a v-lid-msft

Hola @ v-lid-msft,

¡Muchas gracias por su ayuda! Creo que esto está en camino, pero el número que debería devolverse para «Bob Andrews» es «2». Su desempeño en el cumplimiento del objetivo de 35 días en julio es del 50% (1 de sus 2 solicitudes se procesó en 35 días o menos). Su equipo es el Equipo ABC, por lo que tiene otros dos miembros del equipo, Shelly Thomson y Nav Gunaratna. El rendimiento de Shelly Thomson fue del 0% (su aplicación tardó 101 días) y el rendimiento de Nav Gunaratna fue del 100% (su aplicación tardó 34 días).

Por lo tanto, la clasificación del Equipo ABC es así:

Rango Nombre de la persona del Equipo ABC Actuación en julio
1 Nav Gunaratna 100%
2 Bob Andrews 50%
3 Shelly Thomson 0%

Y así, con los filtros «Bob Andrews» y «julio» que muestra, la medida debería devolver «2», la clasificación de Bob Andrews en julio entre los miembros de su equipo.

En respuesta a Anónimo

Hola @Anónimo,

Podemos intentar crear una medida, utilice la siguiente fórmula para cumplir con sus requisitos:

Rank =
VAR tname =
    CALCULATE ( MAX ( 'Staff List'[Team Name] ) )
VAR t1 =
    FILTER (
        CALCULATETABLE (
            'Applications',
            REMOVEFILTERS ( 'Applications'[Officer Name] ),
            REMOVEFILTERS ( 'Staff List'[Officer Name] )
        ),
        [Officer Name]
            IN SELECTCOLUMNS (
                CALCULATETABLE (
                    'Staff List',
                    REMOVEFILTERS ( 'Staff List'[Officer Name] ),
                    'Staff List'[Team Name] = tname
                ),
                "name", [Officer Name]
            )
    )
VAR t2 =
    ADDCOLUMNS (
        GROUPBY ( t1, Applications[Officer Name] ),
        "Performance",
        VAR n = [Officer Name]
        RETURN
            COUNTROWS ( FILTER ( t1, [Days to Process] <= 35 && [Officer Name] = n ) )
                / COUNTROWS ( FILTER ( t1, [Officer Name] = n ) )
    )
RETURN
    MAXX (
        FILTER (
            ADDCOLUMNS ( t2, "Rank", RANKX ( t2, [Performance],, DESC, DENSE ) ),
            [Officer Name] IN FILTERS ( 'Staff List'[Officer Name] )
        ),
        [Rank]
    )

16.PNG17.PNG18.PNG19.PNG

Atentamente,

Anónimo

En respuesta a v-lid-msft

Hola @ v-lid-msft,

¡Muchas gracias! Esto parece exactamente lo que necesito. El único problema es que cuando transpongo la fórmula a mi archivo y arrastro la medida a una tarjeta, «SQLDUMPER.EXE» se abre temporalmente en una ventana del símbolo del sistema y luego obtengo este error:

«No se pudieron cargar los datos de este objeto visual»

«Se produjo un error inesperado (archivo ‘xmvsquerry.cpp’, línea 3174, función ‘XMVSColumn :: Bind’)».

En respuesta a Anónimo

Hola @Anónimo,

¿Podría compartir qué tipo de fuente de datos y modo de conexión está utilizando? ¿Tiene un conjunto de datos muy grande? ¿Ocurrirá este error al abrir el archivo pbix de muestra en mi publicación anterior? ¿Ha intentado utilizar la última versión de Power BI Desktop?

No incluya información confidencial ni datos reales en su respuesta.

Atentamente,

Anónimo

En respuesta a v-lid-msft

Hola @ v-lid-msft,

Es extraño porque solo estoy usando archivos de Excel y su PBIX funciona bien en mi sistema. Estoy usando la versión: 2.75.5649.861 de 64 bits (noviembre de 2019). El conjunto de datos tiene 175.000 filas, pero filtrarlo a 33.000 más o menos no parece marcar la diferencia.

En respuesta a Anónimo

Hola @Anónimo,

Podemos intentar utilizar la siguiente medida para solucionar este problema:

Rank = 
VAR tname =
    CALCULATE ( MAX ( 'Staff List'[Team Name] ) )
VAR t1 =
    FILTER (
        CALCULATETABLE (
            'Applications',
            REMOVEFILTERS ( 'Applications'[Officer Name] ),
            REMOVEFILTERS ( 'Staff List'[Officer Name] )
        ),
        [Officer Name]
            IN SELECTCOLUMNS (
                CALCULATETABLE (
                    'Staff List',
                    REMOVEFILTERS ( 'Staff List'[Officer Name] ),
                    'Staff List'[Team Name] = tname
                ),
                "name", [Officer Name]
            )
    )
VAR t2 =
    ADDCOLUMNS (
        GROUPBY ( t1, Applications[Officer Name] ),
        "Performance",
        VAR n = [Officer Name]
        RETURN
            DIVIDE(COUNTROWS ( FILTER ( t1, [Days to Process] <= 35 && [Officer Name] = n ) ),
                 COUNTROWS ( FILTER ( t1, [Officer Name] = n ) ),0)
    )
RETURN
    MAXX (
        FILTER (
            ADDCOLUMNS ( t2, "Rank", RANKX ( t2, [Performance],, DESC, DENSE ) ),
            [Officer Name] IN FILTERS ( 'Staff List'[Officer Name] )
        ),
        [Rank]
    )

Atentamente,

Anónimo

En respuesta a v-lid-msft

Hola @ v-lid-msft,

Eso está funcionando muy bien ahora, gracias Dong. Solo un último (¡con suerte!) Problema extraño.

En mis datos reales, estoy usando un número, «ID de empleado» (otra columna de la «Lista de personal») para identificar al personal y vincular las tablas (porque la forma en que se escriben los nombres no coincide exactamente entre Aplicaciones y Lista de personal, y un equivalente de «ID de empleado» existe en la tabla ‘Aplicaciones’). Sin embargo, cuando filtro y visualizo datos, quiero poder filtrarlos según el «Nombre del oficial» de la «Lista de personal».

Pensé que esto sería sencillo dado que existe una correspondencia de 1 a 1 entre las ID de los empleados y los nombres en la Lista de personal. Pero cuando utilizo «Nombre completo» en lugar de «ID de empleado», todas las clasificaciones vuelven como «1».

Cómo se muestra.PNG

Mientras que lo que busco es esto (obtuve lo siguiente al tomar una medida: Nombre completo = SELECTEDVALUE (‘Lista de personal'[Full Name]), pero obviamente no puedo filtrar usando eso):

Desired.PNG

¿Sabes qué podría estar causando esto? No hay duplicados en la Lista de personal y cada nombre de oficial / nombre completo tiene una identificación de empleado única.

Mi modelo de datos, para mayor claridad:

Modelo de datos.PNG

¡Gracias, de nuevo, por toda su ayuda!

parry2k

@Anónimo hay una gran publicación de blog sobre la función RANK, intente eso o comparta el archivo pbix con el resultado esperado y lo investigaré.

Ashish_Mathur

Hola,

Comparte el enlace desde donde puedo descargar el archivo PBI.

Deja un comentario

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