Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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:
HOTEL | M | MCDO | TO | TTOO | ID | CTO | FIPE | FFPE | THA | BASE |
1 | ALE | ALEMANIA | AIM | THOMAS COOK AG (AIM) | 8213 | AIMTULS12 | 01/05/2012 | 08/05/2012 | HA | 75 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 |
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:
HOTEL | M | MCDO | TO | TTOO | ID | CTO | FIPE | FFPE | THA | BASE | FECHA |
1 | ALE | ALEMANIA | AIM | THOMAS COOK AG (AIM) | 8213 | AIMTULS12 | 01/05/2012 | 08/05/2012 | HA | 75 | 01/01/2012 |
1 | ALE | ALEMANIA | AIM | THOMAS COOK AG (AIM) | 8213 | AIMTULS12 | 01/05/2012 | 08/05/2012 | HA | 75 | 02/01/2012 |
1 | ALE | ALEMANIA | AIM | THOMAS COOK AG (AIM) | 8213 | AIMTULS12 | 01/05/2012 | 08/05/2012 | HA | 75 | 03/01/2012 |
1 | ALE | ALEMANIA | AIM | THOMAS COOK AG (AIM) | 8213 | AIMTULS12 | 01/05/2012 | 08/05/2012 | HA | 75 | 04/01/2012 |
1 | ALE | ALEMANIA | AIM | THOMAS COOK AG (AIM) | 8213 | AIMTULS12 | 01/05/2012 | 08/05/2012 | HA | 75 | 05/01/2012 |
1 | ALE | ALEMANIA | AIM | THOMAS COOK AG (AIM) | 8213 | AIMTULS12 | 01/05/2012 | 08/05/2012 | HA | 75 | 06/01/2012 |
1 | ALE | ALEMANIA | AIM | THOMAS COOK AG (AIM) | 8213 | AIMTULS12 | 01/05/2012 | 08/05/2012 | HA | 75 | 07/01/2012 |
1 | ALE | ALEMANIA | AIM | THOMAS COOK AG (AIM) | 8213 | AIMTULS12 | 01/05/2012 | 08/05/2012 | HA | 75 | 08/01/2012 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 01/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 02/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 03/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 04/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 05/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 06/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 07/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 08/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 09/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 10/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 11/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 12/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 13/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 14/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 15/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 16/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 17/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 18/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 19/11/2011 |
1 | ALE | ALEMANIA | BUCHER | THOMAS COOK AG (BUC) | 3614 | BUCHERTULW11 | 01/11/2011 | 20/11/2011 | HA | 77 | 20/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
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
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.
Gracias y saludos.
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!
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
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