Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola
Voy iniciando en Qlik Sense y necesito entender un poco mejor las cargas incrementales...
He estado haciendo pruebas con un archivo de excel para posteriormente usarlo con mi base de datos
Adjunto el script que estoy utilizando.
Al parecer la funcion logica de
WHERE "Date" > $(vUltimaCarga);
No es ta funcionando puesto que cargo datos nuevos y se agregan por la concatenacion del id pero no es eficiente ya que vuelve a leer todo el archivo de excel y lo vuelve a cargar completamente y no por la fecha de ultima carga y futuro necesitare que sea por fecha para un mejor rendimiento.
Espero me puedan ayudar.
Gracias
Yo pensaba algo como esto, fijate si te sirve:
/******ARCHIVO DE CONTROL********/
LET vFileExists = FileSize('[lib://Datos/Fechas_cargadas]')
//Si existe el archivo de control, se hace la carga incremental
IF $(vFileExists) > 0
then
UltimaCarga:
LOAD MAX(LOAD_DATE) AS MAX_LOAD_DATE
FROM [lib://Datos/Fechas_cargadas];
LET vUltimaCarga = FieldValue('MAX_LOAD_DATE',1);
/******CARGA INCREMENTAL********/
DATOS:
LOAD
id,
first_name,
last_name,
email,
gender,
ip_address,
"Date",
NUM(DATE("Date",'YYYYMMDD') AS REFERENCIA_FECHA
FROM [lib://Datos/Datos Prueba.xlsx] (ooxml, embedded labels, table is data)
WHERE NUM(DATE("Date",'YYYYMMDD') > $(vUltimaCarga);
Concatenate(DATOS)
LOAD
id,
first_name,
last_name,
email,
gender,
ip_address,
"Date",
REFERENCIA_FECHA
FROM [lib://QVD/DATOS.qvd](qvd)
WHERE NOT EXISTS(id);
// NO ENTIENDO EL PROPÓSITO DE ESTA PARTE ¿Es para eliminar registros que no fueron cargados en la última actualización?
/* INNER JOIN
LOAD id
FROM [lib://Datos/Datos Prueba.xlsx]
(ooxml, embedded labels, table is data); */
ELSE
/********CARGA FULL********/
//Si no existe el archivo de control, se hace la carga completa
DATOS:
LOAD
id,
first_name,
last_name,
email,
gender,
ip_address,
"Date"
FROM [lib://Datos/Datos Prueba.xlsx] (ooxml, embedded labels, table is data);
ENDIF;
// SENTENCIA DE STORE
STORE DATOS INTO [lib://QVD/DATOS.qvd](qvd);
DROP TABLE DATOS;
// CONTROL DE FECHAS
Fechas_cargadas:
LOAD NUM(DATE("Date",'YYYYMMDD') AS LOAD_DATE
FROM [lib://QVD/DATOS.qvd](qvd);
// STORE DE ARCHIVO DE CONTROL
STORE Fechas_cargadas INTO [lib://Datos/Fechas_cargadas];
DROP TABLE Fechas_cargadas;
estaba probandolo y me marco el siguiente error en el operador logico
Mala mia: Probá con el siguiente script:
LET vFileExists = if(isnull(FileSize('[lib://Datos/Fechas_cargadas]')),0,1);
También se pueden usar el FileTime() y el qvdloaddate() como funciones alternativas para verificar la existencia de un archivo.
Ntp ya hice los cambios y agregue los parentesis que faltaban ahora el unico problema es que me marca que la sentencia de then no la reconoce
Muchas Gracias por tu paciencia y ayuda Diego
Probá poniendo el then en la misma linea que el if, o también encerrando la variable entre comillas simples
IF '$(vFileExists)' > 0 then
Disculpame los problemas, pero escribí todo en el notepad y no lo corrí en Qlik, por eso salieron tantos errores.
Suerte
Ya casi queda solamente que ahora el campo LOAD_DATE no lo reconoce en la validacion de la existencia del archivo fechas cargadas
El archivo que se creo llamado fechas cargadas lo converti en un qvd y de esa forma ya se hizo la validacion pero ahora me indica que el campo fecha referencia no existe
Hola, ese error será porque el qvd no tiene el campo REFERENCIA_FECHA, si es un campo nuevo habría que realizar una carga inicial del qvd que genere ese campo.
O hacer un script temporal de forma que cree el campo usando el propio qvd:
// Solo ejecutar una vez para generar el campo:
Concatenate(DATOS)
LOAD
id,
first_name,
last_name,
email,
gender,
ip_address,
"Date",
//REFERENCIA_FECHA
NUM(DATE("Date",'YYYYMMDD') AS REFERENCIA_FECHA
FROM [lib://QVD/DATOS.qvd](qvd)
WHERE NOT EXISTS(id);
Ahi te paso la versión actualizada, con agregando el campo faltante en la tabla de carga original (full).
La idea es que si no existe el archivo de control, se hace la carga full... y si el archivo existe, hace el incremental.
De vuelta, mis disculpas por no haber ejecutado el script para revisar errores antes de pasartelo. Espero que la lógica básica te sirva para lo que estas armando.
No hay problema Diego he avanzado contigo en 1 dia que lo que he avanzao yo solo en 2 semanas
No marca errores y las condicionales para realizar la carga incremental funcionan ahora el problema es que no realiza la carga de los nuevos registros te adjunto el log.