Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenas a todos! Estoy armando algo que me tiene trabado.
Tengo una sola tabla empleados.
LOAD INLINE [ ID, NOMBRE, INGRESO, BAJA 1, empleadoA, 01/01/2010, 0 2, empleadoB, 03/05/2010, 0 3, empleadoC, 19/03/2010, 16/12/2011 4, empleadoD, 05/11/2011, 06/11/2013 5, empleadoE, 03/05/2011, 0 6, empleadoF, 10/12/2013, 0 7, empleadoG, 10/12/2013, 03/03/2014 8, empleadoH, 04/03/2014, 10/10/2017 9, empleadoI, 05/03/2014, 0 10, empleadoj, 06/03/2014, 10/12/2018 ];
Lo que quiero saber es la cantidad de empleados que había a una determinada fecha, mes, año
Siguiendo el ejemplo del Inline:
año #empleados
2010: 3
2011: 4
2012: 4
2013: 5
2014: 7
2015: 7
2016: 7
2017: 6
2018: 5
Hola, mi espanol es basura, pero trataré. Tu puedes hacer algo como el bajo,
Empleados: LOAD *, ID AS '%tenure_calendar_id_key', Date(Date#(INGRESO,'DD/MM/YYYY')) AS 'LLEGAR', If([BAJA] = 0, Today(), Date(Date#(BAJA,'DD/MM/YYYY'))) AS 'SALIERON' ; LOAD * INLINE [ ID, NOMBRE, INGRESO, BAJA 1, empleadoA, 01/01/2010, 0 2, empleadoB, 03/05/2010, 0 3, empleadoC, 19/03/2010, 16/12/2011 4, empleadoD, 05/11/2011, 06/11/2013 5, empleadoE, 03/05/2011, 0 6, empleadoF, 10/12/2013, 0 7, empleadoG, 10/12/2013, 03/03/2014 8, empleadoH, 04/03/2014, 10/10/2017 9, empleadoI, 05/03/2014, 0 10, empleadoj, 06/03/2014, 10/12/2018 ]; DROP FIELD [BAJA], INGRESO ; EmployeeTenureDates: LOAD "ID" AS '%tenure_calendar_id_key', Date(StartDate + IterNo() - 1) AS '%master_calendar_key', Date(StartDate + IterNo() - 1) As 'Employee Tenure Date' While StartDate + IterNo() - 1 <= EndDate ; LOAD "ID", DayStart((Floor("LLEGAR"))) As StartDate, DayStart((Floor("SALIERON"))) As EndDate Resident Empleados ; MasterCalendar: LOAD TempDate AS %master_calendar_key, Date(DayStart(TempDate)) AS CalDate, WEEK(TempDate) As Week, YEAR(TempDate) As Year, MONTH(TempDate) As Month, ; //=== Generate a temp table of dates === LOAD DATE(mindate + IterNo()) AS TempDate ,maxdate // Used in InYearToDate() above, but not kept WHILE mindate + IterNo() <= maxdate; //=== Get min/max dates from Field ===/ LOAD MIN(FieldValue('%master_calendar_key', recno()))-1 as mindate, MAX(FieldValue('%master_calendar_key', recno())) as maxdate AUTOGENERATE FieldValueCount('%master_calendar_key'); EXIT Script ;
Entonces en el chart(?), la measura sería "COUNT(DISTINCT ID)" y la dimensión sería "Year". Espero que esto ayudara.
Hola,
Puedes usar la funcion Intervalmatch pero necesitas definir un campo auxiliar BAJA2 para que entienda el rango de intervalo.
Seria algo asi:
Empleados: LOAD *, Date(If(BAJA=0, Today(),BAJA)) as BAJA2 INLINE [ ID, NOMBRE, INGRESO, BAJA 1, empleadoA, 01/01/2010, 0 2, empleadoB, 03/05/2010, 0 3, empleadoC, 19/03/2010, 16/12/2011 4, empleadoD, 05/11/2011, 06/11/2013 5, empleadoE, 03/05/2011, 0 6, empleadoF, 10/12/2013, 0 7, empleadoG, 10/12/2013, 03/03/2014 8, empleadoH, 04/03/2014, 10/10/2017 9, empleadoI, 05/03/2014, 0 10,empleadoj, 06/03/2014, 10/12/2018 ]; //Creamos un calendario con el rango de fechas descrito en la tabla de empleados Temp_Calendar: Load min(INGRESO) as minDate Resident Empleados; Let varMinDate = Num(Peek('minDate', 0, 'Temp_Calendar')); Let varMaxDate = Num(Today()); DROP Table Temp_Calendar; Calendar: LOAD Date($(varMinDate) + IterNo() - 1) as TempDate AutoGenerate 1 While $(varMinDate) + IterNo() -1 <= $(varMaxDate); IntervalMatch (TempDate) Load Distinct INGRESO, BAJA2 Resident Empleados; DROP Table Calendar;
A partir de aquí puedes crear una tabla que reproduzca lo que comentas.
En la dimension muestras el año: Year(TempDate)
Y en la Expresion simplemente cuentas los empleados sin repetir: Count(Distinct ID)
Ag+
Hola gracias por la respuesta. Debe faltar algún drop field porque me crea una sys table con INGRESO y BAJA2 y luego crea también una tabla Empleados-1 con INGRESO, BAJA2 y TempDate.
Si claro,
El problema de la llave sintética se resuelve con un left join sobre la tabla de empleados en el interval martch
Left Join (Empleados) IntervalMatch (TempDate) Load Distinct INGRESO, BAJA2 Resident Empleados;
Te refieres a esto?
Es que no entiendo muy bien el problema de comentas con los ingresos y las bajas que no cuadra.
Ag+