Przeskocz do zawartości głównej

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.

Porada: Funkcji 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 3.
    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.

Table showing average order value per region.

Porada: Dla 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.

table with AGGR function showing average order value for each region, per manager.

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 3.
    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.

Table showing region, average order value, and largest average order value for each region, per manager.

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))

Porada: Jest 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 Expression Symbol
    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.

Table showing region, average order value, largest average order value for each region, and manager responsible for that order value.

Więcej informacji, patrz Aggr

Więcej informacji, patrz FirstSortedValue