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?
v-lid-msft
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 )
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.
v-lid-msft
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]
)
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’)».
v-lid-msft
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.
v-lid-msft
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».
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):
¿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:
¡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.