Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
VeroSaravia
Contributor
Contributor

Abrir un registro en n registros partiendo de dos valores (fechas)

Buenas, necesito ayuda para trabajar en el script, tengo una fecha de inicio y otra de fin en el mismo registro y quiero abrir en n registros que vayan desde año_mes que me da la fecha de inicio y termine en el año_mes que me da la fecha fin.

TABLA_1:
Load

,id

,fecha_inicio

,fecha_fin

from x

 

Ejemplo: 

Partiendo del primer registro:

id, fecha_inicio,fecha_fin --> columnas

1, 12-01-2023,  15-10-2023-->registro 1

 

Quiero obtener esta tabla:

id,fecha_inicio, fecha_fin, año_mes
1, 12-01-2023,  15-10-2023,2023-01
1, 12-01-2023,  15-10-2023,2023-02
1, 12-01-2023,  15-10-2023,2023-03
1, 12-01-2023,  15-10-2023,2023-04
1, 12-01-2023,  15-10-2023,2023-05
1, 12-01-2023,  15-10-2023,2023-06
1, 12-01-2023,  15-10-2023,2023-07
1, 12-01-2023,  15-10-2023,2023-08
1, 12-01-2023,  15-10-2023,2023-09
1, 12-01-2023,  15-10-2023,2023-10

-->mismo id abierto en n registros por el nuevo campo año_mes que inicia con fecha_inicio y termina con año_mes de la fecha_fin

Espero me puedan ayudar.

Gracias!

 

Labels (2)
1 Solution

Accepted Solutions
cristianj23a
Partner - Creator III
Partner - Creator III

Hola VeroSaravia, prueba este código:

// Cargar la tabla original
TABLA_ORIGINAL:
LOAD
id,
fecha_inicio,
fecha_fin
FROM [x];

// Crear una tabla temporal con todas las fechas posibles entre el mínimo y el máximo
TEMP_FECHAS:
LOAD
Min(fecha_inicio) + IterNo() - 1 as TempFecha
AUTOGENERATE 1
WHILE Min(fecha_inicio) + IterNo() - 1 <= Max(fecha_fin);

// Unir la tabla de fechas temporal con la tabla original
TEMP_JOIN:
CROSS JOIN
LOAD
id,
fecha_inicio,
fecha_fin
RESIDENT TABLA_ORIGINAL;

TABLA_FINAL:
LOAD
id,
TempFecha as Fecha,
Year(TempFecha) & '-' & Num(Month(TempFecha), '00') as año_mes
RESIDENT TEMP_JOIN
WHERE fecha_inicio <= TempFecha
and fecha_fin >= TempFecha;

// Borrar las tablas temporales para liberar espacio en la memoria
DROP TABLE TEMP_FECHAS;
DROP TABLE TEMP_JOIN;

Este script genera una nueva tabla llamada TABLA_FINAL que incluye una fila para cada mes entre fecha_inicio y fecha_fin. Por favor, recuerda que la ruta del archivo, el formato de fecha y los nombres de las columnas deben adaptarse a tu caso específico.

Tambien considera que un deglose tiene mas datos y puede consumir mayor memoria RAM.

 

https://www.linkedin.com/in/cristianjorge/
Do not forget to mark as "Accepted Solution" the comment that resolves the doubt.

View solution in original post

3 Replies
cristianj23a
Partner - Creator III
Partner - Creator III

Hola VeroSaravia, prueba este código:

// Cargar la tabla original
TABLA_ORIGINAL:
LOAD
id,
fecha_inicio,
fecha_fin
FROM [x];

// Crear una tabla temporal con todas las fechas posibles entre el mínimo y el máximo
TEMP_FECHAS:
LOAD
Min(fecha_inicio) + IterNo() - 1 as TempFecha
AUTOGENERATE 1
WHILE Min(fecha_inicio) + IterNo() - 1 <= Max(fecha_fin);

// Unir la tabla de fechas temporal con la tabla original
TEMP_JOIN:
CROSS JOIN
LOAD
id,
fecha_inicio,
fecha_fin
RESIDENT TABLA_ORIGINAL;

TABLA_FINAL:
LOAD
id,
TempFecha as Fecha,
Year(TempFecha) & '-' & Num(Month(TempFecha), '00') as año_mes
RESIDENT TEMP_JOIN
WHERE fecha_inicio <= TempFecha
and fecha_fin >= TempFecha;

// Borrar las tablas temporales para liberar espacio en la memoria
DROP TABLE TEMP_FECHAS;
DROP TABLE TEMP_JOIN;

Este script genera una nueva tabla llamada TABLA_FINAL que incluye una fila para cada mes entre fecha_inicio y fecha_fin. Por favor, recuerda que la ruta del archivo, el formato de fecha y los nombres de las columnas deben adaptarse a tu caso específico.

Tambien considera que un deglose tiene mas datos y puede consumir mayor memoria RAM.

 

https://www.linkedin.com/in/cristianjorge/
Do not forget to mark as "Accepted Solution" the comment that resolves the doubt.
VeroSaravia
Contributor
Contributor
Author

Excelente Cristian! Funcionó.

cristianj23a
Partner - Creator III
Partner - Creator III

Me alegra 🙂

https://www.linkedin.com/in/cristianjorge/
Do not forget to mark as "Accepted Solution" the comment that resolves the doubt.