Średnia krocząca lub średnia krocząca to przydatne dane, które pomagają śledzić średnią wartość w okresie ruchomym (np. średnią sprzedaż z ostatnich 7 dni). Obliczanie średniej ruchomej w czasie daje bardziej rozsądny trend w porównaniu do wykreślania liczb dziennych. Ponieważ nie ma wbudowanej funkcji do obliczania średniej ruchomej w Redshift, oto zapytanie SQL, które to zrobi.
Jak obliczyć średnią kroczącą w przesunięciu ku czerwieni
Oto kroki, aby obliczyć średnią ruchomą w przesunięciu ku czerwieni. Załóżmy, że masz poniższą tabelę zawierającą dzienne informacje o sprzedaży w Redshift.
# create table sales(order_date date,sale int); # insert into sales values('2020-01-01',20), ('2020-01-02',25),('2020-01-03',15),('2020-01-04',30), ('2020-01-05',20),('2020-01-10',20),('2020-01-06',25), ('2020-01-07',15),('2020-01-08',30),('2020-01-09',20); # select * from sales; +------------+------+ | order_date | sale | +------------+------+ | 2020-01-01 | 20 | | 2020-01-02 | 25 | | 2020-01-03 | 15 | | 2020-01-04 | 30 | | 2020-01-05 | 20 | | 2020-01-10 | 20 | | 2020-01-06 | 25 | | 2020-01-07 | 15 | | 2020-01-08 | 30 | | 2020-01-09 | 20 | +------------+------+
Załóżmy, że chcesz obliczyć średnią ruchomą w funkcji Redshift z ostatnich 5 dni. Redshift (który w zasadzie jest Postgresql) sprawia, że jest to naprawdę łatwe dzięki funkcji Redshift Window Functions. Oto zapytanie SQL do obliczenia średniej ruchomej z ostatnich 5 dni. Przyjrzymy się temu szczegółowo poniżej.
SELECT a.order_date,a.sale, AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) AS avg_sales FROM sales a ;
Jeśli chcesz zaokrąglić wyniki, możesz użyć funkcji ZAOKR, jak pokazano, aby obliczyć średnią ruchomą z przesunięciem ku czerwieni
SELECT a.order_date,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM sales a; order_date | sale | avg_sales ------------+------+--------------- 2020-01-01 | 20 | 20.00 2020-01-02 | 25 | 22.50 2020-01-03 | 15 | 20.00 2020-01-04 | 30 | 22.50 2020-01-05 | 20 | 22.00 2020-01-06 | 25 | 23.00 2020-01-07 | 15 | 21.00 2020-01-08 | 30 | 24.00 2020-01-09 | 20 | 22.00 2020-01-10 | 20 | 22.00
Przyjrzyjmy się szczegółowo powyższemu zapytaniu. Funkcja AVG oblicza średnią wartość sprzedaży kolumna. Jednak gdy używamy go razem z funkcją OKNO NAD, oblicza średnią wartość tylko dla okna, które definiujemy.
Najpierw używamy ORDER BY na naszych danych, aby upewnić się, że wiersze są posortowane chronologicznie. Następnie definiujemy nasze okno dla średniej za pomocą funkcji OVER i wspominamy ROWS BETWEING 4 PRECEDING A CURRENT ROW. Oznacza to, że dla każdego wiersza oblicz średnią dla poprzednich 4 wierszy i bieżącego wiersza. Ponieważ rama okna zmienia się dla każdego wiersza, zostaną użyte tylko poprzedzające 4 dni i bieżąca data.
Możesz także dodać filtry, dodając klauzulę WHERE w powyższym zapytaniu SQL.
SELECT a.order_date,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM sales a WHERE condition;
Jeśli chcesz obliczyć średnią ruchomą w funkcji Redshift z ostatnich 30 dni/1 miesiąc, zmodyfikuj powyższe zapytanie, używając PRECEDING 29 ROWS AND CURRENT ROW
SELECT a.order_date,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM sales a;
Przeczytaj bonus: Jak utworzyć tabelę przestawną w PostgreSQL
Jak obliczyć średnią kroczącą w przesunięciu ku czerwieni za ostatnie 3 miesiące
Załóżmy, że masz miesięczne dane o sprzedaży zamiast dziennych i chcesz obliczyć średnią kroczącą z ostatnich 3 miesięcy.
# create table monthly_sales(order_month date,sale int); postgres=# insert into monthly_sales values('2019-12-01',20), ('2020-01-30',25),('2020-02-28',15),('2020-03-31',30), ('2020-04-30',20),('2020-05-31',20),('2020-06-30',25), ('2020-07-31',15),('2020-08-31',30),('2020-09-30',20); postgres=# select * from monthly_sales; order_month | sale -------------+------ 2019-12-01 | 20 2020-01-30 | 25 2020-02-28 | 15 2020-03-31 | 30 2020-04-30 | 20 2020-05-31 | 20 2020-06-30 | 25 2020-07-31 | 15 2020-08-31 | 30 2020-09-30 | 20
W tym przypadku używamy tej samej logiki do obliczenia średniej ruchomej w przesunięciu ku czerwieni. Pierwsze ORDER BY order_month kolumna, aby upewnić się, że wiersze są posortowane chronologicznie. Następnie oblicz średnią dla POSTĘPUJĄCYCH 2 WIERSZY I BIEŻĄCEGO WIERSZTA
SELECT a.order_month,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM monthly_sales a ; order_month | sale | avg_sales -------------+------+----------- 2019-12-01 | 20 | 20.00 2020-01-30 | 25 | 22.50 2020-02-28 | 15 | 20.00 2020-03-31 | 30 | 23.33 2020-04-30 | 20 | 21.67 2020-05-31 | 20 | 23.33 2020-06-30 | 25 | 21.67 2020-07-31 | 15 | 20.00 2020-08-31 | 30 | 23.33 2020-09-30 | 20 | 21.67
Przeczytaj dodatkowe: Jak obliczyć sumę biegową w funkcji Redshift
Możesz także dodać filtry, umieszczając klauzulę WHERE w powyższym zapytaniu SQL.
SELECT a.order_month,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM monthly_sales a WHERE condition;
Możesz dostosować powyższe zapytanie, aby obliczyć średnią ruchomą w Redshift, zgodnie ze swoimi wymaganiami.
Po obliczeniu średniej ruchomej w Redshift możesz użyć narzędzia do tworzenia wykresów, aby wykreślić ją na wykresie liniowym i udostępnić ją swojemu zespołowi. Oto przykład wykresu liniowego, który wizualizuje średnią ruchomą, utworzonego za pomocą Ubiq.
Jeśli chcesz tworzyć wykresy, dashboardy i raporty z bazy danych Redshift, możesz wypróbować Ubiq. Oferujemy 14-dniowy bezpłatny okres próbny.