Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenos días,
Estoy intentando sin éxito que durante la carga del script Qlik cree nuevos registros. El problema a resolver es el siguiente:
En la tabla original, tengo datos que contienen una fecha inicial y una final, y el calculado de los días; sin embargo, las operaciones sobre este calculado no dan el resultado correcto, por ejemplo para un mes concreto:
Fecha_ini = 25/01/2016
Fecha_fin = 03/02/2016
Num_dias= 10
El calendario se genera a partir de la fecha de inicio, por lo que el dato de Enero/16 = 10, mientras que el correcto debería ser 7.
Resumido, estoy intentando esto:
...
For n=1 to Num_dias
LOAD
censo,
Fecha_ini+$(n) as Fecha_ini,
1 as Num_rev,
...
FROM
....
next ;
Otra forma que me estoy planteando es usar Set análisis, pero me parece menos claro.
¿Alguna idea? Gracias por la ayuda!!!!
Hola Jorge,
No entiendo exactamente cual es el problema, porqué debería ser 7? No deseas generar los días que hay entre la fecha de Inicio y la fecha de Fin?.
Saludos.
Si, me refiero a que el dato de Enero debería ser 7. El objetivo sería efectivamente generar los días entre fecha de inicio y fin.
Gracias!
¿Necesitas días naturales o días laborables ?
Más que nada porque entre las 2 fechas que mencionas:
Inicio: 25/01/2016
Fin: 03/02/2016
Contando días naturales y teniendo en cuenta que el último día (el 03/02/2016) esté en el rango, salen 10 días.
Calculate Duration Between Two Dates – Results.
Edit: el mismo rango pero sin tener en cuenta fines de semana (es decir días laborales)
Business Days Calculator – Count Workdays
Edit 2:
Supongamos que mantenemos esas 2 fechas de inicio y fin.
Creo que lo más sencillo sería hacerlo en 2 pasos:
1) Generar una tabla temporal con los 10 días entre fechas (esto ya lo tienes hecho)
2) De esa tabla temporal, descartar aquellos registros que sean fines de semana.
//Paso 1)
TMP_TABLE:
..
For n=1 to Num_dias
LOAD
censo,
Fecha_ini+$(n) as Fecha_ini,
1 as Num_rev,
...
FROM
....
next ;
//Paso 2)
FINAL_TABLE:
LOAD
*
resident TMP_TABLE
WHERE WEEKDAY(Fecha_Ini) > 4 //5 = sábado, 6 = domingo
;
Drop table TMP_TABLE;
Hola Juan,
Me imagino que quieres generar solo los días laborables tal y como te pregunta Victor, para ello puedes añadirle una condicional como esta:
if(WeekDay('25/01/2016'+$(n))<>5 and WeekDay('25/01/2016'+$(n))<>6,
'25/01/2016'+$(n))as Fecha_ini
Con esta condicional excluimos los sábados y domingos.
Espero que te haya ayudado.
Saludos.
Lo pruebo y os digo, muchas gracias a los dos!!!
Gracias de nuevo.
Lo he resuelto así, creando una nueva tabla generando un nuevo registro por cada día del intervalo.
Load
key,
(fini_inci + IterNo()-1) as fecha,
inci_inci as incidencia,
nom_comp_inci as nom_trabajador,
censo_inci as censo_activo
Resident Incidencias
While IterNo() <= (ffin_inci - fini_inci+1) ;
Un consejo, ve echándole un vistazo al Master Calendar / Calendario Maestro ya que es muy probable que en algún momento te haga falta:
Castellano:
Calendario Maestro para obtener todos los días transcurridos
Inglés:
Master Calendar Generation Script
Aunque hay gente que dice que los scripts típicos de Master Calendar están obsoletos (Better Calendar Scripts | Qlikview Cookbook)