4.8. Średnie jeszcze raz.

W pierwszym przykładzie zamieściliśmy uwagę: we wszystkich przykładach, aż do punktu "Średnie jeszcze raz" Sekcja 4.8 zakładamy, że parametr ma opcje 'Średnie liczone jako' ustawiony na wartość 'wynik zastosowania formuły na średnich'.

Teraz czas wyjaśnić o co w tym chodzi.

Przypomnijmy jeszcze raz jak program przeglądający rysuje wykres parametru.

Na początek załóżmy, że jesteśmy na na ekranie rocznym. Program przeglądający musi narysować 12 punktów, średnich miesięcznych dla każdego miesiąca w roku. Wobec tego wywołuje formułę parametru 12 razy za każdy razem ustawiając następujące wartości zmiennych t i pt:

Gdy będziemy na ekranie miesięcznym, np. na marcu program przeglądający wywoła formułę 31 razy, z takimi parametrami:

Załóżmy teraz, że jesteśmy na okresie dzień, wtedy program zrobi tak:

Teraz zmieniamy opcje z 'Średnie liczone jako' na 'średnia z zastosowania formuły dla każdej próbki'. Co się zmieniło? Zmiana polega na tym, że program przeglądający zaczyna liczyć średnie "sam". Program przeglądający, niezależnie od tego jaką średnią będziemy rysował, zawsze wywoła formułę dla wartości 10-minutowych i z tak otrzymanych wyników obliczy wartość średnią. Wracając do analizowanego przykładu roku, nasza formuła zostanie wykonana z takimi parametrami:

Analogicznie będzie dla ekranu miesiąc. Jedynie przypadek dla średnich 10-minutowych nie będzie się niczym różnił.

Notatka: Te 10-minut rozdzielczości bierze się stąd że wartość 10-minutowa jest to największa rozdzielczość z jaką SZARP trzyma dane w archiwum.

Istnieje kilka powodów, dla których w programie przeglądającym (a w ogólności w systemie SZARP) mamy te dwa rodzaje parametrów. Przede wszystkim, niektóre parametry ze względu na swoje cechy łatwiej jest zapisać jako takie, które będzie się liczyć sposobem drugim.

Weźmy np. parametr liczący iloraz wartości jakichś dwóch parametrów (A i B dla uproszczenia). Najprostszy zapis formuły takiego parametru to:

v = p("A", t, pt) / p("B", t, pt)

Co się teraz stanie jak policzymy wartość tego parametru pierwszym sposobem dla np. średniej dobowej? Otrzymamy wynik wykonania następującej operacji:

v = (średnia dobowa parametru A) / (średnia dobowa parametru B)

W większości przypadków jednak to nie będzie to o co nam chodzi, my potrzebujemy wartości:

v = (
	(wartość A dla godziny 00:00) / (wartość B dla godziny 00:00) 
	+ (wartość A dla godziny 00:10) / (wartość B dla godziny 00:10)
	+ (wartość A dla godziny 00:20) / (wartość B dla godziny 00:20)
...
	+ (wartość A dla godziny 23:50) / (wartość B dla godziny 23:50)
    ) / (24 * 6)
Dokładnie to daje nam drugi sposób. Zapisanie takiej operacji dla parametru, którego średnie liczone są sposobem pierwszym byłoby zadaniem znacznie bardziej czasochłonnym (szczególnie gdybyśmy chcieli, żeby parametr zachowywał się poprawnie dla każdego rodzaju średnich).

Weźmy kolejny przykład parametru:

v = p("xxx:Kocioł 4:Sterownik:Wydajność kotła", t, pt)
local i = 1;
while isnan(v) and i < 10 do
	local v1 = p("xxx:Kocioł 4:Sterownik:Wydajność kotła",
		szb_move_time(t, -i, pt), pt)
	local v2 = p("xxx:Kocioł 4:Sterownik:Wydajność kotła",
		szb_move_time(t, i, pt), pt)
	if isnan(v1) then
		v = v2
	elseif isnan(v2) then
		v = v1
	else
		v = (v1 + v2) / 2
	end
	i = i + 1
end
Parametr realizuje proste zadanie - stara się uzupełnić dziury w danych parametru "wydajność kotła". Jeżeli dla danej 10-minutówki w czasie nie ma wartości parametru, to formuła stara się wygenerować ją z wartości leżących obok. W przypadku tej formuły liczenie tej wartości sposobem pierwszym, również nie miałoby sensu.