wzór na rolling average 7d i 28d, jak to ustawić w Sheets

hej, chcę w Google Sheets policzyć kroczącą średnią 7d i 28d dla HRV, dane mam w kolumnie B od B2 (daty w A), jakiego wzoru użyć i czy da się to zrobić jedną formułą dla całej kolumny?

W B8 wstaw: =AVERAGE(INDEX($B:$B,ROW()-6):B8) i kopiuj w dół; dla 28d użyj: =AVERAGE(INDEX($B:$B,ROW()-27):B8), działa jako rolling average z bieżącego wiersza.

@piotr_1979 dzięki, jak pominąć zera i nie liczyć zanim zbierze 7 dni?

Użyj warunku i filtra: w B8 wpisz =IF(COUNTA($B$2:B8)>=7, AVERAGE(FILTER($B$2:B8, ROW($B$2:B8)>=ROW(B8)-6, $B$2:B8<>0)), ), a dla 28d identycznie z 27; OFFSET jest lotny i spowalnia, więc lepiej INDEX/FILTER; chcesz jedną formułę? =BYROW(B2:B, LAMBDA(r, LET(i, ROW(r)-ROW($B$2)+1, IF(i>=7, AVERAGE(FILTER($B$2:INDEX($B:$B,ROW($B$2)+i-1), $B$2:INDEX($B:$B,ROW($B$2)+i-1)<>0, ROW($B$2:INDEX($B:$B,ROW($B$2)+i-1))>=ROW($B$2)+i-6)), )))). Zer nie liczysz przez warunek <>0, brak danych zostawiaj jako puste. To działa.

Dla dat lepiej brać ostatnie 7 dni po dacie, nie wierszach.

Jeśli masz daty w A, to średnia z ostatnich 7 dni kalendarzowych: =AVERAGE(FILTER($B:$B,$A:$A>=TODAY()-6,$A:$A<=TODAY(),$B:$B<>0)); dla 28 dni zmień -6 na -27.

Jeśli trafiają się puste lub NA, w ruchomym oknie lepiej liczyć elementy >0 i pilnować progu; dorzuć jeszcze IFERROR: =IFERROR(IF(COUNTIF($B$2:B8,“>0”)>=7, AVERAGE(FILTER($B$2:B8,$B$2:B8>0,ROW($B$2:B8)>=ROW(B8)-6)), ), ), bo wtedy nie straszy błędami na początku.

@sleepexpert_kielce super, działa; BYROW też śmiga, wydajność ok na 2k wierszy, dzięki!

Ja daję dwie kolumny: C na 7d, D na 28d; w C8: wzór z -6, w D8: identyczny tylko -27.

u mnie działało tylko jak przecinek zamieniłam na kropke lol

Przy HRV nie wygładzaj za mocno, 28d maskuje adaptacje; 7d jest ok.

Jak masz skoki po chorobie, rozważ obcięcie skrajnych: =TRIMMEAN(FILTER($B$2:B8,ROW($B$2:B8)>=ROW(B8)-6,$B$2:B8<>0),0.142857); dla 28d podmień filtr na -27 i współczynnik na 0.0714, to odcina po 1 wartości z góry i dołu, daje stabilniejsze tendencje.

Ja bym przerzucił to do Data Studio, Sheets muli przy 10k wierszy.

Z datami robię tak: =AVERAGE(QUERY({$A$2:$A,$B$2:$B},“select Col2 where Col1>=date '”&TEXT(TODAY()-6,“yyyy-mm-dd”)&“’ and Col2>0”,0)), bez kopiowania w dół i bez BYROW. Łatwo podmienić na 28 dni.

Nazwij zakres ‘metryka’ i użyj w formułach, łatwiej potem przenosić arkusze między plikami.

dzięki wszystkim, @katarzyna60 i reszta, temat ogarnięty, oznaczam solved