Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola,
tengo un QVD hasta una fecha, por ejemplo, están todos los datos hasta ayer,y lo quiero concatenar con la información que saque de la base de datos a partir de hoy. En la base de datos no puedo hacer que me filtre por una fecha ya que no es un atributo que tenga la tabla, de qué manera se puede hacer para que no hay duplicados ni tenga que recargarse el QVD y además toda la base?
Gracias! Saludos
Te adjunto un ejemplo para que veas como funciona en el script.
Hola,
el procedimiento sería el siguiente:
1 - carga primero el QVD
2 - localiza el valor que te va a servir de referencia para filtrar los datos de la base de datos, por ejemplo, la fecha máxima del qvd, y lo almacenas como variable.
3 - concatenas la consulta a la base de datos a la tabla del paso 1, filtrando los datos en función de la variable
Una vez lo tienes cargado todo, guardas la tabla en qvd para poder utilizarlo al día siguiente.
Espero que te ayude.
Un saludo
Hola:
MaxFecha:
LOAD Max(Fecha) as Fecha
From TuQVD.qvd;
vMaxFecha = Peek('Fecha', 0, 'MaxFecha');
Datos
LOAD * ;
SELECT * FROM TuTabla
Where TuTabla.Fecha > $(vMaxFecha);
Comprueba que el formato es YYYYMMDD, sino lo es tienes hay más tarea
Espero que te ayude.
Joaquín
Te adjunto un ejemplo para que veas como funciona en el script.
Hola,
gracias por las respuestas.
Alex, en base a lo que propones en tu ejemplo, guardaría todos los días el QVD con todo lo nuevo y al día siguiente recogería toda la información del QVD y solo añadiría lo nuevo.
Esta forma parece muy optimizada para las recargas, es el modelo ideal? porque puede pasar que en ocasiones la información de días anteriores se modifique. En este caso que haríamos?
Hay para casos puntuales que esa propuesta es magnífica sin duda.
El formato es dd-mm-yyyy , en qué cambiaría?
Gracias
Sí, efectivamente es la manera más óptima siempre que los datos históricos sean "cerrados", no haya modificaciones.
Se trata de que cada día incrementas el QVD con lo nuevo que vas cargando, así la mayor parte de la carga está optimizada y el tiempo de carga se reduce sensiblemente.
Si no es tu caso y es posible que los datos históricos se modifiquen, quizás puedas optar por otra aproximación:
Cargar de tu base de datos la información nueva o la modificada (controlando esto último mediante algún flag que te permita identificarlo) y luego cargas la información del QVD filtrando los datos con una cláusula "where not exists" para evitar que duplique los registros modificados.
Te recomiendo que hagas una búsqueda en el foro sobre Incremental Load, haya descubrirás muchos ejemplos sobre este tema y seguro que te sirven de ayuda.
Un saludo
Básicamente en que no funciona el where porque 31012015 es mayor que 01082015, sin embargo 20150131 no es mayor que 20150801 ... para poder filtrar fechas tienen que estar en YYYYMMDD o en formato ordinal como el interno de QV o de Excel.
Cierto Joaquín, a veces te juega malas pasadas.
En mi caso, al cargar los datos con formato de fecha, cuando la variable coge el valor, toma el valor numérico de la fecha y la cláusula 'where' funciona bien. Sin embargo, es cierto que algunas veces, según la fuente y los datos que contenía, hemos tenido que andar jugando con los formatos para que funcionara correctamente.
Un saludo
Gracias Alex. Si tiene que buscar por toda la base con esa claúsula me imagino que la optimización será mucho más baja.
Tengo que ponerme al día con esto de los QVD que me parece uno de los pilares de Qlikview.
Saludos.