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: 
alexis_garcia
Creator II
Creator II

Crear calendario para que no falten valores

Hola a todos,

tengo una tabla con un campo FechaHora cada 15 minutos y un Valor asociado a cada uno de los 15 minutos.

El problema es que hay veces que ciertas fechas no aparecen porque no tienen valor asociado.

Se puede ver en la gráfica que del día 15 al 23 no aparecen datos porque no hay fechas.

Yo querría que representara 0 en ese tiempo, con lo que se representaría como una línea en 0.

FechasCurva.PNG

Podría asociar un calendario maestro de cada 15 minutos y que represento un 0 cuando no haya fecha ni dato?

O existe otra forma de poder hacerlo?

Adjunto un excel como ejemplo.

Gracias.

Un saludo.

1 Solution

Accepted Solutions
alexis_garcia
Creator II
Creator II
Author

Lo acabo de solucionar!

No me creo que fuera tan sencillo.

He puesto en la expresión:

If(IsNull(FechaHora),0,Sum(Valor))

No creo que sea muy eficiente la solución, pero me soluciona el problema.

Si a alguien se le ocurriera alguna otra solución que la comente.

Muchas gracias a todos por vuestra gran ayuda.

Un saludo.

View solution in original post

7 Replies
Not applicable

Yo este tipo de situaciones las resuelvo como indicas. a través de un cartesiano entre los valores y el total de fechas, asignando valor 0 a aquellas fechas sin valor. De esta manera nunca habrá falta de dato.  

alexis_garcia
Creator II
Creator II
Author

Hola Juan,

pero cómo lo haces?

Gracias.

Un saludo

Not applicable

Genera un calendario maestro, con fecha inicio la mínima fecha de tu set de datos y como fecha fin la máxima fecha de tu set de datos, con el que ya obtendrás la totalidad de fechas posibles.

Para generar el calendario puedes usar

Creating A Master Calendar

  1. QuartersMap: 
  2. MAPPING LOAD  
  3. rowno() as Month, 
  4. 'Q' & Ceil (rowno()/3) as Quarter 
  5. AUTOGENERATE (12); 
  6.  
  7. Temp: 
  8. Load 
  9.                min(OrderDate) as minDate, 
  10.                max(OrderDate) as maxDate 
  11. Resident Orders; 
  12.  
  13. Let varMinDate = Num(Peek('minDate', 0, 'Temp')); 
  14. Let varMaxDate = Num(Peek('maxDate', 0, 'Temp')); 
  15. DROP Table Temp; 
  16.  
  17. TempCalendar: 
  18. LOAD 
  19.                $(varMinDate) + Iterno()-1 As Num, 
  20.                Date($(varMinDate) + IterNo() - 1) as TempDate 
  21.                AutoGenerate 1 While $(varMinDate) + IterNo() -1 <= $(varMaxDate); 
  22.  
  23. MasterCalendar: 
  24. Load 
  25.                TempDate AS OrderDate, 
  26.                week(TempDate) As Week, 
  27.                Year(TempDate) As Year, 
  28.                Month(TempDate) As Month, 
  29.                Day(TempDate) As Day, 
  30.                YeartoDate(TempDate)*-1 as CurYTDFlag, 
  31.                YeartoDate(TempDate,-1)*-1 as LastYTDFlag, 
  32.                inyear(TempDate, Monthstart($(varMaxDate)),-1) as RC12, 
  33.                date(monthstart(TempDate), 'MMM-YYYY') as MonthYear, 
  34.                ApplyMap('QuartersMap', month(TempDate), Null()) as Quarter, 
  35.                Week(weekstart(TempDate)) & '-' & WeekYear(TempDate) as WeekYear, 
  36.                WeekDay(TempDate) as WeekDay 
  37. Resident TempCalendar 
  38. Order By TempDate ASC; 
  39. Drop Table TempCalendar; 

Un saludo

alexis_garcia
Creator II
Creator II
Author

Hola Juan Antonio,

estoy probando el calendario que me comentas pero me da error:

Palabras no reconocidas después de la sentencia

TempCalendar:

LOAD

               42155 + Iterno()-1 As Num,

               Date(42155 + IterNo() - 1) as TempDate

               AutoGenerate 1 While 42155 + IterNo() -1 <= 42193,989583333

A qué puede ser debido?

Gracias.

Un saludo.

chematos
Specialist II
Specialist II

El MinDate y MaxDate deberías redondearlos, puedes usar un floor o ceil según te convega:

  1. Let varMinDate = floor(Num(Peek('minDate', 0, 'Temp')));
  2. Let varMaxDate = ceil(Num(Peek('maxDate', 0, 'Temp')));

Saludos,

Chema

alexis_garcia
Creator II
Creator II
Author

Gracias por vuestra ayuda, pero sigo sin conseguir que cuando no existe fecha salga un 0.


He probado lo que me comentas Chema y se enlaza bien pero no muestra las fechas cuando no hay.


Ese calendario no es cada 15 minutos,no?


Cómo podría solucionarlo?


Gracias.


Un saludo y un abrazo Chema

alexis_garcia
Creator II
Creator II
Author

Lo acabo de solucionar!

No me creo que fuera tan sencillo.

He puesto en la expresión:

If(IsNull(FechaHora),0,Sum(Valor))

No creo que sea muy eficiente la solución, pero me soluciona el problema.

Si a alguien se le ocurriera alguna otra solución que la comente.

Muchas gracias a todos por vuestra gran ayuda.

Un saludo.