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

Calendario Maestro

Buenas tardes, busco un trozo de script de calendario maestro o solución similar para lo siguiente.

Mi fuente de datos genera registros como estos:

HOTELMMCDOTOTTOOIDCTOFIPEFFPETHABASE
1ALEALEMANIAAIMTHOMAS COOK AG (AIM)8213AIMTULS1201/05/201208/05/2012HA75
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA77

Donde el precio es 75 y 77 para los periodos FIPE (Fecha de Inicio de PEriodo) y (Fecha Fin de PEriodo) respectivamente, es decir para la fila primera el precio vigente es 75 durante 8 días y para la segunda el precio vigente es 77 durante 20 días.

Al final, como se pretende estudiar precios medios para diferentes periodos etc, la única manera de conseguirlo era añadir un campo llamado FECHA y transformar la tabla anterior en la siguiente:

HOTELMMCDOTOTTOOIDCTOFIPEFFPETHABASEFECHA
1ALEALEMANIAAIMTHOMAS COOK AG (AIM)8213AIMTULS1201/05/201208/05/2012HA7501/01/2012
1ALEALEMANIAAIMTHOMAS COOK AG (AIM)8213AIMTULS1201/05/201208/05/2012HA7502/01/2012
1ALEALEMANIAAIMTHOMAS COOK AG (AIM)8213AIMTULS1201/05/201208/05/2012HA7503/01/2012
1ALEALEMANIAAIMTHOMAS COOK AG (AIM)8213AIMTULS1201/05/201208/05/2012HA7504/01/2012
1ALEALEMANIAAIMTHOMAS COOK AG (AIM)8213AIMTULS1201/05/201208/05/2012HA7505/01/2012
1ALEALEMANIAAIMTHOMAS COOK AG (AIM)8213AIMTULS1201/05/201208/05/2012HA7506/01/2012
1ALEALEMANIAAIMTHOMAS COOK AG (AIM)8213AIMTULS1201/05/201208/05/2012HA7507/01/2012
1ALEALEMANIAAIMTHOMAS COOK AG (AIM)8213AIMTULS1201/05/201208/05/2012HA7508/01/2012
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7701/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7702/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7703/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7704/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7705/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7706/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7707/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7708/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7709/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7710/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7711/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7712/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7713/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7714/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7715/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7716/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7717/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7718/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7719/11/2011
1ALEALEMANIABUCHERTHOMAS COOK AG (BUC)3614BUCHERTULW1101/11/201120/11/2011HA7720/11/2011

De este modo el trabajo con fechas con el nuevo campo FECHA es totalmente flexible, pero sobra decir que para vairos miles de datos esta expanxión es inasumible por el sistema.

Alguien me puede decir una solución o idea para trabajar con fechas sin tener que expandir los datos de la tabla fuente??

Gracias y saludos

5 Replies
chematos
Specialist II
Specialist II

Por qué no añadir un campo con los días que dura el precio en lugar de multiplicar las filas?

Así solo te quedan las 2 filas del fuente, pero con 2 columnas nuevas, por ejemplo:

DíasPeríodo              PrecioTotalPeriodo

         8                              75*8

En el script sería algo así:

TablaX:

Load DiasPeriodo * BASE as PrecioTotalPerido

*;

Load *,

FFPE - FIPE as DiasPeriodo

from ejemplo.xls

(xls .....etc);

así tienes los precios agrupados por período y tienes los días de cada período

Not applicable
Author

Efectivamente de ese modo podría sacar el precio medio ponderado de los registros originales de la BBDD el problema es trabajar con las fechas porque están en formato "desde-hasta". Desgraciadamente parece inevitable expandir la BBDD 'n' veces (hasta el punto que podría afectar al rendimiento) para poder obtener el precio medio ponderado de un rango cualquiera de días que yo elija en el documento.

Esta expansión parece ser inevitable según las soluciones que me han planteado para este mismo hilo mantenido en inglés.

Avoid to expand data to work with dates

Gracias y saludos.

chematos
Specialist II
Specialist II

No consigo ver la necesidad, con set análisis he calculado muchos promedios ponderados, si necesitas ponderar sobre un período de tiempo puedes ir utilizando los días de diferencia ya calculados.

Supongo que se me estará escapando alguna regla de negocio, si es inevitable la duplicidad de los registros, entonces no hay nada más que pueda decir.

Buena suerte, saludos!

Not applicable
Author

Efectivamente no expandir sería lo ideal pero no entiendo como puedes conseguirlo.

Supongamos que un usuario quiere saber el precio medio existente entre el 15.11.2011 y el 02.05.2012, la primera cuestión es ¿en que campo selecciona el periodo para el que quiere hacer el precio medio ponderado si lo que tiene son fechas de inicio y de fin? Necesitarias un campo fecha único para su seleccion.

Luego vendría el calculo que tendría que ser con la ponderación para la seleccion de usuario:

6 días al precio de 77

162 dias sin precio

2 días al precio de 75

Precio medio para la seleccion del usuario = (6x77+75x2)/8 =  76,5

Estoy  muy interesado en saber como se puede calcular esto de forma dinámica (para cada eleccion del usuario) con set análisis como dices.

Gracias y saludos

chematos
Specialist II
Specialist II

Las sumas parciales ya las tendrías calculadas en PrecioTotalPeriodo como te dije anteriormente.

Sería el precio medio agrupado por producto?

Yo crearía 2 cuadros de entrada o 2 campos de fecha para elegir el principio y el fin del período, luego agrupando por producto evaluar los productos que caen dentro de esas fechas y sumar los precios totales que serían las sumas parciales (6x77+75x2) y dividirlo por la suma de los DíasPeriodo con las mismas reglas que antes que serían los 8 días. Los días sin precio se descartan porque no tienen precio.

aggr(sum({<FIPE={'>=$(=DiaInicio)'} * FFPE={'<=$(=DiaFin)'}>}PrecioTotalPeriodo),PRODUCTO)

/

aggr(sum({<FIPE={'>=$(=DiaInicio)'} * FFPE={'<=$(=DiaFin)'}>}DíasPeríodo),PRODUCTO)

A lo mejor estoy totalmente equivocado, pero es lo que probaría, creo que el símbolo * dentro de la expresión debería funcionar como un producto lógico, es decir, una intersección.

Si usas campos de entrada como variables para las fechas, sería esta sintaxis llamando vDiaInicio y vDiaFin a las variables:

aggr(sum({<FIPE={'>=$(=$(vDiaInicio))'} * FFPE={'<=$(=$(vDiaFin))'}>}PrecioTotalPeriodo),PRODUCTO)

/

aggr(sum({<FIPE={'>=$(=$(vDiaInicio))'} * FFPE={'<=$(=$(vDiaFin))'}>}DíasPeríodo),PRODUCTO)

Si pruebas me dices si resultó, si quieres añade esto al hilo en inglés a ver si se les ocurre alguna idea.

Saludos