Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
cvalarcon
Contributor III
Contributor III

extraer ultimos peridos

Hola expertos

Tengo que realizar una extracción de datos de los 3 últimos periodos.

Los datos origen tienen cada periodo con el mismo nombre

_Clientes_Gral_S29_201904.txt

_Clientes_Gral_S29_201903.txt

_Clientes_Gral_S29_201902.txt

_Clientes_Gral_S29_201901.txt

Actualmente se están levantando los todos los periodos _Clientes_Gral_S29_*.txt y en la app solamente levantando los 3 últimos periodos a partir de la fecha de hoy.

La idea es ver como poder levantar solamente los últimos 3 periodos (3 meses)  solamente y no levantar todos los meses ya que ocuparía mucho espacio y tiempo de QVDs

Desde ya gracias

 

 

 

 

 

Labels (5)
2 Solutions

Accepted Solutions
rubenmarin

Hola, la variable vFile no hace falta definirla.

 

Tienes dos variables que deberían ser la misma: vRutaInfoExterna y vRutaFicheros.

Lo mismo para vPeriodo1 y vFirstPeriod.

 

Al from seguramente le faltará algo más: "(biff, no labels, table is Sheet1$)", "(txt, codepage is 28591, no labels, delimiter is '\t', msq)"... algo que defina el formato del fichero y como leerlo, por ejemplo:

FROM [$(vFile)] (biff, no labels, table is Sheet1$) ;

View solution in original post

rubenmarin

La idea es muy parecida, recorrerlos todos y quedarte con el más alto:
SET vRutaInfoExterna = \\srvapwb12\SCG_INFORMACION_EXTERNA$\;
LET vMaxPeriod = 0;

FOR EACH vFile IN FILELIST ('$(vRutaInfoExterna)USUARIOS\SALIDAS GENERALES\Cliente_360-Archivos Salida\_Clientes_Gral_S29_*.txt')
LET vFilePeriod = RIGHT(LEFT('$(vFile)', INDEX('$(vFile)', '.')-1),6);

IF $(vFilePeriod) > $(vMaxPeriod) THEN
LET vMaxPeriod = '$(vFilePeriod)';
ENDIF
NEXT

Al acabar el bucle vMaxPeriod debe tener almacenado el periodo más alto.

View solution in original post

8 Replies
rubenmarin

Hola, hay un foro dedicado para consultas en español: https://community.qlik.com/t5/Qlik-en-Espa%C3%B1ol/gp-p/spanish-group

Sobre tu duda podrías leer todos los archivos pero cargar solo los que cumplan la conción, por ejemplo:
SET vRutaFicheros = C:\Carpeta;
LET vFirstPeriod = Date(AddMonths(Today(),-3), 'YYYYMM');

For each vFile in FileList('$(vRutaFicheros)\*_Clientes_Gral_S29*.txt')
LET vFilePeriod = Right(Left('$(vFile)', Index('$(vFile)', '.')-1),6);

IF $(vFilePeriod) >= $(vFirstPeriod) THEN
LOAD * From [$(vFile)] ...;
ENDIF
Next
cvalarcon
Contributor III
Contributor III
Author

Gracias Ruben , voy a tener en cuenta de escribir en el chat correcto .

Respecto al script lo pruebo  y te comento

Desde ya gracias

 

cvalarcon
Contributor III
Contributor III
Author

Hola Ruben , lo he probado y no me funciono. Te paso el script como lo estoy modificando, la variable vFile veo q no estas definida.

SET vRutaInfoExterna = \\srvapwb12\SCG_INFORMACION_EXTERNA$\;
LET vPeriodo1 = NUM#(DATE(AddMonths(Today(),-3),'YYYYMM'));

FOR EACH vFile IN FILELIST ('$(vRutaFicheros)USUARIOS\SALIDAS GENERALES\Cliente_360-Archivos Salida\_Clientes_Gral_S29_*.txt')
LET vFilePeriod = RIGHT(LEFT('$(vFile)', INDEX('$(vFile)', '.')-1),6);

IF $(vFilePeriod) >= $(vFirstPeriod) THEN

Clientes_Gral_TablaOrigen:
LOAD

BPCLIENT ,
SUCURSAL ,
TIPOPERN ,
TIPOPERD ,
APEYNOMB ,
NRODEDOC ,
TDOCSIBA ,
CUITCLIE ,
ESTCIVIL 

FROM [$(vFile)] ;

ENDIF
NEXT

STORE * FROM Clientes_Gral_TablaOrigen INTO $(vRutaQVD)\CLIXXX_Cliente360_Total.qvd (qvd);

 

Desde ya gracias 

rubenmarin

Hola, la variable vFile no hace falta definirla.

 

Tienes dos variables que deberían ser la misma: vRutaInfoExterna y vRutaFicheros.

Lo mismo para vPeriodo1 y vFirstPeriod.

 

Al from seguramente le faltará algo más: "(biff, no labels, table is Sheet1$)", "(txt, codepage is 28591, no labels, delimiter is '\t', msq)"... algo que defina el formato del fichero y como leerlo, por ejemplo:

FROM [$(vFile)] (biff, no labels, table is Sheet1$) ;

cvalarcon
Contributor III
Contributor III
Author

Hola Ruben ,

Ahora quedo perfecto tomando los 3 últimos periodos correctamente.

Copio el script completo para que quede como referencia para la comunidad 

 

SET vRutaInfoExterna = \\srvapwb12\SCG_INFORMACION_EXTERNA$\;
LET vPeriodo3 = NUM#(DATE(AddMonths(Today(),-3),'YYYYMM'));

FOR EACH vFile IN FILELIST ('$(vRutaInfoExterna)USUARIOS\SALIDAS GENERALES\Cliente_360-Archivos Salida\_Clientes_Gral_S29_*.txt')
LET vFilePeriod = RIGHT(LEFT('$(vFile)', INDEX('$(vFile)', '.')-1),6);

IF $(vFilePeriod) >= $(vPeriodo3) THEN

Clientes_Gral_TablaOrigen:
LOAD

BPCLIENT ,
SUCURSAL ,
TIPOPERN ,
TIPOPERD  ......

......


FROM $(vFile)
(txt, codepage is 1252, embedded labels, delimiter is '|', msq) ;

ENDIF
NEXT

STORE * FROM Clientes_Gral_TablaOrigen INTO $(vRutaQVD)\CLIXXX_Cliente360_Total.qvd (qvd);

 

Gracias por la ayuda y la velocidad de respuesta.

Slds

 

 

cvalarcon
Contributor III
Contributor III
Author

Hola 

Ahora tengo otra consulta ya q necesito leer cual es el ultimo file q tengo cargado en un directorio.En  este caso tengo 

_Clientes_Gral_S29_201904.txt

_Clientes_Gral_S29_201903.txt

_Clientes_Gral_S29_201902.txt

etc

La idea es poder saber cual es el ultimo file en el directorio (en este caso el 201904) como para saber q a partir de ahi puedo levantar los 3 ultimos peridos.

Desde ya gracias

rubenmarin

La idea es muy parecida, recorrerlos todos y quedarte con el más alto:
SET vRutaInfoExterna = \\srvapwb12\SCG_INFORMACION_EXTERNA$\;
LET vMaxPeriod = 0;

FOR EACH vFile IN FILELIST ('$(vRutaInfoExterna)USUARIOS\SALIDAS GENERALES\Cliente_360-Archivos Salida\_Clientes_Gral_S29_*.txt')
LET vFilePeriod = RIGHT(LEFT('$(vFile)', INDEX('$(vFile)', '.')-1),6);

IF $(vFilePeriod) > $(vMaxPeriod) THEN
LET vMaxPeriod = '$(vFilePeriod)';
ENDIF
NEXT

Al acabar el bucle vMaxPeriod debe tener almacenado el periodo más alto.
cvalarcon
Contributor III
Contributor III
Author

Gracias Ruben funciona correctamente.

Por otro lado tenes algun link o pdf donde pueda profundizar mas con temas de scripting  ?

Porque estoy viendo varios papers pero no son tan profundos para hacer script . Actualmente estoy leyendo Qlikview Scripting pero quisiera algo mas profundo me podrias recomendar algo ? 

Desde ya gracias 

Slds

Carlos