# Agregacje zagnieżdżone

Każda nazwa pola w wyrażeniu wykresu musi być zamknięta dokładnie jedną funkcją agregacji. Jeśli konieczne jest zagnieżdżenie agregacji, można użyć funkcji Aggr() w celu dodania drugiego poziomu agregacji. Aggr() zawiera funkcję agregacji w formie argumentu.

## Zawsze jeden poziom agregacji w danej funkcji

Typowa aplikacja może zawierać:

* jeden milion rekordów w danych
* sto rzędów w tabeli przestawnej
* jeden KPI w mierniku lub polu tekstowym

Wszystkie trzy liczby mogą nadal reprezentować wszystkie dane, pomimo różnicy w ich wielkości. Liczby te to tylko różne poziomy agregacji.

Funkcje agregacji wykorzystują wartości z wielu rekordów jako dane wejściowe i zawijają je w jedną wartość, która może być postrzegana jako podsumowanie wszystkich rekordów. Jest jedno ograniczenie: nie można używać funkcji agregacji wewnątrz innej funkcji agregacji. Zazwyczaj każde odniesienie pola musi być otoczone dokładnie jedną funkcją agregacji.

Następujące wyrażenia będą działać:

* Sum(Sales)
* Sum(Sales)/Count(Order Number)

Poniższe wyrażenie nie będzie działać, ponieważ jest zagnieżdżoną agregacją:

* Count(Sum(Sales))

Rozwiązaniem tego problemu jest funkcja Aggr(). Mimo swojej nazwy nie jest to funkcja agregacji. Jest to funkcja „wiele do wielu”, przypominająca bardziej matematyczną macierz. Przekształca ona tabelę z rekordami N na tabelę z rekordami M. Zwraca tablicę wartości. Można ją również uznać za wirtualną tabelę prostą o jednej mierze i jednym lub kilku wymiarach.

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

## Używanie funkcji Aggr() do zagnieżdżonych agregacji

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. W zaawansowanych agregacjach funkcja Aggr() jest zamknięta w innej funkcji agregacji wykorzystującej tablicę wyników z funkcji Aggr() jako dane wejściowe do agregacji, w której jest zagnieżdżona.

Kiedy jest używana, instrukcja Aggr() tworzy wirtualną tabelę, z jednym wyrażeniem pogrupowanym według jednego lub kilku wymiarów. Wynik tej wirtualnej tabeli może być następnie agregowany dalej przez funkcję agregacji zewnętrznej.

## Obliczanie największej średniej wartości zamówienia

Użyjmy prostej instrukcji Aggr() w wyrażeniu wykresu.

Chcemy zobaczyć nie tylko nasze ogólne wskaźniki na poziomie regionalnym, ale także pokazać dwa bardziej złożone wyrażenia:

* Największa średnia wartość zamówienia według kierownika w każdym regionie.
* Kierownik odpowiedzialny za tę największą średnią wartość zamówienia.

Możemy łatwo obliczyć średnią wartość zamówienia dla każdego regionu za pomocą standardowego wyrażenia Sum(Sales)/Count([Order Number] )

Wewnątrz aplikacji w arkuszu Nested Aggregations znajduje się tabela zatytułowana Aggr() function.

Wykonaj następujące czynności:

1. Wybierz dostępną tabelę Aggr() function.  
   Otworzy się panel właściwości.
2. Kliknij przycisk Dodaj kolumnę i wybierz Miara.
3. Kliknij symbol the Wyrażenie icon.  
   Otwiera się edytor wyrażeń.
4. Wprowadź: Sum(Sales)/Count([Order Number])
5. Kliknij przycisk Zastosuj.

Tabela przedstawiająca średnią wartość zamówienia w poszczególnych regionach.

![Tabela przedstawiająca średnią wartość zamówienia w poszczególnych regionach.](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-aggr-table1.png)

WskazówkaDla pewności warto sprawdzić, czy dane są odpowiednio sformatowane. W tym przypadku w każdej kolumnie zmienimy Etykietę, aby przedstawiała obliczenie. W kolumnach z wartościami pieniężnymi zmienimy Formatowanie liczb na Pieniądze, a Wzorzec formatu na $ #,##0;-$ #,##0.

Naszym celem jest uzyskanie największej średniej wartości zamówienia dla każdego regionu. Musimy użyć funkcji Aggr(), aby powiedzieć Qlik Sense, że chcemy uzyskać średnią wartość zamówienia dla każdego regionu, na kierownika, a następnie wyświetlić największą z nich. Aby uzyskać średnią wartość zamówienia dla każdego regionu, na kierownika, będziemy musieli uwzględnić te wymiary w naszej instrukcji Aggr():

Aggr(Sum(Sales)/Count([Order Number]), Region, Manager)

Wyrażenie to powoduje, że Qlik Sense tworzy wirtualną tabelę, która wygląda w ten sposób:

Wirtualna tabela funkcji Aggr() pokazująca średnią wartość zamówienia dla każdego regionu, na kierownika.

![Tabela z funkcją AGGR pokazująca średnią wartość zamówienia dla każdego regionu, na kierownika.](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-aggr-table2.png)

Kiedy Qlik Sense obliczy indywidualne średnie wartości zamówień dla każdego regionu, na kierownika, będziemy musieli znaleźć największą z tych wartości. W tym celu okalamy funkcję Aggr() opcją Max():

Max(Aggr(Sum(Sales)/Count([Order Number]), Manager, Region))

Wykonaj następujące czynności:

1. Kliknij przycisk Dodaj kolumnę i wybierz Miara.
2. Kliknij symbol the Wyrażenie icon.  
   Otwiera się edytor wyrażeń.
3. Wprowadź: Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
4. Kliknij przycisk Zastosuj.

Tabela przedstawiająca region, średnią wartość zamówienia i największą średnią wartość zamówienia dla każdego regionu, na kierownika.

![Tabela przedstawiająca region, średnią wartość zamówienia i największą średnią wartość zamówienia dla każdego regionu, na kierownika.](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-aggr-table3.png)

Można zobaczyć największą średnią wartość zamówienia dla wszystkich kierowników na poziomie regionu. To jest pierwsze z naszych dwóch złożonych wyrażeń! Następnym wymaganiem jest, aby nazwisko kierownika odpowiedzialnego za te duże średnie wartości zamówień było wyświetlane obok samych wartości.

W tym celu użyjemy tej samej funkcji Aggr(), co poprzednio, ale tym razem wraz z funkcją FirstSortedValue(). Funkcja FirstSortedValue() mówi Qlik Sense, aby dostarczył nam kierownika dla konkretnego wymiaru określonego w drugiej części funkcji:

FirstSortedValue(Manager,-Aggr(Sum(Sales)/Count(Order Number), Manager, Region))

WskazówkaJest jedna mała, ale bardzo ważna część wyrażenia: przed wyrażeniem Aggr() znajduje się znak minus. W funkcji FirstSortedValue() można określić kolejność sortowania tablicy danych. W tym przypadku znak minus mówi Qlik Sense, aby sortować od największego do najmniejszego.

Wykonaj następujące czynności:

1. Kliknij przycisk Dodaj kolumnę i wybierz Miara.
2. Kliknij symbol the Wyrażenie icon.  
   Otwiera się edytor wyrażeń.
3. Wprowadź: FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
4. Kliknij przycisk Zastosuj.

Tabela przedstawiająca region, średnią wartość zamówienia, największą średnią wartość zamówienia dla każdego regionu oraz kierownika odpowiedzialnego za tę wartość zamówienia.

![Tabela przedstawiająca region, średnią wartość zamówienia, największą średnią wartość zamówienia dla każdego regionu oraz kierownika odpowiedzialnego za tę wartość zamówienia.](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-aggr-table.png)

Więcej informacji, patrz [Aggr](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/aggr.htm)

Więcej informacji, patrz [FirstSortedValue](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/BasicAggregationFunctions/firstsortedvalue.htm)