Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
AlejandroJuarez
Contributor III
Contributor III

rellenar datos faltantes con registro anterior

Hola , Grupo en español 

Tengo un problema , tengo 2 tablas una de facturación y otra ( adjunta ) con las cotizaciones del dólar , el problema surge con los feriados o fin de semana, ya que no hay registros en la tabla de cotizaciones (com3500) , como puedo rellenarlo con el dia anterior ?

ej el 12-10-20 tengo datos en la tabla facturación y no cotizaciones ( por ser feriado ) 

 

gracias por su ayuda , la tabla de cotizaciones tienen mas de 5000 registros 

1 Solution

Accepted Solutions
rubenmarin

Hola @AlejandroJuarez, Puedes usar Peek() durante la carga para acceder al campo del anterior registro, al leer los tipos de cambio faltaría añadir un paso intermedio que complete los huecos. Podría ser algo así:

 

 

// Leer tabla con tipos de cambio
tmpTiposCambio:
LOAD FechaTipoCambio, TipoCambio // Nombre de cambio de ejemplo, cambiar por los reales
From ...;

// Crear todas las fechas entre la primera y la última
tmpFechas:
Noconcatenate LOAD Date(MinFecha + IterNo()-1) as FechaTipoCambio
While MinFecha + IterNo()-1 <= MaxFecha;
LOAD Max(FechaTipoCambio) as MaxFecha,
  Min(FechaTipoCambio) as MinFecha
Resident tmpTiposCambio;

// Añadir las fechas que falten (Se añade la fecha y TipoCambio será nulo)
Outer Join (tmpTiposCambio) LOAD * Resident tmpFechas;
DROP table tmpFechas;

// Completar huecos
TiposCambio:
NoConcatenate LOAD FechaTipoCambio, 
  If(IsNull(TipoCambio), Peek(TipoCambio), TipoCambio) as TipoCambio
Resident tmpTiposCambio order By FechaTipoCambio;

DROP Table tmpTiposCambio ;

 

 

 

View solution in original post

5 Replies
rubenmarin

Hola @AlejandroJuarez, Puedes usar Peek() durante la carga para acceder al campo del anterior registro, al leer los tipos de cambio faltaría añadir un paso intermedio que complete los huecos. Podría ser algo así:

 

 

// Leer tabla con tipos de cambio
tmpTiposCambio:
LOAD FechaTipoCambio, TipoCambio // Nombre de cambio de ejemplo, cambiar por los reales
From ...;

// Crear todas las fechas entre la primera y la última
tmpFechas:
Noconcatenate LOAD Date(MinFecha + IterNo()-1) as FechaTipoCambio
While MinFecha + IterNo()-1 <= MaxFecha;
LOAD Max(FechaTipoCambio) as MaxFecha,
  Min(FechaTipoCambio) as MinFecha
Resident tmpTiposCambio;

// Añadir las fechas que falten (Se añade la fecha y TipoCambio será nulo)
Outer Join (tmpTiposCambio) LOAD * Resident tmpFechas;
DROP table tmpFechas;

// Completar huecos
TiposCambio:
NoConcatenate LOAD FechaTipoCambio, 
  If(IsNull(TipoCambio), Peek(TipoCambio), TipoCambio) as TipoCambio
Resident tmpTiposCambio order By FechaTipoCambio;

DROP Table tmpTiposCambio ;

 

 

 

AlejandroJuarez
Contributor III
Contributor III
Author

Gracias Ruben

PepeOssa
Contributor III
Contributor III

Hola,

Y si hay un tercer campo, por ejemplo, País (habría cotizaciones vacías en días laborables en otros países) como sería el script?.

Fecha             País        Cotización

01/01/2023 España      1.2

02/01/2023 Portugal    1.2

03/01/2023 España       1.3

04/01/2023 Portugal    1.3

05/01/2023 Portugal     1.4

 

Muchas gracias!!

 

Saludos

 

 

 

 

rubenmarin

Hola,

Faltaría un outer join para combinar las fechas con los países y llevar las distintas combinaciones a la tabla inical para rellenar los huecos de país-fecha.

Y cuando se hace el peek, en el 'order by' deberías incluir el país para no mezclar datos de distintos países.

Saludos.

PepeOssa
Contributor III
Contributor III

Hola Rubén, perdona por no haberte agradecido la respuesta, lo pruebo y te cuento. Muchas gracias!!