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

Limitar numero de registros en la carga

Buenas,

Estoy definiendo una aplicacion con carga incremental y tengo una duda.

tengo una aplicación (  Extractor) que es la que me hace la extracción de la base de datos y la que me junta los datos anteriores con los de la carga. Lo que quiero es limitar los registros que almaceno en la base de datos a partir de una fecha.

Yo quiero almacenar 31 días, los últimos 31 días , pero no tengo cargas de todos los dias.

Se os ocurre como hacerlo?

Os cuento las tablas que tengo y en función de que hago la carga incremental:

  • Tabla Histórico: tiene un campo de Fecha Hora
  • Tabla casos: tiene una fecha de inicio y otra de fin, y tengo que cargar los datos que la fecha sea una de las anteriores
  • Reclasificados: Estos no tienen fecha, tienen un ID, lo que hago es el ver el máximo que tengo y cargar el resto.

En mi aplicación tengo una fecha que seleccionan para ver los resultados de ese día. Esta fecha siempre la igualo con el campo Fecha/Hora o el fecha de inicio. Por lo tanto, entiendo que son estos dos campos los que tendria que usar para limitar mi número de registros. La fecha de esos dos campos.

Ahora bien, no se como ni donde contar las fechas que tengo para decirle la mimima a cargar.

Alguien me echa una mano?

Gracias

18 Replies
ramoncova06
Specialist III
Specialist III

lo ideal es ver un ejemplo de los datos.

Te refieres a que los 31 días no necesariamente serán seguidos, correcto ?

Que es lo que quieres extraer? A partir del ultimo dia que habia datos nuevos?

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola María:

Creo que no he entendido muy bien tu requerimiento pero veo dos caminos:

La función RANK te devuelve la posición de una determinada expresión, y la función MAX(Expresion, 31) retornará la trigésimo primera fecha más grande utilizada ... con ambas podrás establecer una variable para utilizar en los set análisis.

Como todo depende de si te interesa hacerlo en tiempo de carga o en los gráficos la respuesta puede variar.

De momento, no veo como filtrar los registros que no tienen fecha

Saludos

Joaquín

Anonymous
Not applicable
Author

Gracias a los dos por vuestros comentarios.

Efectivamente lo que necesito es los ultimos 31 dias que no tienen xq ser correlativos.

Probaré con la función Rank. Mi idea es que a la hora de almacenar los datos en el QVD "decirle" que la fecha debe ser >= a la que he sacado como fecha limite con el Rank.

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola María,

Sin hacer ninguna prueba, creo que te será más útil el Max(Tu Fecha, 31)

Saludos

Joaquín

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Me surge una duda,

Quieres hacer un LOAD de las últimas 31 fechas disponibles o mostrar un gráfico con solo las 31 últimas fechas disponibles ?

En el primer caso, el tratamiento sería un poco diferente.

Saludos

Joaquín

ramoncova06
Specialist III
Specialist III

esto es lo que yo normalmente hago

primero un load Distinct del QVD, unicamente usando el campo de fecha.

TempFecha:

Load

Distinct

Fecha

from .... qvd

Despues de eso uso un max y genero una variable para pasarlo en el select

MaxFecha:

load

Max(Fecha) as MaxFecha

resident TempFecha

order by Fecha;


let vMaxFecha = fieldvalue('MaxFecha',1);



drop table MaxFecha;


Luego le paso mi variable a mi sintax de SQL


CargaSql:

Load

*;

sql select

*

from tabla

where Fecha > '$(vMaxFecha)';



Aqui es donde esto es algo diferente ya que normalmente se usa un llave para diferenciar

Para to caso en especifico yo uniría la fechas de la carga incremental y el archivo QVD

concatenate (TempFecha)

load distinct

Fecha

resident CargaSql;

luego sacaria el max 31

Max31Fecha:

load

Max(Fecha,31) as Max31Fecha

resident TempFecha

order by Fecha;


let vMax31Fecha = fieldvalue('Max31Fecha',1);


drop table Max31Fecha;

ya despues de eso solo tienes que hace un concatenate del archivo "qvd con la carga de SQL donde la fecha sean mayor o igual a tu max 31

Concatenate(CargaSql)

load

*

from .... qvd

where Fecha >= '$(vMax31Fecha)';



Store CargaSql into ..... .qvd(qvd);





Anonymous
Not applicable
Author

Hola!

si no entiendo mal tu propuesta es consultar directamente el max 31 en la BBDD y limitarlo también en la carga, no?

Es decir, contra la base de datos hago la consulta:

Fechas_Temp:

Load distinct Fecha

from BBDD;

Load Max(Fecha, 31) as Max31Fecha

Resident Fechas_Temp;

let vMax31Fecha = fieldvalue('Max31Fecha',1);


Load * from BBDD where Fecha>=Max31Fecha;



Es asi?


Anonymous
Not applicable
Author

Hola Joaquin,

Es para el Load.

Seria como el comentario de respuesta a Ramon?

sorrakis01
Specialist
Specialist

Hola Maria,

Has visto la opción buffer?

Quizas te pueda ayudar...

Saludos,