Skip to main content
Announcements
Global Transformation Awards! Applications are now open. Submit Entry
cancel
Showing results for 
Search instead for 
Did you mean: 
alexis_garcia
Creator II
Creator II

Error de cálculo

Hola, tengo una duda que no sé cómo solucionarla.

En el script hago lo siguiente: Divido las horas en 2 rangos P1 y P2.

If(((WeekDay(Date(UTCDateTime))='lun' or WeekDay(Date(UTCDateTime))='mar' or WeekDay(Date(UTCDateTime))='mié' or WeekDay(Date(UTCDateTime))='jue' or WeekDay(Date(UTCDateTime))='vie') and ((Hour( Time(UTCDateTime))>=0 and Hour( Time(UTCDateTime))<7) or (Hour(Time(UTCDateTime))=23)))

      or (WeekDay(Date(UTCDateTime))='sáb' and ((Hour( Time(UTCDateTime))>=0 and Hour( Time(UTCDateTime))<7) or (Hour( Time(UTCDateTime))>=15 and Hour( Time(UTCDateTime))<=23)))

      or (WeekDay(Date(UTCDateTime))='dom'), 'P1','P2' ) as HorarioP

Así pongo HorarioP como filtro que al seleccionar P1 o P2 las gráficas tendrán la energía acumulada en esos horarios.

Yo calculo energía y potencia, potencia es un dato que se representa cada 5 minutos y solo tengo que sumas los distintos datos para conseguir el valor diario, mensual, ... y me funciona correctamente el filtro HorarioP, pero la energía la calculo restando el dato actual menos el anterior ( máximo menos mínimo, ya que la energía se va acumulando ) y aquí es donde me da problemas el filtro de HorarioP.

Lo calculo así y no funciona:

(Max({<SMedida={"Energía"}>}Valor)-Min({<SMedida={"Energía"},ActualValue={">0"}>}Valor))

Intento hacerlo con Aggr(), pero tampoco funciona o con distintas formas con set analysis.

Solo funciona cuando selecciona un día exacto, pero si lo dejo sin seleccionar o selecciono varios, ya no es correcto.

Dónde puede estar el error?

Captura2.JPG

El total es correcto, pero P1 y P2 no.

Gracias.

Un saludo.

8 Replies
ramoncova06
Partner - Specialist III
Partner - Specialist III

el problema esta que cuando no tienes ninguna fecha seleccionada, Qlikview obtiene el maximo de los valores posibles sin importar la fecha y de igual manera el minimo

que resultado obtiene si agregar la fecha como dimension ?

alexis_garcia
Creator II
Creator II
Author

Hola Ramón, el máximo valor siempre es el de la última fecha, ya que la energía siempre va incrementando y el mínimo el primero.

Si represento la fechaYhora o mes o año sigue pasando lo mismo, sólo funciona si selecciono un solo día.

Sin embargo la Potencia la puedo representar de cualquier forma que sí que funciona correctamente.

El problema debe de estar que al hacer la resta para la energía no detecta bien el HorarioP si es P1 o P2.

Debe de haber alguna forma con Aggr(), pero no la encuentro.

Gracias.

Un saludo.

ramoncova06
Partner - Specialist III
Partner - Specialist III

creo que ya entendi el problema al parecer QV esta combinando el max y min de los dos groups dándote diferente resultados

haz intentado usando un if ?

if( HorarioP= P1,

(Max({<SMedida={"Energía"}, HorarioP= {'P1'}>}Valor)-Min({<SMedida={"Energía"},ActualValue={">0"}, HorarioP= {'P1'}>}Valor)),

(Max({<SMedida={"Energía"}, HorarioP= {'P2'}>}Valor)-Min({<SMedida={"Energía"},ActualValue={">0"}, HorarioP= {'P2'}>}Valor))

)

un aggr lo que hace es crear una tabla temporal en memoria, donde puedes meter agregaciones enlazadas



lo único que se me viene a la mente es algo como esto


aggr(Max({<SMedida={"Energía"}>}Valor)-Min({<SMedida={"Energía"},ActualValue={">0"}>}Valor), HorarioP)



alexis_garcia
Creator II
Creator II
Author

Ya había probado esas opciones y sigue pasando lo mismo.

No se me ocurre de dónde puede venir el problema.

Gracias Ramón.

Un saludo.

ramoncova06
Partner - Specialist III
Partner - Specialist III

tendria que ver el qvw

alexis_garcia
Creator II
Creator II
Author

Hola Ramón, no puedo subir el qvw porque es muy grande y recoge datos de 2 BD distintas.

Yo creo que el error puedes estar al calcular la diferencia de energía debido a que el horario coge parte de las horas, con lo que la resta estaría mal.

Hay alguna forma de calcular la resta en el script?

Gracias.

Un saludo.

davidrobles
Partner - Contributor III
Partner - Contributor III

Hola Alexis,

para calcular un acumulado en el script puedes usar la funcion peek. Tendrias que ordenar la tabla para que los registros esten seguidos.

Ej.

load

Mes,

Campo a Acumular,

if(previous(Mes)=Mes,numsum(peek(Campo Acumulado), Campo a Acumular),Campo a Acumular) as "Campo Acumulado"

from Tabla order by Mes;

Esto te iria acumulando el dato mes a mes y cuando cambia empezaria de nuevo.

ramoncova06
Partner - Specialist III
Partner - Specialist III

el unico problema que veo para hacerlo a nivel de script es que si seleccionas algo los valores van a cambiar y tu maximo y minimo van a variar, deja veo si si me ocurre algo mas