Aggr
Funkcja Aggr() zwraca tablicę wartości wyrażenia obliczonego po wskazanych wymiarach. Może to na przykład być wartość maksymalna sprzedaży według klienta i regionu.
Funkcja Aggr jest używana do agregacji zagnieżdżonych, w których jej pierwszy parametr (agregacja wewnętrzna) jest obliczany raz na wartość wymiaru. Wymiary są określone w drugim parametrze (i kolejnych parametrach).
Ponadto funkcja Aggr powinna być osadzona w innej funkcji agregacji, która wykorzystuje tablicę wyników z funkcji Aggr jako dane wejściowe dla agregacji, w której jest zagnieżdżona.
Składnia:
Aggr({SetExpression}[DISTINCT] [NODISTINCT ] expr, StructuredParameter{, StructuredParameter})
Typ zwracanych danych: podwójny
Argumenty:
- expr: Wyrażenie zawierające funkcję agregacji. Funkcja agregacji będzie domyślnie dokonywać agregacji na zbiorze możliwych rekordów zdefiniowanym przez daną selekcję.
-
StructuredParameter: Argument StructuredParameter składa się z wymiaru i opcjonalnie może zawierać kryteria sortowania w formacie (Dimension(Sort-type, Ordering)). Wymiar ten musi zajmować jedno pole i nie może być wyrażeniem. Wymiar służy do ustalania szeregu wartości, dla których wyliczane jest wyrażenie Aggr.
Jeśli uwzględnione są kryteria sortowania, wówczas szereg wartości utworzony przez funkcję Aggr i wyliczany dla wymiaru, jest sortowany. Jest to istotne, gdy kolejność sortowania wpływa na wynik wyrażenia, które obejmuje funkcję Aggr. Szczegółowe informacje na temat sposobu używania kryteriów sortowania zawiera temat Dodawanie kryteriów sortowania do wymiaru w parametrze ustrukturyzowanym.
- SetExpression: Funkcja agregacji będzie domyślnie dokonywać agregacji na zbiorze możliwych rekordów zdefiniowanym przez daną selekcję. Alternatywny zestaw wierszy można zdefiniować za pomocą wyrażenia analizy zestawów.
- DISTINCT: Jeśli argument wyrażenia jest poprzedzony kwalifikatorem distinct lub w ogóle nie ma kwalifikatora, dla każdej odrębnej kombinacji wartości wymiarów będzie generowana tylko jedna wartość zwracana. W ten sposób są standardowo dokonywane agregacje. Każda odrębna kombinacja wartości wymiarów będzie generować jeden wiersz na wykresie.
- NODISTINCT: Jeśli argument wyrażenia jest poprzedzony kwalifikatorem nodistinct, każda kombinacja wartości wymiarów może generować więcej niż jedną wartość zwracaną (w zależności od bazowej struktury danych). Jeśli występuje tylko jeden wymiar, funkcja aggr zwróci szereg z tą samą liczbą elementów co liczba wierszy w źródle danych.
Podstawowe funkcje agregacji, takie jak Sum, Min i Avg, zwracają jedną wartość liczbową, podczas gdy funkcja Aggr() może zostać poddana porównaniu w celu tymczasowego przeniesienia wyników (tabela wirtualna), względem których może zostać wykonana kolejna agregacja. Na przykład przez obliczenie wartości średniej sprzedaży przez zsumowanie wartości sprzedaży według klientów w ramach instrukcji Aggr(), a następnie obliczenie średniej z zsumowanych wyników za pomocą wyrażenia: Avg(TOTAL Aggr(Sum(Sales), Customer)).
Ograniczenia:
Każdy wymiar w funkcji Aggr() musi być pojedynczym polem i nie może być wyrażeniem (wymiarem wyliczanym).
Dodawanie kryteriów sortowania do wymiaru w parametrze ustrukturyzowanym
W formie podstawowej argument StructuredParameter w składni funkcji Aggr jest wymiarem pojedynczym. Wyrażenie: Aggr(Sum(Sales, Month)) znajduje łączną wartość sprzedaży w każdym miesiącu. Jednak gdy to wyrażenie zostanie umieszczone w innej funkcji agregacji, wówczas wyniki mogą być nieoczekiwane, chyba że używane będą kryteria sortowania. Przyczyną takiego działania jest to, że niektóre wymiary mogą być sortowanie w porządku liczbowym lub alfabetycznym itd.
W argumencie StructuredParameter w funkcji Aggr można określić kryteria sortowania w wymiarze zawartym w wyrażeniu. W ten sposób można narzucić kolejność sortowania w tabeli wirtualnej, którą zwraca funkcja Aggr.
Argument StructuredParameter ma następującą składnię:
(FieldName, (Sort-type, Ordering))
Parametry ustrukturyzowane mogą być zagnieżdżane:
(FieldName, (FieldName2, (Sort-type, Ordering)))
Typy sortowania mogą być następujące: NUMERIC, TEXT, FREQUENCY lub LOAD_ORDER.
Typy kolejności powiązane z każdym typem sortowania są następujące:
Typ sortowania | Dostępne typy kolejności |
---|---|
NUMERIC | ASCENDING, DESCENDING lub REVERSE |
TEXT | ASCENDING, A2Z, DESCENDING, REVERSE lub Z2A |
FREQUENCY | DESCENDING, REVERSE lub ASCENDING |
LOAD_ORDER | ASCENDING, ORIGINAL, DESCENDING lub REVERSE |
Typy kolejności REVERSE i DESCENDING są równoważne.
W przypadku typu sortowania TEXT typy kolejności ASCENDING i A2Z są równoważne, podobnie jak typy DESCENDING, REVERSE i Z2A, które również są równoważne.
W przypadku typu sortowania LOAD_ORDER typy sortowania ASCENDING i ORIGINAL są równoważne.
Przykłady
Przykład 1:
Avg(Aggr(Sum(UnitSales*UnitPrice), Customer))
Wyrażenie Aggr(Sum(UnitSales*UnitPrice), Customer) znajduje łączną wartość sprzedaży wg klienta (Customer), a następnie zwraca szereg wartości: 295, 715 i 120 dla trzech wartości Customer.
W ten sposób zbudowaliśmy tymczasową listę wartości bez konieczności tworzenia jawnej tabeli ani kolumny zawierającej te wartości. Wartości te są stosowane jako dane wejściowe dla funkcji Avg(), aby znaleźć wartość średniej sprzedaż:, 376,6667. (W panelu właściwości należy wcześniej wybrać Sumy w menu Presentation).
Przykład 2:
Aggr(NODISTINCT Max(UnitPrice), Customer)
Tablica wartości: 16, 16, 16, 25, 25, 25, 19 i 19. Kwalifikator nodistinct oznacza, że szereg zawiera po jednym elemencie dla każdego wiersza w danych źródłowych: każdy jest maksymalną ceną UnitPrice dla każdego klienta (Customer ) i produktu (Product).
Przykład 3:
max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear,(NUMERIC, ASCENDING))))
Używanie kryteriów sortowania w argumencie StructuredParameter w wyrażeniu: max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear,(NUMERIC, ASCENDING))))
Bez kryteriów sortowania wynik wyrażenia max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear))) jest zależny od sposobu sortowania wymiaru MonthYear. W takim przypadku wynik może być niezgodny z oczekiwaniami. Dodanie do wymiaru wartości określających typ sortowania i typ kolejności powoduje dodanie kryteriów sortowania do parametru ustrukturyzowanego: (MonthYear, (NUMERIC, ASCENDING)), gdzie typ sortowania NUMERIC i kolejność ASCENDING określają, że wymiar MonthYear jest sortowany rosnąco według wartości liczbowej.
W tym przypadku szukamy największego wzrostu liczby klientów z miesiąca na miesiąc. Można to wykorzystać na przykład w wizualizacji wskaźnika KPI.
Część Aggr wyrażenia porównuje łączną liczbę klientów z jednego miesiąca (co określa MonthYear) z łączną liczbą z poprzedniego miesiąca. Z wymiarem: (MonthYear,(NUMERIC, ASCENDING)) używamy kryteriów sortowania, dzięki czemu mamy pewność, że Aggr porównuje liczby klientów w kolejnych miesiąca w tabeli wirtualnej poprzez sortowanie miesięcy w kolejności rosnącej według wartości liczbowej, a nie rosnąco w kolejności alfabetycznej.
Dane zastosowane w przykładach:
Utwórz tabelę z wymiarami Customer, Product, UnitPrice i UnitSales. Dodaj to wyrażenie do tabeli jako miarę.
ProductData:
LOAD * inline [
Customer|Product|UnitSales|UnitPrice
Astrida|AA|4|16
Astrida|AA|10|15
Astrida|BB|9|9
Betacab|BB|5|10
Betacab|CC|2|20
Betacab|DD|25|25
Canutility|AA|8|15
Canutility|CC||19
] (delimiter is '|');