Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenas tardes comunidad, les escribo para saber si me pueden ayudar con un tema en especifico.
Resulta que tengo una conexión a un servidor, en dicho en la carpeta X se van añadiendo archivos XLSX diariamente y desde hace varios meses atrás. Estos archivos vienen en su nombre con la fecha de carga al servidor seguido de su nombre según el tipo de archivo, por ejemplo:
aaammddhhmmss_ventas.xlsx
aaammddhhmmss_compras.xlsx
... (y algunos otros)
el tema es que quisiera hacer una selección de todos los archivos relacionados con ventas del mes, por ejemplo hoy 18 de febrero, quisiera cargar todos los archivos que son de ventas y están desde el 1 de febrero, mañana obviamente quiero cargar los mismos pero hasta el 19 de febrero, y así sucesivamente.
Entonces mi duda es la siguiente:
Cómo puedo crear una sentencia en el scrip de Qlik para que recorra todos archivos comprobando que sean archivos de "ventas" y correspondan al rango de fecha que yo quiera.
Lo único que se me vino a la cabeza fue ir recorriendo archivo por archivo y comprobar si en el nombre sale la palabra "ventas" después de la fecha, pero tampoco se cómo aplicarlo.
Cualquier ayuda quedaría totalmente agradecido.
Hola de nuevo @Gonzalo_Adaro , para eso, se me ocurre lo siguiente :
Let vAño = year(today());
Let vMes = month(today());
Let vDia = day(today());
For vDiaX = 1 to $(vDia)
Let vFecha = $(vAño) & num($(vDiaX),'00') & num($(vMes),'00');
LOAD *
FROM
[..\Documents\$(vFecha)*_ventas.xlsx]
(ooxml, no labels, table is [1]);
Next
Hola @Gonzalo_Adaro , simplificando tu consulta, se podría cargar los archivos que contengan la palabra 'ventas', y que sean del año en curso y del mes en curso además de usar el asterisco para cargar mas de un archivo :
Let vAño = year(today());
Let vMes = num(month(today()),'00');
LOAD *
FROM
[..\Documents\$(vAño)$(vMes)*_ventas.xlsx]
(ooxml, no labels, table is [1]);
Gracias Fabian, gracias por la ayuda, aunque ahora tengo otro problema, la nomenclatura correcta de los archivos es la siguiente:
aaaaddmmhhmmss_ventas.xlsx (año, dia, mes, horas, minutos, segundos)
Entonces como puedo hacer para que el dd tome desde inicio de mes hasta el día actual.
Intente con Let = vDay(today()); pero solo me cargara los del día actual.
Hola de nuevo @Gonzalo_Adaro , para eso, se me ocurre lo siguiente :
Let vAño = year(today());
Let vMes = month(today());
Let vDia = day(today());
For vDiaX = 1 to $(vDia)
Let vFecha = $(vAño) & num($(vDiaX),'00') & num($(vMes),'00');
LOAD *
FROM
[..\Documents\$(vFecha)*_ventas.xlsx]
(ooxml, no labels, table is [1]);
Next
Muchas Gracias Fabian, todo funcionó perfecto!
Lo que te quería consultar, solo para no quedar con la duda, es que si quisiera hacerlo con un rango de fechas especifico, por ejemplo entre el 1 de enero del 2021 al 15 de enero del 2021, sería con el mismo código?
En ese caso como le indico el rango a la sentencia?
Y otra consulta, es necesario colocar la sentencia next? si la coloca me da un error.
Hola Fabian, trabajando hoy, te quería consulta con la solución que me brindaste.
Efectivamente el código me logra cargar los archivos, pero al momento de no encontrar el archivo en algún día ¿, este arroja un error. Por ejemplo:
El ciclo for:
Carga archivos día 1
Carga archivos día 2
Carga archivos día 3
y en el día 4 no tengo archivos, pero si en el 5 y el resto de los días.
Es en el día 4 en donde no encuentra un archivo en la ruta especificada y me arroba un error.
Hola @Gonzalo_Adaro , normalmente para los ciclos For, y controlar errores de falta de archivo, antes del 'For', debieses setaer la variable de entorno de errores en 0, para que no arroje error, e intente con el siguiete ciclo :
Set errormode = 0;
For
..
..
Next
Set errormode = 1;