Skip to main content
Announcements
Introducing a new Enhanced File Management feature in Qlik Cloud! GET THE DETAILS!
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Calcular número de días en base a seleccion de dia, mes, año

Hola, tengo la siguiente duda: yo tengo 3 campos dia, mes y año. Lo que yo necesito es saber el número de dias que hay en esa selección.

Por ejemplo si selecciona los 3 campos, seria:

     (GetSelectedCount(dia) * GetSelectedCount(año)* GetSelectedCount(mes)

Ahi si tendría el número de días. Si la selección solo fuera años, seria tambien fácil, porque solo habría que multiplicar el número de años por 365 si son años completos y el actual por el número de dias que se lleven hasta el dia de hoy. El dia de hoy sería con Today(), pero el número de dias hasta ese día no se con que función seria.

Pero el cálculo que me resulta realmente complicado es en el que el usuario me haga solo una selección de meses y años. Porque no todos los meses tienen el mismo número de dias, no sirve hacer

31 * getselectedcount(año)*getselectedcount(mes)

Si alguien se le ocurre alguna sugerencia.....

Un saludo

30 Replies
Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

Hola Jonay:

Acabo de responderte, pero la respuesta esta 'bajo moderación' ... a veces pasa. Tardará un buen rato en estar disponible en la comunidad.

Saludos,

Joaquín

Anonymous
Not applicable
Author

A ver, un calendario maestro es lo que estoy creando, lo que llamo yo calendario que añado los campos año, día y mes. Y el campo que pongo a 1, que luego utilizo para saber cuantos días son. Y eso me genera todos los dias posibles entre la fecha minima que le ponga y la fecha actual. Mi problema es que en la tabla "ventas" habrá registros que no dispongan de todas las fechas posibles y el problema es que como no hay coincidencia con esa fecha pues ese dia no se tiene en cuenta, y por ejemplo si el mes tiene 30, pero hay 4 dias que no han habido ventas para ese registro solo me lo contempla como 26. Entonces los calculos salen desvirtuados y no calculan lo que yo quiero

Un saludo

Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

Por favor, copia las sentencias load del calendario y de la tabla de ventas (o de lo que sea) para que pueda mirarlo.

También pon la fórmula de la expresión que quieres calcular

Anonymous
Not applicable
Author

  Así genero el calendario:

       let vMin = num('09/09/2014');  //mm/dd/YYYY

       let vMax = num(today());

      

       /* Genero todos los días que existen entre la fecha primera que tengo peticiones, y la fecha actual*/

      

       Calendario:

       load

       date(IterNo() + $(vMin)-1) as fecha

       AutoGenerate 1 while IterNo() + $(vMin) -1 <= $(vMax);

      

      

       load distinct(fecha), year(fecha) as año, Num(Month(fecha)) as mes, Day(fecha) as dia,

       1 as contadorDias

       resident Calendario;

En mi tabla ventas, tengo muchos campos, pero que afecten a la fecha tengo el campo "fecha"

  

   Ventas:

   SELECT ID, ....,date_format(pe.fecha,'%Y-%m-%d') as fecha

   from tabla

   where date_format(pe.fecha,'%Y-%m-%d') >= '2014-09-09';

Como ves en ambas tablas el campo fecha se llama exactamente igual

Posteriormente tengo que hacer varios calculos, pero si sale con uno el resto es similar, por ejemplo:

(count({<año = $::año, mes = $::mes , dia = $::dia>}ID))/sum(contadorDias)

Contar los id, de los datos seleccionados y dividirlo entre el sum o el count (en este caso es igual) de los días que transcurran

Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

Prueba esto:

(count({<año = $::año, mes = $::mes , dia = $::dia>}ID)) / GetPossibleCount(fecha)

Anonymous
Not applicable
Author

De esta manera que dices, me da correcto el número de días siempre que no seleccione un id. Si yo selecciono un id ya se me relaciono con los datos que hay para ese id, y ya no tiene en cuenta todas las fechas, sino las que afecte a ese id concreto

No hay forma de calcular el número de días de manera correcta

Anonymous
Not applicable
Author

Una duda a raiz de esto que me acaba de surgir, yo creo primeramente la tabla ventas y luego creo el calendario maestro. No se si eso puedo influir a la hora de la forma que se relaciona.

Hacerlo en orden inverso no se, porque como la tabla ventas se crea a partir de un select, no sabría como poner resident en la tabla calendario, para que sepa que ese campo fecha ya existe y lo tiene que relacionar

Lo digo por si esto puede influir tambien en que no me este dando el resultado correcto

Un saludo

Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

(count({<año = $::año, mes = $::mes , dia = $::dia>}ID)) / ( GetPossibleCount(fecha) + GetPossibleCount(fecha) )

Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

La relación es la misma independientemente del orden de su creación, dicha relación se establece por nombre de campo

Pero inevitablemente cuando haces un LOAD ... Resident esa tabla tiene que existir.

Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

Lo siento, se me ha ido la mano


(count({<año = $::año, mes = $::mes , dia = $::dia>}ID)) / ( GetPossibleCount(fecha) +GetExcludedCount(fecha) )