Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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.
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.
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..
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:
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.
Es decir, que a las 6 baje hasta cero, continúe hasta las 22 y suba hasta su valor.
Un saludo y gracias.
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.
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.
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.
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.
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.