Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Fecha en tabla A entre dos fechas en tabla B

Hola a todos,

En un entorno funcional de Alquileres, tengo una primer tabla donde configuro las temporadas:

TEMPORADAS:

- FechaDesde

- FechaHasta

- Temporada

Otra con los alquileres:

ALQUILERES:

- NumAlquiler

- FechaInicialAlq

- FechaFinalAlq

Y otra que contiene, para cada NumAlquiler, tantos registros como días se obtienen de la diferencia entre FechaInicialAlq y FechaFinalAlq, es decir, un registro por cada día de alquiler.

FECHAS ALQUILER:

- NumAlquiler

- FechaAlq (dia de alquiler)

La pregunta es cómo relacionar u obtener la Temporada correspondiente a cada FechaAlq ó, en su defecto, obtener cuantos dias tiene cada NumAlquiler en cada Temporada. Tened en cuenta que un alquiler puede estar a caballo de dós ó más temporadas.

Saludos.

1 Solution

Accepted Solutions
cristina_delafu
Partner - Explorer II
Partner - Explorer II

Hola,

Una forma sencilla de hacerlo seria con un gráfico tabla con dos dimensiones:

   -NumAlquiler

   -Temporada

Y como expresion COUNT(if(FechaAlq >= FechaDesde and FechaAlq <= FechaHasta, Temporada))

Espero que te sirva.

View solution in original post

5 Replies
cristina_delafu
Partner - Explorer II
Partner - Explorer II

Hola,

Una forma sencilla de hacerlo seria con un gráfico tabla con dos dimensiones:

   -NumAlquiler

   -Temporada

Y como expresion COUNT(if(FechaAlq >= FechaDesde and FechaAlq <= FechaHasta, Temporada))

Espero que te sirva.

Not applicable
Author

Hola Cristina, gracias por tu contestación. He probado la expresión que me indicas y los resultados son correctos.

Por si a alguien le interesa, yo había montado otra estructura, mucho más compleja, pero también con resultado satisfactorio:

1º) FECHAS ALQUILER  LEFT JOIN  ALQUILERES

2º) Había creado la tabla MOV_TEMPORADAS de la siguiente forma:

  LOAD

    Temporada,

    DATE(FechaDesde + ITERNO() - 1) AS FechaAlq

  RESIDENT Temporadas

  WHILE (FechaDesde + ITERNO() - 1) <= FechaHasta;

De esta manera ya tenía la relación entre las tablas TEMPORADAS y FECHAS ALQUILER, a través del campo FechaAlq de MOV_TEMPORADAS.

Miguel_Angel_Baeyens

Hola,

Para lo que pueda servir, puede merecer la pena (dependiendo del modelo de datos) convertir el If() de la expresión en un análisis de conjuntos. Con pocos cientos de registros, el rendimiento ya mejora. Si el número de registros son decenas de miles o más, la velocidad de cálculo del gráfico es mucho más rápida:

Count({< FechaAlq = {">=$(=Date(FechaDesde))<=$(=Date(FechaHasta))"} >} Temporada)

En el caso de que FechaAlq y FechaDesde/FechaHasta tengan distintos formatos puede ser necesario añadir alguna función de formato de fecha adicional.

Espero que sirva.

Miguel

Not applicable
Author

Hola Miguel Angel,

He probado la expresión que me indicas pero no los valores que obtengo no son correctos, es más, muestra los mismos valores por temporada para cada alquiler. A qué crees que pueda deberse?

Gracias por tus comentarios.

Miguel_Angel_Baeyens

Hola,

Posiblemente porque el análisis de conjuntos devuelve un conjunto nulo o no válido, de forma que lo ignora y devuelve el Count() como si no tuviera análisis de conjuntos. Podrías ser por los formatos de fecha, podría ser también porque la comparación debe realizarse fila a fila, en cuyo caso el análisis de conjuntos no es válido y se neceista un If(), aunque sea más lento.

Un saludo.

Miguel