Buzzshot43
Hola,
Me preguntaba si es posible recrear esta guía y funcionalidad en PowerBI:
https://www.linkedin.com/pulse/survival-curves-tableau-hr-data-chris-short/
Gracias.
Greg_Deckler
@ Buzzshot43 – Tengo la solución completa publicada en un artículo de blog aquí:
https://www.linkedin.com/pulse/kaplan-meier-survival-curves-power-bi-greg-deckler-microsoft-mvp-
Greg_Deckler
@ Buzzshot43 – Tengo la solución completa publicada en un artículo de blog aquí:
https://www.linkedin.com/pulse/kaplan-meier-survival-curves-power-bi-greg-deckler-microsoft-mvp-
Greg_Deckler
Sí, eso parece bastante básico. Veré si puedo simular algunos datos y recrearlos en Power BI DAX, pero definitivamente es posible.
Buzzshot43
En respuesta a Greg_Deckler
Muchas gracias @Greg_Deckler. Será muy apreciado.
Greg_Deckler
En respuesta a Buzzshot43
@ Buzzshot43, publiqué esto en otro hilo, pero pensé que también lo publicaría aquí. El otro hilo está aquí:
https: //community.powerbi.com/t5/Desktop/Kaplan-Meier-Survival-Curves/mp/330094/highlight/false#M14 …
Esta solución está cerca y creo que es una forma viable de resolver esto, pero no obtengo exactamente los mismos resultados, por lo que es posible que necesite algunos ajustes. Artículo original aquí: https://www.linkedin.com/pulse/survival-curves-tableau-hr-data-chris-short/
Mi ego me haría creer que el artículo original es un error, pero eso probablemente no sea cierto y tengo algo en mis cálculos, si alguien pudiera ayudarme a encontrar dónde las cosas van mal, ¡sería genial! 🙂
Bien, empiezo con la tabla HRData del artículo mencionado anteriormente. Lo publicaría aquí, pero serían demasiados datos. Aquí están las primeras 10 filas:
IDENTIFICACIÓN | Nombre | Fecha de contratación | Fecha de conclusión | Estado | Departamento |
0 | 1/1/2010 | 1/1/2010 | Inactivo | HORA | |
0 | 1/1/2010 | 1/1/2010 | Inactivo | Ventas | |
1 | Inez Laurie | 23/4/2010 | 2/9/2015 | Inactivo | HORA |
2 | Yasuko Scruton | 20/01/2010 | Activo | HORA | |
3 | Kristopher Walkes | 18/4/2010 | Activo | HORA | |
4 | Geraldine Mclennon | 12/6/2010 | Activo | HORA | |
5 | Pilar Willard | 14/01/2010 | Activo | HORA | |
6 | Candace Molton | 19/4/2010 | 4/4/2012 | Inactivo | HORA |
7 | Evelyne Kneeland | 22/4/2010 | Activo | HORA | |
8 | Elois contrata | 26/5/2010 | 11/8/2013 | Inactivo | HORA |
9 | Keeley Dewolf | 11/01/2010 | 27/05/2012 | Inactivo | HORA |
10 | Melisa Padua | 16/05/2010 | Activo | HORA |
Entonces, creé una tabla KM como esta:
KM = SUMMARIZE(HRData,HRData[Years],"Count",SUM(HRData[Count]),"d_i",SUM(HRData[Event]))
Luego agregué estas columnas:
Running = SUMX(FILTER(ALL(KM),[Years]<EARLIER([Years])),KM[Count])
n_i = [Count] + CALCULATE(SUM([Count]),ALL(KM)) - [Running]
d_i/n_i = KM[d_i]/KM[n_i]
1-d_i/n_i = 1-KM[d_i/n_i]
Entonces esta medida:
MyKM = CALCULATE( PRODUCT('KM'[1-d_i/n_i]), FILTER( ALLSELECTED('KM'[Years]), ISONORAFTER('KM'[Years], MAX('KM'[Years]), DESC) ) )
A continuación, puede trazar KM[Years] en el eje xy MyKm en el eje y en un gráfico de líneas.
Bien, entonces quería hacer esto por Departamento, así que creé una tabla KMDept como esta:
KMDept = SUMMARIZE(HRData,HRData[DeptYears],"Years",MAX(HRData[Years]),"Department",MAX(HRData[Department]),"Count",SUM(HRData[Count]),"d_i",SUM(HRData[Event]))
Y columnas como estas:
Running = SUMX(FILTER(ALL(KMDept),[DeptYears]<EARLIER([DeptYears]) && KMDept[Department]=EARLIER(KMDept[Department])),KMDept[Count]) n_i = [Count] + CALCULATE(SUM([Count]),ALL(KMDept),FILTER(KMDept,KMDept[Department]=EARLIER(KMDept[Department]))) - [Running] d_i/n_i = KMDept[d_i]/KMDept[n_i] 1-d_i/n_i = 1-KMDept[d_i/n_i]
Y luego una medida como esta:
MyKMDept = CALCULATE( PRODUCT('KMDept'[1-d_i/n_i]), FILTER( ALLSELECTED('KMDept'[Years]), ISONORAFTER('KMDept'[Years], MAX('KMDept'[Years]), DESC) ) )
Entonces, puede trazar KMDept[Years] en el eje xy MyKMDept en el eje y.
Nuevamente, los resultados son similares, pero no 100% iguales y no estoy seguro de qué se puede hacer para mejorar la solución. Seguiré trabajando en eso, pero es un problema interesante. Y si alguien tiene una mejor manera de resolverlo, ¡estoy dispuesto!
Greg_Deckler
En respuesta a Greg_Deckler
Primero, lo siento, olvidé decirte las columnas originales que creé en la tabla HRData:
Years = IF([Status]="Active",DATEDIFF(HRData[Hire Date],TODAY(),YEAR),DATEDIFF(HRData[Hire Date],HRData[Termination Date],YEAR)) Event = IF(HRData[Status] = "Inactive",1,0) Count = 1
Y, como una actualización adicional de esto, primero me olvidé de mencionar que después de crear la tabla, debe relacionar las dos tablas en Years o DeptYears. Además, por una corazonada, creé una columna Días en HRData al igual que la columna Años pero con DÍA especificado en DATEDIFF versus YEAR. Luego creé una tabla KMDays como antes e hice todos los cálculos usando esta tabla, pero todo está en Días y las dos tablas están relacionadas en la columna Días. Aquí está la fórmula de la tabla inicial.
KMDays = SUMMARIZE(HRData,HRData[Days],"Count",SUM(HRData[Count]),"d_i",SUM(HRData[Event]))
Después de tener eso, simplemente agregue el resto de la columna y mida los equivalentes para esa tabla. Cuando trazo KMDays[Days] y la medida MyKMDays, luego obtengo lo que parecen ser los resultados exactos del artículo original. A los 372 días, la medida es del 80,26%, que parece estar muerta al artículo original. Creo que la capacidad de Tableau para generar un verdadero eje continuo es la principal diferencia al hacer esto por año.