Skip to main content
Announcements
Accelerate Your Success: Fuel your data and AI journey with the right services, delivered by our experts. Learn More
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Crear nuevos registros en carga

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!!!!

7 Replies
Not applicable
Author

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.

Anonymous
Not applicable
Author

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!

_k0zm0_2
Contributor III
Contributor III

¿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;

Not applicable
Author

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

  • 0 para lunes
  • 1 para martes
  • 2 para miércoles
  • 3 para jueves
  • 4 para viernes
  • 5 para sábado
  • 6 para domingo

Con esta condicional excluimos los sábados y domingos.

Espero que te haya ayudado.

Saludos.

Anonymous
Not applicable
Author

Lo pruebo y os digo, muchas gracias a los dos!!!

Anonymous
Not applicable
Author

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) ;

_k0zm0_2
Contributor III
Contributor III

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:

Use of Master Calendar

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)