Avalados por :

Guía completa para calcular el promedio móvil en series temporales con SAP HANA XS Advanced

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 36 Vistas
0
Cargando...
En esta publicación del blog, aprenderemos sobre el promedio móvil, también llamado promedio móvil, promedio en ejecución, media móvil o media móvil. Muy a menudo verás promedios móviles utilizados en datos de series temporales para analizar tendencias, se calculan como la media de los valores actuales y un número especificado de valores inmediatamente anteriores o siguientes para cada punto en el tiempo.

Esta publicación del blog está diseñada utilizando SAP HANA XS Advanced (SAP Web IDE). (SAP HANA en las instalaciones y SAP HANA, edición express).

Caso de uso: - Un promedio móvil nos ayuda a encontrar tendencias de una medida específica para una ventana de tiempo determinada.

En esta publicación del blog, discutiremos tres escenarios de Promedio Móvil.

  1. Promedio móvil para valores inmediatamente siguientes.

  2. Promedio móvil para valores inmediatamente anteriores.

  3. Promedio móvil para valores inmediatamente anteriores y siguientes.




DATOS y SOLUCIÓN

En nuestra tabla, tenemos tres columnas (AÑO_MES, MES y INGRESOS). Este es un conjunto de datos de series mensuales ya que cada ingreso está asociado con un mes específico.




Escenario 1: -

Promedio móvil para valores inmediatamente siguientes.

En este caso, calcularemos el promedio para una ventana de filas entre la FILA ACTUAL Y 3 FILAS SIGUIENTES y el promedio debe calcularse solo utilizando los valores de ingresos de la fila actual y las tres filas siguientes. Luego, para cada fila en el conjunto de resultados, se calculará el promedio móvil en función de un conjunto diferente de cuatro valores de ingresos. Podemos ver esto en la siguiente fórmula:

Promedio Móvil = ( Ingresos (Fila Actual) + Ingresos (Siguiente Fila) + Ingresos (Fila Actual+2) + Ingresos (Fila Actual+3) ) / 4

Para el mes de ENERO, el promedio móvil de tres meses se calcula como la media de los ingresos de ese mes (111) y los tres meses siguientes que son FEB (120), MAR (123) y ABR (100). Por lo tanto, el promedio móvil para ENERO es el promedio de estos cuatro valores, o 113.5 como se muestra en la imagen a continuación.


El promedio móvil se calcula de la misma manera para cada uno de los meses restantes.

Para lograr esto, he utilizado la Función de Tabla, que puede ser consumida adicionalmente en una Vista de Cálculo para obtener el resultado.

En la siguiente consulta, veremos cómo usar HANA SQL para calcular el promedio móvil para la columna "INGRESOS" basado en el valor de ingresos del mes actual y los 3 valores siguientes.



SELECT "AÑO_MES","MES","INGRESOS",
       AVG("INGRESOS") OVER (ORDER BY "AÑO_MES" ROWS BETWEEN CURRENT ROW AND 3 FOLLOWING) PromedioMovil
FROM "ESQUEMA"."TABLA" ;

RESULTADO: -


NOTA: -

Para el mes de OCT, cuando intentamos ver los tres meses siguientes, vemos que solo quedan dos meses. Por lo
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola Sourin,

Gracias por el comentario y por señalar esto.

Yo también no puedo hacerlo y obtengo el mismo error.


He editado la publicación del blog y eliminado la última sección.
Una vez más, gracias por las amables palabras.

Saludos cordiales,

Naim Khan

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...
Hi,



Creo que he planteado mal mi pregunta.

La pregunta es "¿Es posible usar variables (X e Y) como has mencionado en el blog?" No puedo hacerlo, ya que HANA espera un valor CONSTANTE en su lugar.

Creo que esto no es posible.



¿Puedes compartir un ejemplo funcional (Código SQL completo) de cómo usar una variable en lugar de constantes? También puedes usar una subconsulta.

Avísame.

Saludos,
Sourin
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hi Sourin,

Thanks for the kind words, I tried for multiple years and in that case we have to use PARTITION BY as shown below.

When you want the values of the same year to be considered then use PARTITION BY.

SELECT "YEAR_MONTH","YEAR","REVENUE",
            AVG("REVENUE") OVER (PARTITION BY "YEAR" ORDER BY "YEAR_MONTH" ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) RollingAverage
    FROM "SCHEMA"."TABLE";
    

When you want the values irrespective of the year then don't use PARTITION BY.

SELECT "YEAR_MONTH","YEAR","REVENUE",
            AVG("REVENUE") OVER (ORDER BY "YEAR_MONTH" ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) RollingAverage
    FROM "SCHEMA"."TABLE";
    

Hope I was able to clarify your doubts.
Once again thanks for the kind words.

Best Regards,
Naim Khan

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...
Hi,



Thanks for the detailed explanation.

What happens when we want to do a rolling average of "REVENUE" for multiple groups of (Year,Month) in a single query.

I tried to use a subquery; however, the AVG() function expects a "constant" before "PRECEDING" and "FOLLOWING". Is it possible to get the value from a subquery and use it in the place of "X" and "Y"?
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?