Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Syndicate_Admin
Administrator
Administrator

¿Cómo calcular las medidas 'anidadas'?

En mi empresa, tengo una lista de "tickets" a la que los empleados envían tickets. La expectativa es de un mínimo de 1 boleto por mes por empleado (excepto para el Presidente). También tengo una lista de relaciones empleado-gerente (esencialmente, un organigrama) en el siguiente formato.

Lista de entradas:

ID,Date,Employee,Manager
A01,1/1/2023,A,K
A02,1/2/2023,B,K
A03,1/2/2023,F,M
A04,1/3/2023,B,K
A05,1/6/2023,F,M
A06,1/6/2023,F,M
A07,1/7/2023,L,X
A08,1/7/2023,M,Y
A09,1/8/2023,A,K
A10,1/9/2023,M,Y
A11,1/9/2023,X,Z
A12,1/10/2023,A,K
A13,1/14/2023,A,K
A14,1/16/2023,B,K
A15,1/19/2023,C,L
A16,1/22/2023,D,M
A17,1/23/2023,D,M
A18,1/24/2023,F,M
A19,1/26/2023,A,K
A20,1/26/2023,M,Y
A21,1/29/2023,X,Z
A22,1/30/2023,X,Z
A23,2/4/2023,C,L
A24,2/5/2023,B,K
A25,2/11/2023,B,K
A26,2/12/2023,A,K
A27,2/19/2023,M,Y
A28,2/19/2023,X,Z
A29,2/22/2023,Y,Z
A30,2/25/2023,X,Z
A31,2/27/2023,D,M
A32,2/27/2023,C,L
A33,3/2/2023,C,L
A34,3/2/2023,D,M
A35,3/6/2023,F,M
A36,3/14/2023,M,Y
A37,3/14/2023,D,M
A38,3/17/2023,A,K
A39,3/21/2023,C,L
A40,3/21/2023,D,M
A41,3/23/2023,X,Z
A42,3/23/2023,D,M
A43,3/28/2023,Y,Z

Organigrama:

Employee,Manager
A,K
B,K
C,L
D,M
E,M
F,M
K,X
L,X
M,Y
X,Z
Y,Z

Tenga en cuenta que la razón de dos tablas es que, aunque se espera, algunos empleados pueden no enviar tickets todos los meses (por ejemplo, los empleados E y K no han enviado ninguno durante todo el período). Así que para tener datos completos tengo este segundo Organigrama. Los dos están vinculados por la columna 'Empleado'.

Ahora, mi requisito es crear dos gráficos.

  1. Muestra los # tickets para cada empleado para cada mes.
  2. Muestre el cumplimiento de cada empleado (Verdadero/Falso) cada mes.
    • Si un determinado empleado ha enviado al menos 1 ticket, cumple con ese mes, de lo contrario no cumple.
  3. Muestre el porcentaje de empleados que informan a cada gerente.
    • Si un determinado gerente tiene 3 empleados que le reportan, y 2 de ellos han enviado al menos 1 ticket durante un mes, el % de ese gerente = 2/3 = 67%.
    • Sin embargo, si un determinado gerente tiene otros gerentes que le reportan, entonces el % debe calcularse considerando todos los subordinados.
      • En el conjunto de datos, K y L informan a X y, a su vez, A, B y C informan a K y L. Entonces, para calcular el número para X, debemos considerar todo A, B, C, K y L.

Esto es lo que he hecho hasta ahora.

Medida para calcular tickets por empleados:

Tickets = DISTINCTCOUNT(TicketList[ID])

Esto funciona bien, pero lo puse en una tabla (Empleado y Gerente que viene de Organigrama), no muestra valores (ceros) para los empleados que nunca han enviado un ticket. En este caso, K y E). ¿Cómo hago para que esos empleados se presenten?

Matrix.png

Medida para verificar si un empleado cumple:

Is Compliant = 
    IF(TicketList[Tickets] >= 1,
        TRUE(),
        FALSE()
    )

Esto funciona bien, y ahora puedo mostrar el cumplimiento de Verdadero / Falso en una matriz.

Pero, ahora me encuentro con problemas al calcular el porcentaje de cumplimiento para un gerente.

En el organigrama, tengo las siguientes dos medidas para calcularlo:

#Employees = DISTINCTCOUNT('Org Chart'[Employee])
Compliance % = DIVIDE(CALCULATE(DISTINCTCOUNT(TicketList[Employee]), FILTER(TicketList, [Is Compliant] = TRUE())), 'Org Chart'[#Employees])

Pero, esto obviamente calcula el % considerando solo a los subordinados inmediatos:

Comp.png

¿Cómo altero la medida para calcular la consideración de todos los empleados que les reportan? Por ejemplo, para X el número debe ser 80% para enero (K no conforme, L, A, B, C cumple).

Además, ¿cómo puedo hacer que aparezca 0 en lugar de espacios en blanco?

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

@v-yueyunzh-msft esto funcionó perfectamente, gracias!

Sin embargo, no entiendo muy bien la compleja medida, ¿podría explicarla?

Syndicate_Admin
Administrator
Administrator

Hi, @Sachintha

Para su primera necesidad, Mostrar valores (ceros) para los empleados que nunca han enviado un ticket. Solo necesita seleccionar esto:

vyueyunzhmsft_0-1680147056428.png

Para su segunda necesidad, estos son los pasos que puede consultar .

Necesitamos crear una columna calculada como esta:

Year_month = YEAR([Date])*100+MONTH([Date])

Entonces podemos crear una medida como esta:

Measure = 
var _cur_year_month =CALCULATE( MAX('TicketList'[Year_month]), ALL('test2'[Manager]))
var _em1= VALUES('test2'[Employee])
var _em2 = CALCULATETABLE( VALUES(test2[Employee]) , 'test2'[Manager] in _em1,ALLSELECTED('test2'))
var _em3 = UNION(_em1,_em2)
var _total = COUNTROWS(_em3)
var _test =ADDCOLUMNS( CROSSJOIN( ALLSELECTED('test2'[Employee]) , ALLSELECTED('TicketList'[Year_month])) ,"flag" , CALCULATE(DISTINCTCOUNT('TicketList'[ID]),TREATAS({[Employee]},TicketList[Employee]),TREATAS({[Year_month]},'TicketList'[Year_month])  ,ALL('test2'[Manager])  ))
var _t2 = FILTER(_test, [flag] <> BLANK()  && [Year_month]=_cur_year_month && [Employee] in _em3)
return
COUNTROWS( _t2) / COUNTROWS(_em3)

Entonces podemos poner esta medida en el visual y podemos satisfacer su necesidad:

vyueyunzhmsft_1-1680147125446.png

Gracias por su tiempo y uso compartido, y gracias por su apoyo y comprensión de PowerBI.

Saludos

Dijo Zhang

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors