Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola!
Gracias por aceptarme en el grupo.
Quisiera saber si alguien tiene experiencia en cargas incrementales para Sense Desktop.
Mi BD remota tiene muchos registros, y cada que le doy "load data" vuelve a bajar todo.
Hay forma de que solo baje los ultimos registros?
Tengo campos de identificcion unicos por registro, y tambien campos de fecha y hora.
Alguna sugerencia?
Gracias!
Este es un post algo viejo, pero por si le sirve a alguien, así es como yo lo haría:
Las cargas incrementales a nivel script se comportan igual tanto para QlikView como para QlikSense.
Si estás haciendo la extracción directamente de la B.D. se me ocurren ciertas cosas:
Por ejemplo:
MaxFecha:
LOAD max(CampoFecha) as maxFecha FROM MiQVD.qvd (qvd);
Una vez obtenido esa fecha (maxFecha), lo que necesitas es agregar una condición WHERE a tú query, dónde utilices algún campo fecha para que sólo te extraiga los datos más recientes Por ejemplo:
vFecha = peek('maxFecha', MaxFecha);
SELECT *
FROM miBD
WHERE Fecha >= $(vFecha);
Espero sea de utilidad.
¡Saludos!
Este es un post algo viejo, pero por si le sirve a alguien, así es como yo lo haría:
Las cargas incrementales a nivel script se comportan igual tanto para QlikView como para QlikSense.
Si estás haciendo la extracción directamente de la B.D. se me ocurren ciertas cosas:
Por ejemplo:
MaxFecha:
LOAD max(CampoFecha) as maxFecha FROM MiQVD.qvd (qvd);
Una vez obtenido esa fecha (maxFecha), lo que necesitas es agregar una condición WHERE a tú query, dónde utilices algún campo fecha para que sólo te extraiga los datos más recientes Por ejemplo:
vFecha = peek('maxFecha', MaxFecha);
SELECT *
FROM miBD
WHERE Fecha >= $(vFecha);
Espero sea de utilidad.
¡Saludos!
Hola Eduardo, muchas gracias por responderme!
Mi escenario es el siguiente:
En el Sense Desktop -> Data Load Editor, hay dos secciones: Main y Auto-generated
En teoria lo que entiendo es que en la seccion auto-generated es donde se bajan los datos (ahi hay sentencias LOAD y sentencias SQL)
En el sistema de archivos no veo ningun QVD, solo un QVF con el nombre de mi BD -- qiuere decir que tendria que bajar todo a un nuevo QVD, y luego filtrarlo con la funcionalidad de MaxFecha que me mencionas?
En que seccion tengo que hacer todo, esto, en la Main? ahi tiene 17 sentencias SET...
Gracias!
Hola Edgar, el archivo QVF que se crea es el que crea Qlik Sense Desktop para tu aplicación. En este caso y como tu mencionas si necesitarías guardar la información extraída en un archivo QVD. Utilizando un
STORE MiTable INTO MiQVD.qvd (qvd);
Posteriormente sólo harías la consulta a la B.D. para extraer los nuevos registros, cargarías tu QVD ya creado y le pegarías los nuevos registros. Por ejemplo:
Tabla:
SQL SELECT * FROM Tabla_BD
WHERE FechaModificacion >= CampoFecha;
Concatenate
LOAD *
FROM MiQVD.qvd (qvd);
Estás en lo correcto en que la sección de Auto-Generate es la que realiza la extracción de la B.D:, esta es generada automáticamente por la funcionalidad del Qlik Sense 2.0.1 al utilizar el Data Manager. Si necesitas editar dicho código, le puedes dar clic en el icono del candado. Ten en cuenta que si editas directamente el código ya no podrás utilizar el Data Manager para editar tu código de carga y tendrás que hacerlo manualmente. A final de cuentas si quieres implementarle cambios para hacerlo incremental se tiene que hacer manualmente, así que no tengas miedo.
Las sentencias SET que mencionas en Main son variables de sistema que genera (y utiliza) Qlik Sense; éstas te recomiendo dejarlas así para su correcto funcionamiento. Tu puedes escribir código en Main debajo de las variables o crear más secciones (pestañas) en el editor de código sí así lo deseas y no debe de haber ningún problema.
¡Saludos!
Hola Alejandro, Gracias por el apoyo, mira te muestro mi codigo de carga inicial, me manda error... dice "Failed to open file in write mode for file C:\Users\krantz\Documents\QVDs\Fechas.qvd "
Hice mi conexion al folder (QVDMasOrganica) como indica la ayuda, pero no puedo cargar mis datos inicialmente. Aqui el codigo:
LIB CONNECT TO 'masorganica';
Fechas:
LOAD Fecha;
SQL SELECT Fecha
FROM central.dbo.Fechas;
store * from Fechas into 'lib://QVDMasOrganica/Fechas.qvd'
SumpTank2SinAgua:
LOAD Dia,
Hora,
Minuto,
sumpTank2;
SQL SELECT Dia,
Hora,
Minuto,
sumpTank2
FROM central.dbo.sumpTank2SinAgua;
store * from SumpTank2SinAgua into 'lib://QVDMasOrganica/SumpTank2SinAgua.qvd'
SumpTank1SinAgua:
LOAD Dia,
Hora,
Minuto,
sumpTank1;
SQL SELECT Dia,
Hora,
Minuto,
sumpTank1
FROM central.dbo.sumpTank1SinAgua;
store * from SumpTank1SinAgua into 'lib://QVDMasOrganica/SumpTank1SinAgua.qvd'
VistaLecturas:
LOAD Momento,
Dia,
Hora,
Minuto,
T1,
CalentadorT1,
T2,
CalentadorT2,
T3,
CalentadorT3,
T4,
CalentadorT4,
Ambiente,
Luz,
statusLuzCrecimiento,
Ph1,
Ph2,
ID,
sumpTank1,
sumpTank2,
statusBombaAuxiliar1,
statusBombaAuxiliar2,
HumedadExterior,
TemperaturaExterior,
TemperaturaAparenteExterior,
Lluvia,
CortinasAbiertas,
LuzExterior,
temperaturaInterCooler,
statusBombaIntercooler;
SQL SELECT Momento,
Dia,
Hora,
Minuto,
T1,
CalentadorT1,
T2,
CalentadorT2,
T3,
CalentadorT3,
T4,
CalentadorT4,
Ambiente,
Luz,
statusLuzCrecimiento,
Ph1,
Ph2,
ID,
sumpTank1,
sumpTank2,
statusBombaAuxiliar1,
statusBombaAuxiliar2,
HumedadExterior,
TemperaturaExterior,
TemperaturaAparenteExterior,
Lluvia,
CortinasAbiertas,
LuzExterior,
temperaturaInterCooler,
statusBombaIntercooler
FROM central.dbo.vistaLecturas;
store * from VistaLecturas into 'lib://QVDMasOrganica/VistaLecturas.qvd'
BombasAuxiliaresActivadas:
LOAD Dia,
Hora,
Minuto,
statusBombaAuxiliar1,
statusBombaAuxiliar2;
SQL SELECT Dia,
Hora,
Minuto,
statusBombaAuxiliar1,
statusBombaAuxiliar2
FROM central.dbo.bombasAuxiliaresActivadas;
Store * from BombasAuxiliaresActivadas into 'lib://QVDMasOrganica/BombasAuxiliaresActivadas.qvd'
Podrias por favor indicarme que estoy haciendo mal? gracias!
Que tal Edgar, así de primera impresión veo que te falta poner los punto y coma después de tus sentencias STORE. Como no lo tienes Qlik Sense no debe saber dónde termina el nombre del archivo e intenta hacer un nombre inválido con todo el resto de las palabras en el script.
También es recomendable indicar el tipo de datos (qvd), que aunque por defecto Qlik Sense asume es en formato QVD, no está de más hacerlo explícito como buena práctica:
store * from Fechas into 'lib://QVDMasOrganica/Fechas.qvd' (qvd);
Saludos.
Ahora si me sentí como noob.
Gracias
Ahora voy con el script de carga incremental per-se.
Saludos, te agradezco tu invaluable apoyo.
Hola Alejandro:
Mira, hice esto:
MaxFecha:
LOAD max(Momento) FROM "lib://QVDMasOrganica/VistaLecturas.qvd" (qvd);
LET vFecha = peek('Momento', MaxFecha);
Pero a la hora de correrlo, tanto vFecha como MaxFecha son nulos -- entonces a la hora de hacerle el load a la base de datos central, me manda error porque la condicion WHERE no trae valor despues del >
Alguna idea acerca de lo que posiblemente haya hecho mal?
Gracias!
Prueba poniendo
MaxFecha:
LOAD max(Momento) as Momento
FROM "lib://QVDMasOrganica/VistaLecturas.qvd" (qvd);
LET vFecha = Peek('Momento', 0, 'MaxFecha');
Como no le estás poniendo nombre a tu campo con AS, el campo de tu tabla se llama 'max(Momento)' por eso no lo encuentra el Peek.
Saludos
Ha ha, ¡a todos nos pasa!