![]() ![]() |
Klasa Total zawiera funkcje zagregowane. Są one rozszerzeniami języka JavaScript wprowadzonymi przez BIRT i służą do podsumowywania zbioru wierszy. Mechanizm raportowania BIRT implementuje funkcję w następujących dwóch fazach:
BIRT przepisuje wszystkie skrypty zawierające agregaty, tworząc zmieniony skrypt realizujący opisane powyżej dwie fazy. Jedynym momentem, kiedy należy być świadomym, że proces ten ma miejsce, jest debugowanie wyrażenia zawierającego agregat. Jako przykład rozważmy prezentowanie w stopce grupy wartości, która jest częścią procentową salda wszystkich kont. Działanie to realizuje następująca instrukcja:
W tym przykładzie funkcja Total.OVERALL powoduje, że BIRT oblicza zagregowaną sumę wszystkich wierszy, mimo iż wyrażenie występuje w sumie grupy. Aby obliczyć wyrażenie w tym przykładzie, BIRT wykonuje jedno przejście, aby obliczyć saldo sumaryczne, oraz drugie, aby obliczyć wartość dla każdego konta.
Ogólne zasady dla klasy Total są następujące:
Wszystkie agregaty pozwalają na użycie dwóch opcjonalnych argumentów, które reprezentują filtrowanie i grupowanie:
Argument 'filtr' udostępnia wyrażenie boolowskie, które BIRT wartościuje przy przetwarzaniu każdego wiersza. Przy obliczaniu agregatu BIRT bierze pod uwagę jedynie te wiersze, które są zgodne z filtrem. Raport może na przykład podsumowywać limity kredytowe aktywnych klientów, aby określić maksymalną ekspozycję kredytową.
Wyrażenie jest obliczane w fazie transformacji danych. Może mieć dostęp do kolumn w wierszu, parametrów, funkcji zdefiniowanych przez użytkownika oraz innych zasobów zdefiniowanych w powyższym opisie kontekstu. Na przykład:
Jeśli argument 'filtr' będzie miał wartość NULL, niezdefiniowaną lub Total.NO_FILTER, oznacza to, że filtr nie będzie stosowany. Jeśli aplikacja nie udostępnia filtru, domyślną wartością argumentu 'filtr' jest wartość niezdefiniowana. Jeśli podany zostanie argument 'grupa', w celu pominięcia filtrowania należy podać argument 'filtr' o wartości NULL lub Total.NO_FILTER.
W raportach często należy prezentować sumy dla bieżącego poziomu grupowania. Załóżmy na przykład, że raport jest pogrupowany według klientów oraz zamówień, zaś rekordy szczegółowe reprezentują pozycje w zamówieniach. Każda pozycja ma cenę jednostkową oraz ilość, jak w następującym agregacie:
Ten agregat podsumowuje wartości w bieżącej grupie. Jeśli zostanie umieszczony w stopce, wyświetla sumę pozycji dla danego zamówienia. Jeśli zostanie umieszczony w stopce klienta, wyświetla sumę wszystkich pozycji dla wszystkich zamówień tego klienta. Jeśli zaś zostanie umieszczony w stopce raportu, wyświetla sumę wszystkich pozycji dla wszystkich klientów.
Zdarzają się jednak sytuacje, w których aplikacja musi mieć dostęp do sumy z innego poziomu grupowania. Można na przykład chcieć znać sumę jednego zamówienia jako procent wszystkich zamówień danego klienta. W takim przypadku należy uzyskać dostęp do sumy grupy innej niż bieżąca. Aby to zrobić, należy użyć argumentu 'grupa':
Argument 'grupa' może mieć jedną z następujących wartości:
W poniższych przykładach przedstawiono tego rodzaju argumenty 'grupa':
Total.sum( row["Kolumna"] null, null ); // Bieżąca grupa Total.sum( row["Kolumna"], null, "Klient" ); // Wg nazwy Total.sum( row["Kolumna"], null, "row[`IDklienta']" ); // Wg klucza grupy Total.sum( row["Kolumna"], null, 1 ); // Wg indeksu grupy Total.sum( row["Kolumna"], null, "Overall" ); // Sumy łączne Total.sum( row["Kolumna"], null, 0 ); // Sumy łączne
Jeśli zostanie użyty argument 'grupa', należy też podać argument 'filtr'. Jeśli filtr nie jest potrzebny, należy podać w jego miejsce wartość NULL. Indeksu grupy nie należy podawać w cudzysłowach. Należy go podać w formie liczbowej. Tak więc 1 oznacza grupę na poziomie 1, zaś "1" oznacza grupę o nazwie "1".
Stała OVERALL
Ta funkcja zagregowana oblicza matematyczną średnią wartości. Jeśli wynikiem wartościowania wyrażenia jest liczba, funkcja zwraca średnią liczb. Jeśli wynikiem obliczenia wyrażenia jest data, funkcja zwraca średnią dat.
Total.ave( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca wartość średnią z obliczenia podanego wyrażenia. Jeśli nie są dostępne żadne wiersze, zwraca wartość NULL.
Następująca instrukcja zwraca średni wiek uczniów w klasie:
Aby zwrócić średnią datę urodzin uczniów w klasie, należy użyć następującej instrukcji:
Agregat Total.median
Agregat Total.mode
Agregat Total.movingAve
Agregat Total.stdDev
Agregat Total.variance
Agregat Total.weightedAve
Ta funkcja zlicza wiersze w grupie.
Total.count( [ filtr [, grupa ]] )
W tym przykładzie zliczani są uczniowie płci męskiej i żeńskiej w danej klasie. Konieczne jest utworzenie dwóch elementów danych. Pierwszym powinien być:
Drugim powinien być:
Agregat Total.countDistinct
Agregat Total.sum
Funkcja oblicza liczbę różnych wartości w grupie lub zestawie danych. Argument 'wyrażenie' stanowi wyrażenie używane do grupowania wartości. Wyrażenie odnosi się do kolumny wierszy danych. Wartości NULL są zliczane jako pojedyncza różna wartość.
Total.countDistinct ( wyrażenie [, filtr [, grupa ]] )
Liczba różnych wartości w grupie lub zestawie danych. Jeśli nie są dostępne żadne wiersze, zwraca wartość zerową.
Załóżmy, że chcemy znać liczbę różnych krajów, z których pochodzi grupa uczniów. Możemy zdefiniować element danych, który wykorzystuje następujące wyrażenie:
W tej instrukcji row.Kraj jest kolumną, która zawiera nazwę lub kod kraju, z którego pochodzi uczeń. Załóżmy, że niektóre wiersze zawierają wartość NULL, co oznacza, że nie wiemy z jakiego kraju pochodzi uczeń. Aby wykluczyć takie wiersze z obliczenia, należy użyć następującej instrukcji:
Agregat Total.count
Ta funkcja zagregowana zwraca pierwszą wartość, jaka pojawia się w zestawie danych. Jest to pierwsza wartość pobrana z zestawu danych przy pobieraniu wierszy. Wykorzystywana jest kolejność sortowania zdefiniowana dla elementu Table lub List.
Total.first( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca pierwszą wartość, jaka pojawia się w sekwencji wierszy, lub wartość NULL, jeśli zestaw danych nie zawiera żadnych wierszy.
Załóżmy, że raport jest listą transakcji dotyczących określonych akcji, zrealizowanych w określonym okresie. Następująca instrukcja umożliwia wyświetlenie pierwszego zakupu akcji:
Agregat Total.isBottomNPercent
Agregat Total.max
Agregat Total.min
Ta funkcja zwraca wartość boolowską, która wskazuje, czy wartość określonego pola liczbowego jest jedną z najniższych n wartości.
Total.isBottomN( wyrażenie, n, [, filtr [, grupa ]] )
Ta funkcja zwraca wartość TRUE lub FALSE. Zwraca TRUE, jeśli wartość w polu liczbowym należy do n najniższych wartości w kolumnie.
Załóżmy, że raport ma pięć wierszy, zawierających wartości 1, 2, 3, 4 i 5. Funkcja Total.isBottomN(wyrażenie, 2) sprawdza, czy pola reprezentowane przez 'wyrażenie' zawierają 1 lub 2, czyli najmniejsze dwie liczby w kolumnie.
Agregat Total.isBottomNPercent
Agregat Total.isTopN
Agregat Total.isTopNPercent
Ta funkcja zwraca wartość boolowską, która wskazuje, czy wartość określonego pola liczbowego mieści się w najniższych n procent wartości w kolumnie.
Total.isBottomNPercent( wyrażenie, n, [, filtr [, grupa ]] )
Ta funkcja zwraca wartość TRUE lub FALSE. Zwraca TRUE, jeśli wartość w polu mieści się w n procent najniższych wartości w kolumnie.
Załóżmy, że raport ma pięć wierszy, zawierających wartości 1, 2, 3, 4 i 5. Funkcja Total.isBottomNPercent(expr, 60) sprawdza, czy pola reprezentowane przez 'wyrażenie' zawierają 1, 2 lub 3, czyli mieszczą się w najniższych 60% liczb w kolumnie.
Agregat Total.isBottomN
Agregat Total.isTopN
Agregat Total.isTopNPercent
Ta funkcja zwraca wartość boolowską, która wskazuje, czy wartość określonego pola liczbowego jest jedną z najwyższych n wartości.
Total.isTopN( wyrażenie, n, [, filtr [, grupa ]] )
Ta funkcja zwraca wartość TRUE lub FALSE. Zwraca TRUE, jeśli wartość w polu liczbowym należy do n najwyższych wartości w kolumnie.
Załóżmy, że raport ma pięć wierszy, zawierających wartości 1, 2, 3, 4 i 5. Funkcja Total.isTopN(wyrażenie, 2) sprawdza, czy pola reprezentowane przez 'wyrażenie' zawierają 4 lub 5, czyli największe dwie liczby w kolumnie.
Agregat Total.isTopNPercent
Agregat Total.isBottomN
Agregat Total.isBottomNPercent
Ta funkcja zwraca wartość boolowską, która wskazuje, czy wartość określonego pola liczbowego mieści się w n procent najwyższych wartości w kolumnie.
Total.isTopNPercent( wyrażenie, n, [, filtr [, grupa ]] )
Ta funkcja zwraca wartość TRUE lub FALSE. Zwraca TRUE, jeśli wartość w polu mieści się w n procent najwyższych wartości w kolumnie.
Załóżmy, że raport ma pięć wierszy, zawierających wartości 1, 2, 3, 4 i 5. Funkcja Total.isTopNPercent(expr, 60) sprawdza, czy pola reprezentowane przez 'wyrażenie' zawierają 3, 4 lub 5, czyli mieszczą się w 60% najwyższych liczb w kolumnie.
Agregat Total.isTopN
Agregat Total.isBottomN
Agregat Total.isBottomNPercent
Ta funkcja zwraca ostatnią wartość, jaka pojawia się w zestawie danych. Jest to ostatnia wartość pobrana z zestawu danych przy pobieraniu wierszy. Wykorzystywana jest kolejność sortowania zdefiniowana dla elementu Table lub List.
Total.last ( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca ostatnią wartość, jaka pojawia się w sekwencji wierszy, lub wartość NULL, jeśli zestaw danych nie zawiera żadnych wierszy.
Załóżmy, że raport jest listą transakcji dotyczących określonych akcji, zrealizowanych w określonym okresie. Następująca instrukcja umożliwia wyświetlenie ostatniej transakcji sprzedaży akcji:
Agregat Total.first
Agregat Total.max
Agregat Total.min
Ta funkcja oblicza maksymalną wartość dla danego wyrażenia. Wyrażenie jest obliczane dla każdego wiersza i zachowywana jest maksymalna wartość. Ta funkcja może operować na liczbach, datach lub łańcuchach.
Total.max( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca wartość maksymalną podanego wyrażenia. Jeśli nie są dostępne żadne wiersze, zwraca wartość NULL.
Następująca instrukcja umożliwia wyszukanie najstarszego ucznia w klasie:
Agregat Total.first
Agregat Total.isBottomNPercent
Agregat Total.min
Ta funkcja zagregowana oblicza matematyczną medianę wartości. Połowa wartości znajduje się powyżej mediany, a połowa poniżej.
Total.median ( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca wartość mediany z obliczenia podanego wyrażenia. Jeśli nie są dostępne żadne wiersze, zwraca wartość NULL.
Następująca instrukcja zwraca medianę wieku uczniów w klasie:
Aby zwrócić medianę daty urodzin uczniów w klasie, należy użyć następującej instrukcji:
Agregat Total.ave
Agregat Total.mode
Agregat Total.movingAve
Agregat Total.stdDev
Agregat Total.variance
Agregat Total.weightedAve
Ta funkcja zagregowana oblicza wartość minimalną danego wyrażenia. Wyrażenie jest obliczane dla każdego wiersza i zachowywana jest wartość minimalna. Ta funkcja może operować na dowolnych typach prostych: liczbach, datach lub łańcuchach.
Total.min( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca wartość minimalną podanego wyrażenia. Jeśli nie są dostępne żadne wiersze, zwraca wartość NULL.
Następująca instrukcja zwraca wiek najmłodszego ucznia w klasie:
Agregat Total.first
Agregat Total.isBottomNPercent
Agregat Total.max
Ta funkcja zagregowana oblicza matermatyczną dominantę wartości. Dominanta to wartość, która najczęściej występuje w danych. Na przykład w sekwencji {1, 2, 3, 2, 4, 7} dominantą jest 2, ponieważ występuje dwukrotnie, zaś pozostałe liczby jednokrotnie. Jeśli zestaw danych ma więcej dominant, na przykład jak w sekwencji {1,2,3,2,3}, agregat dominanty zwraca wartość NULL.
Total.mode ( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca wartość dominanty dla podanego wyrażenia. Jeśli nie są dostępne żadne wiersze, zwraca wartość NULL.
Następująca funkcja zwraca najczęściej występujący wiek uczniów w klasie:
Agregat Total.ave
Agregat Total.median
Agregat Total.movingAve
Agregat Total.stdDev
Agregat Total.variance
Agregat Total.weightedAve
Ta funkcja zagregowana oblicza średnią kroczącą. Argument 'wyrażenie' określa wartość do obliczenia średniej, zaś argument 'okno' określa, ile wierszy ma być branych pod uwagę. Średnia wierszy jest obliczana w kolejności określonej przez kontekst, zazwyczaj określonej przez kolejność sortowania dla elementu List lub Table.
Total.movingAve( wyrażenie, okno [, filtr [, grupa ]] )
Ta funkcja zwraca wartość średniej kroczącej dla podanego wyrażenia. Jeśli nie są dostępne żadne wiersze, zwraca wartość NULL.
Załóżmy, że raport jest listą dziennych cen akcji. Aby wyświetlić średnią kroczącą ceny tych akcji przez ostatnie pięć dni, należy użyć następującej instrukcji:
Agregat Total.ave
Agregat Total.median
Agregat Total.mode
Agregat Total.stdDev
Agregat Total.variance
Agregat Total.weightedAve
Ta funkcja bada zbiór wartości i zwraca wartość, która jest w określonym centylu wszystkich wartości w zbiorze. Może na przykład pozwolić uzyskać informacje na temat tego, jaki wynik egzaminu reprezentuje 90. centyl.
Ta funkcja zwraca wartość, która znajduje się w określonym centylu w zbiorze analizowanych wartości.
Poniższa instrukcja zwraca ocenę egzaminu znajdującą się w 50. centylu:
Jeśli zbiorem wyników egzaminu we wskazanej kolumnie byłyby liczby 10, 20, 30, 40 i 50, instrukcja zwróciłaby liczbę 30.
Agregat Total.percentRank
Agregat Total.percentSum
Agregat Total.quartile
Ta funkcja oblicza ranking procentowy wartości w podanym polu.
percentRank( wyrażenie, filtr [, grupa ]] )
Ta funkcja zwraca ranking procentowy wartości we wskazanym polu. Zwracana wartość jest w zakresie od zera do jednego.
Poniższa instrukcja zwraca ranking procentowy ocen spośród wszystkich ocen w kolumnie:
Jeśli oceny w badanym zakresie to 10, 10, 20 i 50, a ocena w wierszu zawierającym tę instrukcję wynosi 30, funkcja zwraca wartość .5, ponieważ połowa wartości jest poniżej 20, a połowa powyżej.
Agregat Total.percentile
Agregat Total.percentSum
Agregat Total.quartile
Ta funkcja oblicza procent udziału wartości w sumie wszystkich wartości w danym zakresie.
percentSum( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca procent udziału wartości w sumie wszystkich wartości w danym zakresie.
Poniższa instrukcja zwraca procent udziału wartości zamówienia w sumie wartości wszystkich zamówień:
Agregat Total.percentile
Agregat Total.percentRank
Agregat Total.quartile
Ta funkcja oblicza wartość należącą do zdefiniowanego zbioru wartości, dla której odpowiednio 0%, 25%, 50%, 75% lub 100% wartości w zbiorze jest większych od niej.
Total.quartile( wyrażenie, kwartyl, [, filtr [, grupa ]] )
Ta funkcja zwraca wartość ze zbioru, która mieści się w określonym kwartylu.
Następująca instrukcja zwraca wartość zamówienia, dla której 75% wartości zamówień jest niższych, a 25% - wyższych:
Agregat Total.percentile
Agregat Total.percentRank
Agregat Total.percentSum
Ta funkcja oblicza pozycję wartości w zbiorze wartości. Wartość pozycji może być od 1 do liczby wartości w zbiorze. Jeśli dwie wartości są identyczne, to ich pozycja jest taka sama.
Total.rank( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca wartość całkowitą, która określa pozycję wartości i zawiera się w zakresie od 1 do liczby elementów w zbiorze wartości.
Następująca instrukcja zwraca pozycję pola WartośćZamówienia wśród wszystkich innych wartości zamówień w kolumnie WartośćZamówienia.
Agregat Total.percentRank
Ta funkcja oblicza bieżącą liczbę wierszy (narastająco).
runningCount( filtr [, grupa ]] )
Ta funkcja zwraca bieżącą liczbę wierszy (narastająco).
Poniższa instrukcja zwraca bieżącą liczbę wierszy w raporcie:
Agregat Total.count
Agregat Total.percentRank
Ta funkcja zagregowana oblicza statystyczne odchylenie standardowe sekwencji liczb. Odchylenie standardowe jest miarą rozrzutu zbioru wartości.
Total.stdDev( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca odchylenie standardowe danego wyrażenia. Jeśli nie są dostępne żadne wiersze, zwraca wartość NULL.
Agregat Total.ave
Agregat Total.median
Agregat Total.mode
Agregat Total.movingAve
Agregat Total.variance
Agregat Total.weightedAve
Ta funkcja zagregowana oblicza sumę wartości dla wszystkich wierszy w grupie. Wartość dla każdego wiersza jest obliczana przy użyciu wyrażenia podanego w argumencie 'wyrażenie'. Sumę uzyskuje się dodając wszystkie te wartości do siebie.
Total.sum ( wyrażenie [, filtr [, grupa ]] )
Suma podanego wyrażenia. Jeśli nie są dostępne żadne wiersze, zwraca wartość zerową.
Poniższa instrukcja zwraca sumę wartości zamówień dla danego klienta:
Agregat Total.count
Agregat Total.percentRank
Ta funkcja zagregowana oblicza statystyczną wariancję sekwencji liczb. Wariancja jest miarą rozrzutu zbioru wartości.
Total.variance( wyrażenie [, filtr [, grupa ]] )
Ta funkcja zwraca wariancję podanego wyrażenia. Jeśli nie są dostępne żadne wiersze, zwraca wartość NULL.
Agregat Total.ave
Agregat Total.median
Agregat Total.mode
Agregat Total.movingAve
Agregat Total.stdDev
Agregat Total.weightedAve
Ta funkcja zagregowana oblicza matematyczną średnią ważoną wartości. Jeśli argumenty 'wyrażenie' lub 'waga' mają wartość NULL, wiersz jest pomijany w wyliczaniu średniej.
Total.weightedAve( wyrażenie, waga [, filtr [, grupa ]] )
Ta funkcja zwraca średnią ważoną podanego wyrażenia. Jeśli nie są dostępne żadne wiersze, zwraca wartość NULL.
Załóżmy, że aplikacja finansowa śledzi pakiety określonych akcji zakupionych w różnych momentach. Z każdym pakietem związana jest inna cena zakupu oraz liczba akcji zakupionych po tej cenie. Następująca instrukcja oblicza średnią ważoną ceny zakupu:
Agregat Total.ave
Agregat Total.median
Agregat Total.mode
Agregat Total.movingAve
Agregat Total.stdDev
Agregat Total.variance
![]() ![]() |