Oczekiwany efekt do uzyskania:
- Wyliczenie w kolumnach średnich wartości miesięcznych dla dowolnej liczby wybranych miesięcy.
- W efekcie kalkulacja nie może być uzależniona od ilości wybranych miesięcy, tzn. od ilości kolumn w tabeli.
Tak wygląda zestaw danych na którym pokażę jak to zrobić. Mamy dwa lata i wybrane ręcznie dowolne miesiące (jako kryteria):
1. Standardowo można zastosować wprost wzór kalkulacji, który odwołuje się do numerów kolumn, czyli:
- Średnia 1: avg(d1:d2, 0, m1)
- Średnia 2: avg(d3:d5, 0, m1)
Tak zdefiniowane średnie będą działać poprawnie dopóki w pierwszym roku będą wybrane 2 miesiące, a w drugim 3 miesiące. Jeżeli jednak zmienimy liczbę wyświetlanych miesięcy średnie dalej będą liczone dla 2 i 3 kolumn odpowiednio - czyli nie o taki efekt chodziło...
2. Gdybyśmy chcieli te średnie pokazać w wierszu, a nie w kolumnach, to należałoby zastosować wzór:
- avg(all(s), d1, m1)
- avg(all(s), d2, m1)
PS. W tym przypadku korzystamy z modyfikatora (s) - siblings, aby wyliczyć średnie na tym samy poziomie hierarchii wymiaru czas
Tak zdefiniowane średnie będą działały poprawnie, nawet jeżeli będziemy zmieniać liczbę wyświetlanych miesięcy. Jednak te średnie są w wierszach, a nie w kolumnach - czyli też nie o taki efekt chodziło...
3. Aby uzyskać oczekiwany efekt, w którym średnia będzie liczona osobno dla każdego roku, ale będzie można zmieniać dowolnie ilość wyświetlanych miesięcy dla każdego roku, należy zastosować bardziej złożone kalkulacje, czyli pewien trick:
a) dodajemy kalkulowaną miarę, np. m2: avg(all(s), 0, m1)
b) dodajemy kolejną kalkulowaną miarę, np. m3: sum(0(l2), 0, m2)
Otrzymamy taki efekt pośredni:
c) następnie dodajemy kalkulowaną kolumnę, np. Średnia 1: sum(d1(l1), 0, m3)
d) oraz kalkulowaną kolumnę, np. Średnia 2: sum(d2(l1), 0, m3)
W efekcie otrzymamy poprawnie wyliczone średnie:
e) teraz jeżeli wyłączymy wyświetlanie miar pośrednich m2 i m3 otrzymamy oczekiwany efekt:
Tak przygotowane średnie będą poprawnie wyliczane niezależnie od ilości miesięcy które wybierzemy dla każdego roku (średnie nie opierają się na numerach kolumn), np.:
Pozdrawiam,
Dariusz Bieniek