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: 
Not applicable

Qlikview y las fechas

Hola a todos.

Tengo un problemilla con un tema de fechas. La cuestión es la siguiente:

Tengo un QVD, donde almaceno el histórico de datos de venta, y la fecha de cada pedido. La idea es cargar en el documento todo el QVD, a excepción de los datos del mes en curso, que se cargaran directamente de la BBDD.

Para ello hago lo siguiente:

// Busco la máxima fecha del QVD  y la minima a cargar

AÑO_ACTUAL_MENOS_2=Year(ReloadTime())-2;
LET Fecha_Inicio = MakeDate($(AÑO_ACTUAL_MENOS_2)) ;

MAX_FECHA:

NoConcatenate
LOAD
max(DATE) as MAX_FECHA
FROM
venta.qvd (
qvd);

LET MAX_FECHAPEEK ('MAX_FECHA', 0 , 'MAX_FECHA');    //  meto la meto en una variable
DROP TABLE MAX_FECHA ;

LET Fecha_ref = monthstart(date($(MAX_FECHA))) ;  // calculo el primer dia del mes del máximo mes

ventas_TMP:

NoConcatenate
LOAD
cliente,
DATE,

..

FROM
venta.qvd (qvd)

where date(DATE,'DD/MM/YYYY') < $(Fecha_ref)
AND date(DATE) >= $(Fecha_Inicio) ;

Tras lanzar esto no me carga ningún dato. Cominenzo a mirar y veo que si en un objeto de texto pongo:

  = date($(Fecha_ref)) , me da como fecha 30/12/1899

  = date((Fecha_ref)) ,  me da como fecha 01/06/2014  (Que es la fecha correcta)

   = $(Fecha_ref) , me da como resultado 8,2754......

¿Alguna idea?

1 Solution

Accepted Solutions
alex_millan
Creator III
Creator III

Buenas Juan Antonio,

quizás sea un problema de diferencia de formatos de fecha entre el valor de las variables y el qvd.

Yo declaro las variable en formato numérico así:

LET Fecha_Inicio = num( Floor(MakeDate($(AÑO_ACTUAL_MENOS_2)))) ;

LET Fecha_ref = num( Floor(monthstart(date(PEEK ('MAX_FECHA', 0 , 'MAX_FECHA'))))) +1 ;

Y entonces la carga del qvd la haría así (en mi fichero he puesto el nombre de la columna 'Fecha' en lugar de 'Date' porque no me gusta nombrar columnas igual que funciones implementadas), también verás que hago un Precedent Load para ajustar el formato de la fecha:

Directory;

LOAD

date(Fecha,'DD/MM/YYYY') As Fecha,

Cliente;

LOAD

Fecha,

Cliente

FROM

Datos.qvd

(qvd)

where Fecha < $(Fecha_ref) AND Fecha >= $(Fecha_Inicio);

Espero que pueda servirte de ayuda.

Un saludo

View solution in original post

7 Replies
sorrakis01
Specialist
Specialist

Hola,


LET Fecha_ref = monthstart(date($(MAX_FECHA))) ;  // calculo el primer dia del mes del máximo mes

ponlo así:

LET Fecha_ref = monthstart(date(MAX_FECHA)) ;


y luego en:


venta.qvd (qvd)

where date(DATE,'DD/MM/YYYY') < date(Fecha_ref)
AND date(DATE) >= $(Fecha_Inicio) ;


Saludos,

Not applicable
Author

Pero al poner

LET Fecha_ref = monthstart(date($(MAX_FECHA))) ;  

como

LET Fecha_ref = monthstart(date(MAX_FECHA)) ;

No me lo reconoce MAX_FECHA como variable, sino como campo;

Y lo mismo me ocurre con :

venta.qvd (qvd)

where date(DATE,'DD/MM/YYYY') < date(Fecha_ref)

¿?

sorrakis01
Specialist
Specialist

Si disculpa,

Yo me lo he creado así:

AÑO_ACTUAL_MENOS_2=Year(ReloadTime())-2;

LET Fecha_Inicio = MakeDate($(AÑO_ACTUAL_MENOS_2));

LET vDATEMAX = today();

LET vMAX_FECHA =  PEEK ('vDATEMAX', 0 , 'vDATEMAX');

LET Fecha_ref = monthstart(date(vDATEMAX)) ;

Lo tendrías que acoplar a tu proyecto.


Espero que te sirva.

Not applicable
Author

Pero no veo cual seria la diferencia, ya que a fin de cuentas, tendría una fecha almacenada en una variable, que tendría que evaluar al cargar del QVD. ¿No?

alex_millan
Creator III
Creator III

Buenas Juan Antonio,

quizás sea un problema de diferencia de formatos de fecha entre el valor de las variables y el qvd.

Yo declaro las variable en formato numérico así:

LET Fecha_Inicio = num( Floor(MakeDate($(AÑO_ACTUAL_MENOS_2)))) ;

LET Fecha_ref = num( Floor(monthstart(date(PEEK ('MAX_FECHA', 0 , 'MAX_FECHA'))))) +1 ;

Y entonces la carga del qvd la haría así (en mi fichero he puesto el nombre de la columna 'Fecha' en lugar de 'Date' porque no me gusta nombrar columnas igual que funciones implementadas), también verás que hago un Precedent Load para ajustar el formato de la fecha:

Directory;

LOAD

date(Fecha,'DD/MM/YYYY') As Fecha,

Cliente;

LOAD

Fecha,

Cliente

FROM

Datos.qvd

(qvd)

where Fecha < $(Fecha_ref) AND Fecha >= $(Fecha_Inicio);

Espero que pueda servirte de ayuda.

Un saludo

sorrakis01
Specialist
Specialist

Hola,

Sorry, en principio creo que el problema lo tenías en la fecha_ref (ya que lo comparas con un campo de tabla con formato dd/mm/yyyy y daba por entendido que ese campo estaba bien) pero Alex tiene razon y a lo mejor el problema lo tienes en algun formato de fecha del QVD.

Si no lo solucionas, si quieres sube el QVD y esta tarde le doy una vuelta.

Saludos,

Not applicable
Author

Finalmente tuve que modificar todos los formatos para que fuesen numéricos y ponerles el Date() para que me los reconociese correctamente.