Calcular la media móvil utilizando los últimos 3 períodos de tiempoTengo un conjunto de datos con tres columnas; Cliente, Periodo de Tiempo y Cantidad. TimePeriod está en el formato de aaaam. Estoy tratando de determinar una fórmula para calcular un "promedio móvil" en los últimos 3 períodos de tiempo, para todos los clientes.
Por ejemplo, en mi fila etiquetada 201704, quiero que una fórmula devuelva la Cantidad promedio para todos los registros de 201703, 201702 y 201701. El TimePeriod puede ocurrir varias veces en los datos (por Cliente), lo que lo hace un poco más complicado.
¿Alguna sugerencia?
Re: Calcular promedio móvil usando los últimos 3 períodos de tiempo¡Gracias otra vez por toda tu ayuda!
Eso es exactamente lo que estaba buscando.
-Mate
Re: Calcular promedio móvil usando los últimos 3 períodos de tiempoAquí está la extensión de la fórmula con el Cliente agregado en
dt = Current Data Table();
tp = :timeperiod;
cus = :Customer;
tmp = Date Increment(
Date MDY( Num( Substr( :timeperiod, 5, 2 ) ), 1, Num( Substr( :timeperiod, 1, 4 ) ) ),
"Month",
-1
);
lagtp1 = Char( Year( tmp ) ) || Try( Substr( "0", Length( Char( Month( tmp ) ) ), 1 ), "" ) ||
Char( Month( tmp ) );
tmp = Date Increment(
Date MDY( Num( Substr( :timeperiod, 5, 2 ) ), 1, Num( Substr( :timeperiod, 1, 4 ) ) ),
"Month",
-2
);
lagtp2 = Char( Year( tmp ) ) || Try( Substr( "0", Length( Char( Month( tmp ) ) ), 1 ), "" ) ||
Char( Month( tmp ) );
Mean(
:Quantity[dt << get rows where( ( :timeperiod == tp | :timeperiod == lagtp1 | :timeperiod == lagtp2 ) &
:Customer == cus)
]
);
Re: Calcular promedio móvil usando los últimos 3 períodos de tiempo¡Estabas en lo correcto! Debe haber sido un error de usuario en mi final 
Si quiero que los medios estén separados por el cliente, digamos que 'Cliente' está en su propia columna de referencia, ¿es posible?
Entonces, la columna de salida solo calculará la media de los últimos 3 períodos de tiempo para el cliente en esa fila.
Re: Calcular promedio móvil usando los últimos 3 períodos de tiempoLa fórmula que te di analiza el valor del año / mes para una fila dada. Luego encuentra cuál es el valor de 1 mes anterior y el valor de 2 meses anterior. Luego encuentra la media de todas las filas en la tabla de datos que tienen el valor de año / mes para cualquiera de los 3 valores de año / mes calculados.
Por lo tanto, cualquier fila que tenga un valor de año / mes de, digamos, 201705, encontraría la cantidad promedio de todas las filas en la tabla de datos que tienen el valor de 201705, 201704 o 201703. Mi caso de prueba limitado funcionó para esto. Tenga en cuenta que el orden físico de las filas en la tabla de datos no es importante. La fórmula encuentra todas las filas en la tabla de datos completa que coinciden con los 3 períodos de tiempo para una fila dada.
Si pudiera proporcionarme una tabla de datos de muestra, puedo ver más a fondo esto. O, tal vez mi interpretación de lo que pides no es correcta.
Re: Calcular promedio móvil usando los últimos 3 períodos de tiempoJim - Gracias por tu paciencia.
Agregué esa fórmula en una nueva columna, según lo guiaste, pero obtengo el mismo valor de repetición en toda la columna.
Me gustaría que la fórmula solo me diera la media de los últimos 3 períodos de esa fila .
Por ejemplo, el registro medio de 201704 solo debería promediar los últimos 3 períodos de tiempo desde abril de 2017 (201704, 201703, 201702). La siguiente fila de 201705 debe tener un promedio diferente que consiste en los últimos 3 períodos de tiempo desde mayo de 2017 (201705, 201704, 201703).
¿Pensamientos?
Re: Calcular promedio móvil usando los últimos 3 períodos de tiempoLo que le di es una nueva fórmula que se pretende utilizar en una nueva columna, que creará un nuevo valor para cada fila.
En la tabla de datos, vaya al menú desplegable.
Cols ==> Nueva Columna
Nombra la columna como quieras
En la esquina inferior izquierda, haga clic en
Propiedades de la columna
Seleccione formula
Haga doble clic en el cuadro azul que dice "Sin fórmula".
En la ventana que se abre, pega la fórmula.
Re: Calcular promedio móvil usando los últimos 3 períodos de tiempoMuchas gracias por su respuesta.
Soy muy nuevo en scripting. ¿Hay alguna forma de que la media se imprima en una nueva columna, por fila? Entonces, a medida que la secuencia de comandos determina la media en los últimos 3 períodos de tiempo, ¿se mostrará para cada fila en una nueva columna?
Además, ¿hay algún problema con ese script al comienzo del conjunto de datos? ¿Cuándo no hay lagtp1 o lagtp2 para la primera cita?
Re: Calcular promedio móvil usando los últimos 3 períodos de tiempoAquí está tu fórmula
dt = Current Data Table();
tp = :timeperiod;
tmp = Date Increment(
Date MDY( Num( Substr( :timeperiod, 5, 2 ) ), 1, Num( Substr( :timeperiod, 1, 4 ) ) ),
"Month",
-1
);
lagtp1 = Char( Year( tmp ) ) || Try( Substr( "0", Length( Char( Month( tmp ) ) ), 1 ), "" ) ||
Char( Month( tmp ) );
tmp = Date Increment(
Date MDY( Num( Substr( :timeperiod, 5, 2 ) ), 1, Num( Substr( :timeperiod, 1, 4 ) ) ),
"Month",
-2
);
lagtp2 = Char( Year( tmp ) ) || Try( Substr( "0", Length( Char( Month( tmp ) ) ), 1 ), "" ) ||
Char( Month( tmp ) );
Mean(
:Quantity[dt << get rows where( :timeperiod == tp | :timeperiod == lagtp1 | :timeperiod == lagtp2 )
]
);