Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Rangos de fechas

Hola, a ver si alguien me puede ayudar con lo siguiente porque no se cómo  enfocarlo.

Tengo una tabla excel como la siguiente:

FECHA               |               HORA               |          ENERGIA

01/01/2014                         00:00                              150

01/01/2014                         00:15                              200

01/01/2014                         00:30                              264    

01/01/2014                         00:45                              187

01/01/2014                         01:00                              57

01/01/2014                         01:15                              345

........                              ..........                              .......

y así sucesivamente hasta hoy.

Con esos datos he hecho varias tablas y gráficas, pero lo que ahora necesito es que todas esas tablas y gráficas sólo se muestren para las siguientes horas:

Lunes: De 00:00 a 7:00 y de 22:00 a 00:00 del día siguiente

Martes:  De 00:00 a 7:00 y de 22:00 a 00:00 del día siguiente

Miércoles: De 00:00 a 7:00 y de 22:00 a 00:00 del día siguiente

Jueves: De 00:00 a 7:00 y de 22:00 a 00:00 del día siguiente

Viernes: De 00:00 a 7:00 y de 22:00 a 00:00 del día siguiente

Sábado: De 00:00 a 7:00 y de 15:00 a 00:00 del día siguiente

Domingo: De 00:00 a 00:00 del día siguiente.

¿Cómo puedo hacer eso? En el script? o con análisis de conjuntos? pero cómo?

Un saludo y gracias.

1 Solution

Accepted Solutions
etendero
Partner - Creator
Partner - Creator

Me imagino que hará lo mismo, pero yo probaría a utilizar mi solución a ver si funciona como quieres.

Con el tema del IF, creo que no nos entendemos. Para mi es correcto el ponerle un 0 en el ELSE, para que cuando no cumpla el horario, el campo “HorarioResidual” te baje a 0, que según entiendo es lo que buscas.

En la gráfica, me imagino que tendrás que utilizar como dimensión la hora, tal y como creo que lo estas haciendo, y como expresión un Sum(HorarioResidual), ¿verdad?.

¿Y esta configuración no te muestra la gráfica como vas buscando? Es decir, ¿no te baja a 0 cuando no cumple el horario?

¿Has comprobado que en las Propiedades de Presentación de tu gráfica, no tengas marcada la opción “Suprimir Valores Cero”?


Un saludo.

View solution in original post

13 Replies
Not applicable
Author

Hola, estoy intentando hacer en el script lo siguiente:

If((WeekDay(FECHA)='lun' or WeekDay(FECHA)='mar' or WeekDay(FECHA)='mié' or WeekDay(FECHA)='jue' or WeekDay(FECHA)='vie' or WeekDay(FECHA)='sáb') and (Hour(HORA)>=0 and Hour(HORA)<7)and (Hour(HORA)>=22 and Hour(HORA)<=23),'Fecha Residual' ) as FechaResidual

Y así al seleccionar ese campo que se filtre por esos rangos de fechas, pero no se muestran bien ya que son 2 rangos de horas en un mismo día y no lo hace bien.

Otra opción que he hecho es la siguiente:

If((WeekDay(FECHA)='lun' or WeekDay(FECHA)='mar' or WeekDay(FECHA)='mié' or WeekDay(FECHA)='jue' or WeekDay(FECHA)='vie' or WeekDay(FECHA)='sáb') and (Hour(HORA)>=0 and Hour(HORA)<7) ,'Fecha Residual Mañanas' ) as FechaResidualMañanas,

If((WeekDay(FECHA)='lun' or WeekDay(FECHA)='mar' or WeekDay(FECHA)='mié' or WeekDay(FECHA)='jue' or WeekDay(FECHA)='vie') and (Hour(HORA)>=22 and Hour(HORA)<=23),'Fecha Residual Tardes' ) as FechaResidualTardes,

De esta forma selecciono FechaResidualMañanas y sale bien, pero al seleccionar también el campo FechaResidualTardes se quita la selección de fechaResidualMañanas.

Cómo podría hacerlo?

Un saludo y gracias.

etendero
Partner - Creator
Partner - Creator

Hola Juan Vicente,

Pues se me ocurre que en el script montes una tabla inline de la siguiente forma:

FiltroDias:

LOAD * INLINE [

    Dia, HoraDesde, HoraHasta

  Lunes, 00:00, 7:00

  Lunes, 22:00, 24:00

  Martes, 00:00, 7:00

  Martes, 22:00, 24:00

  Miércoles, 00:00, 7:00

  Miércoles, 22:00, 24:00

  Jueves, 00:00, 7:00

  Jueves, 22:00, 24:00

  Viernes, 00:00, 7:00

  Viernes, 22:00, 24:00

  Sábado, 00:00, 7:00,

  Sábado, 15:00, 24:00

  Domingo, 00:00, 24:00

];

y con esto, hagas un Inner Join con la tabla de datos que quieres reducir. Puedes utilizar la función weekday para sacar el día de la semana de tu campo fecha y en la clausula Where, filtrar la hora para que caiga entre el rango FechaDesde y FechaHasta, Mírate en la ayuda la instrucción InDayToTime, que quizás también te pueda ayudar.

Un saludo y espero que te sirva de ayuda..

Not applicable
Author

Hola Emilio, gracias por tu ayuda.

Al final hice lo siguiente en el script:

     If(((WeekDay(FECHA)='lun' or WeekDay(FECHA)='mar' or WeekDay(FECHA)='mié' or WeekDay(FECHA)='jue' or WeekDay(FECHA)='vie') and ((Hour(HORA)>=0 and Hour(HORA)<7) or (Hour(HORA)>=22 and Hour(HORA)<=23)))

      or (WeekDay(FECHA)='sáb' and ((Hour(HORA)>=0 and Hour(HORA)<7) or (Hour(HORA)>=15 and Hour(HORA)<=23)))

      or (WeekDay(FECHA)='dom'),'Horario Residual' ) as HorarioResidual

Y al seleccionar ese campo se filtra por las horas que quiero como en la siguiente imagen:

semanales residual.PNG.png

Ahora lo que me gustaría es que esas horas que no se muestran que salgan como ceros.

Cómo lo podría hacer?

Un saludo y gracias.

Not applicable
Author

Es decir, que a las 6 baje hasta cero, continúe hasta las 22 y suba hasta su valor.

Un saludo y gracias.

etendero
Partner - Creator
Partner - Creator

Hola de nuevo,

Pues si utilizo utilizo el ejemplo que te puse, que me parece más claro y completo, quedaría de la siguiente forma:

Tabla_Aux:

LOAD *

  , WeekDay(FECHA) as Dia

Resident Tabla;


Left Join(Tabla_Aux)

LOAD * INLINE [

  Dia, HoraDesde, HoraHasta

  lun, 00:00, 7:00

  lun, 22:00, 24:00

  mar, 00:00, 7:00

  mar, 22:00, 24:00

  mié, 00:00, 7:00

  mié, 22:00, 24:00

  jue, 00:00, 7:00

  jue, 22:00, 24:00

  vie, 00:00, 7:00

  vie, 22:00, 24:00

  sáb, 00:00, 7:00,

  sáb, 15:00, 24:00

  dom, 00:00, 24:00

];


DROP Table Tabla;


Tabla:

LOAD *

  , if(Hour(HORA) >= HoraDesde and Hour(HORA) <= HoraHasta, 'Horario Residual', 0) as HorarioResidual

Resident FiltroDias;


DROP Fields HoraDesde, HoraHasta; //Estos campos los puedes borrar porque ya no te harían falta.

Donde llamo "Tabla", es el nombre de tu tabla donde tengas el campo "Horario Residual". Incluso, la tabla Inline que utilizo, lo puedes sacar a una excel, y tener un mantenimiento de los horarios más cómodo.

Si lo extrapolamos a tu ejemplo, quedaría:

If(((WeekDay(FECHA)='lun' or WeekDay(FECHA)='mar' or WeekDay(FECHA)='mié' or WeekDay(FECHA)='jue' or WeekDay(FECHA)='vie') and ((Hour(HORA)>=0 and Hour(HORA)<7) or (Hour(HORA)>=22 and Hour(HORA)<=23)))

      or (WeekDay(FECHA)='sáb' and ((Hour(HORA)>=0 and Hour(HORA)<7) or (Hour(HORA)>=15 and Hour(HORA)<=23)))

      or (WeekDay(FECHA)='dom'),'Horario Residual', 0 ) as HorarioResidual

Donde lo único que he hecho es ponerle un 0 en el ELSE de tu IF.

Un saludo y espero haberte sido de ayuda.

Not applicable
Author

Hola Emilio, gracias por la ayuda, pero el problema es que si selecciono el campo Horario Residual se seleccionan las horas que quiero, pero el resto de horas no se ponen a cero, ya que en un if() si se cumple una condición no se cumple la otra. Y seleccionando HorarioResidual = 0 solo se muestran las horas restantes pero no con cero.

No sé cómo hacerlo.

Un saludo y gracias.

etendero
Partner - Creator
Partner - Creator

Entonces, no entiendo lo que quieres hacer.

No conozco el proyecto ni tu estructura de datos, pero por lo que creía haberte entendido, pensaba que lo que querías era que cuando no cumpliera el horario, querías un 0 en vez de el valor que tenga en ese momento el campo “HorarioResidual”, que es precisamente lo que hace el IF, le pone un 0 a través del ELSE cuando no cumple las condiciones del horario.

¿Cual es el campo que quieres poner a 0 cuando no se cumpla el horario?

A parte del horario, ¿hay otra condición que tiene que cumplir para poner un 0 en vez del valor original?.

Evidentemente, si haces una selección en el campo “HorarioResidual”, te va a filtrar los valores que no estén en esa selección, ya sean ceros o no.

Intenta detallar un poco más, si acaso te había entendido mal.

Un saludo.

Not applicable
Author

Lo que intento hacer es que la gráfica represente todas las horas, pero en las horas que no pertenecen a los rangos que he puesto antes que tengan ceros en lugar de sus valores.

Y así la gráfica para un lunes por ejemplo, se representaría de 0 a 7 horas sus valores, de 7 a 22 horas ceros y de 22 a 0 horas sus valores.

Un saludo y gracias.

etendero
Partner - Creator
Partner - Creator

Entonces es lo que te he puesto en el ejemplo.

¿Qué solución estás utilizando, la tuya o la miá?

¿Cual es el problema por el que no te funciona mi solución?

¿Qué Dimensión y expresión has utilizado en la gráfica?

Un saludo.