Aggr — funkcja wykresu

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. Funkcję Aggr stosuje się w agregacjach zaawansowanych, w których wywołanie funkcji Aggr jest osadzone w innej funkcji agregacji, która wykorzystuje tablicę wyników z funkcji Aggr jako dane wejściowe dla własnej agregacji.

Syntax:  

Aggr({SetExpression}[DISTINCT] [NODISTINCT ] expr, StructuredParameter{, StructuredParameter})

Return data type: dual

Arguments:  

Argument Opis
expr

Wyrażenie zawierające funkcję agregacji. Funkcja agregacji będzie domyślnie dokonywać agregacji na zbiorze możliwych wierszy zdefiniowanym przez selekcję.

StructuredParameter

Argument StructuredParameter składa się z wymiaru i opcjonalnie z kryterium sortowania w następującym formacie: (Dimension(Sort-type, Ordering))

Wymiar musi być pojedynczym polem i nie może być wyrażeniem. Na podstawie wymiaru zostanie ustalona tablica wartości, z których będzie wyliczana wartość wyrażenia Aggr.

Jeśli podane są kryteria sortowania, obliczona dla wymiaru tablica wartości utworzona przez funkcję Aggr jest sortowana. Jest to istotne, jeśli kolejność sortowania wpływa na wynik wyrażenia zawierającego funkcję Aggr.

Szczegółowe informacje na temat używania kryteriów sortowania zawiera temat Dodawanie kryteriów sortowania do wymiaru podanego argumentem StructuredParameter.

SetExpression Funkcja agregacji będzie domyślnie dokonywać agregacji na zbiorze możliwych wierszy zdefiniowanym przez 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 tablicę 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ą, natomiast działanie funkcji Aggr() można porównać do utworzenia tymczasowego zestawu wyników (tabeli wirtualnej), na którym wykonywana jest kolejna agregacja. Przykładowe zastosowanie to obliczenie średniej wartości sprzedaży poprzez zsumowanie sprzedaży według klientów w ramach instrukcji Aggr(), a następnie obliczenie średniej zsumowanych wyników: Avg(TOTAL Aggr(Sum(Sales),Customer)).

Porada: Funkcji Aggr() można używać w wymiarach wyliczanych, do tworzenia zagnieżdżanych agregacji wykresów na wielu poziomach.

Limitations:  

Każdy wymiar w funkcji Aggr() musi być pojedynczym polem i nie może być wyrażeniem (wymiarem wyliczanym).

W podstawowej postaci argument StructuredParameter w składni funkcji Aggr jest pojedynczym wymiarem. Wyrażenie Aggr(Sum(Sales, Month)) znajduje łączną wartość sprzedaży w każdym miesiącu. Użycie go w obrębie innej funkcji agregacji może jednak dać nieoczekiwane wyniki, jeśli nie zostaną określone kryteria sortowania. Wynika to stąd, że niektóre wymiary można sortować na różne sposoby (w kolejności liczbowej, alfabetycznie itd.).

Argument StructuredParameter funkcji Aggr umożliwia określenie kryteriów sortowania wymiaru w ramach wyrażenia. Pozwala to wymusić określoną kolejność sortowania tabeli wirtualnej generowanej przez funkcję Aggr.

Składnia argumentu StructuredParameter jest następująca:

(FieldName, (Sort-type, Ordering))

Argumenty StructuredParameter można zagnieżdżać:

(FieldName, (FieldName2, (Sort-type, Ordering)))

Typem sortowania może być: NUMERIC, TEXT, FREQUENCY lub LOAD_ORDER.

Z poszczególnymi typami sortowania powiązane są następujące kolejności:

Typ sortowania Dozwolone 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

Kolejności REVERSE i DESCENDING są równoważne.

W przypadku typu sortowania TEXT kolejności ASCENDING i A2Z są sobie równoważne. Również kolejności DESCENDING, REVERSE i Z2A są sobie równoważne.

W przypadku typu sortowania LOAD_ORDER kolejności ASCENDING i ORIGINAL są sobie równoważne.

Examples and results:  

Przykład Wynik
Avg(Aggr(Sum(UnitSales*UnitPrice), Customer))

Wyrażenie Aggr(Sum(UnitSales*UnitPrice), Customer) znajduje łączną wartość sprzedaży według pola Customer i zwraca tablicę wartości: 295, 715 i 120 dla trzech wartości Customer.

W efekcie uzyskaliśmy tymczasową listę wartości bez konieczności jawnego tworzenia tabeli lub kolumny zawierającej te wartości.

Wartości te są używane jako dane wejściowe dla funkcji Avg(), aby znaleźć średnią wartość sprzedaży, wynoszącą 376.6667 (w panelu właściwości należy wcześniej wybrać opcję Sumy w sekcji Prezentacja).

Aggr(NODISTINCT Max(UnitPrice), Customer)

Tablica wartości: 16, 16, 16, 25, 25, 25, 19 i 19. Kwalifikator nodistinct oznacza, że tablica zawiera jeden element dla każdego wiersza w danych źródłowych — w tym przypadku będzie to maksymalna wartość pola UnitPrice dla każdego pola Customer i Product.

Dane zastosowane w przykładach:

Utwórz tabelę z Customer, Product, UnitPrice i UnitSales jako wymiarami. Dodaj 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 '|');

 

Examples and results: Argumenty StructuredParameter

Przykład Wynik
Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)) ))

Ta miara oblicza sprzedaż od początku roku dla każdego miesiąca z użyciem kryteriów sortowania w argumencie StructuredParameter w wyrażeniu.

Bez podania kryteriów sortowania wynik wyrażenia Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year), (Month) )) zależy od sposobu posortowania wymiarów Year i Month. Uzyskany wynik może być nieoczekiwany.

Dodanie typu sortowania i typu kolejności do wymiaru powoduje nadanie kryterium sortowania argumentowi StructuredParameter: (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)). Typ sortowania NUMERIC i kolejność ASCENDING określają, że parametry Year i Month są sortowane rosnąco według wartości liczbowych.

Dane zastosowane w przykładach:

Poniższy skrypt ładowania generuje tabelę zamówień z wierszami zamówień, które zostaną użyte w przykładzie dotyczącym argumentów StructuredParameter.

Set vNumberOfOrders = 1000; OrderLines: Load RowNo() as OrderLineID, OrderID, OrderDate, Round((Year(OrderDate)-2005)*1000*Rand()*Rand()*Rand1) as Sales While Rand()<=0.5 or IterNo()=1; Load * Where OrderDate<=Today(); Load Rand() as Rand1, Date(MakeDate(2013)+Floor((365*4+1)*Rand())) as OrderDate, RecNo() as OrderID Autogenerate vNumberOfOrders; Calendar: Load distinct Year(OrderDate) as Year, Month(OrderDate) as Month, OrderDate Resident OrderLines;

Różnicę między tymi miarami można porównać w tabeli albo na osobnych wykresach liniowych:

  • Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year), (Month) ))
  • Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)) ))

Druga miara podaje poprawną sprzedaż od początku roku dla poszczególnych miesięcy.