Funkcje agregacji
Rodzina funkcji określanych jako funkcje agregacji składa się z funkcji pobierających wiele wartości pola jako dane wejściowe i zwracających jeden wynik na grupę. Grupowanie jest natomiast definiowane przez wymiar wykresu lub klauzulę group by w instrukcji skryptu.
Do funkcji agregacji należą: Sum(), Count(), Min(), Max() i wiele innych.
Większości funkcji agregacji można używać zarówno w skrypcie ładowania danych, jak i w wyrażeniach wykresu, ale różnią się one składnią.
Ograniczenia:
Parametr funkcji agregacji nie może zawierać innych funkcji agregacji, chyba że takie wewnętrzne agregacje zawierają kwalifikator TOTAL. W przypadku bardziej zaawansowanych agregacji zagnieżdżonych należy stosować zaawansowaną funkcję w Aggrpołączeniu z określonym wymiarem.
Podczas nazywania elementu unikaj nadawania tej samej nazwy więcej niż jednemu polu, zmiennej lub mierze. Podczas rozwiązywania konfliktów między obiektami o identycznych nazwach istnieje ścisła kolejność. Kolejność ta jest odzwierciedlana we wszystkich obiektach lub kontekstach, w których są używane te elementy. Kolejność jest następująca:
-
Wewnątrz agregacji pole ma pierwszeństwo przed zmienną. Etykiety miar nie są istotne w agregacjach i nie mają priorytetu.
-
Poza agregacją etykieta miary ma pierwszeństwo przed zmienną, która z kolei ma pierwszeństwo przed polem.
-
Dodatkowo, poza agregacją, miary można użyć ponownie przez odwołanie się do jej etykiety, chyba że etykieta jest w rzeczywistości obliczana. W takiej sytuacji miara traci na znaczeniu w celu zmniejszenia ryzyka odwoływania się do samego siebie i wtedy nazwa zawsze będzie interpretowana po pierwsze jako etykieta miary, po drugie jako nazwa pola, a po trzecie jako nazwa zmiennej.
Używanie funkcji agregacji w skrypcie ładowania danych
Funkcji agregacji można używać tylko w instrukcjach LOAD i SELECT.
Używanie funkcji agregacji w wyrażeniach wykresu
Parametr funkcji agregacji nie może zawierać innych funkcji agregacji, chyba że takie wewnętrzne agregacje zawierają kwalifikator TOTAL. W przypadku bardziej zaawansowanych agregacji zagnieżdżonych należy stosować zaawansowaną funkcję w Aggrpołączeniu z określonym wymiarem.
Funkcja agregacji wykonuje agregacje na zestawie możliwych rekordów zdefiniowanym przez selekcję. Można jednak zdefiniować alternatywny zestaw rekordów za pomocą wyrażenia zestawu w analizie zestawów.
Zob.: Analiza zestawów
Jak obliczane są agregacje
Funkcja agregacji agreguje w pętli rekordy określonej tabeli. Na przykład Count(<Field>) spowoduje policzenie rekordów w tabeli, w których znajduje się <Field>. Jeśli chcesz zagregować tylko odrębne wartości pól, musisz użyć klauzuli distinct, na przykład Count(distinct <Field>).
Jeśli funkcja agregacji będzie zawierać pola z różnych tabel, będzie przetwarzać w pętli rekordy iloczynu wektorowego tabel pól składowych. Ma to negatywny wpływ na wydajność i z tego powodu należy unikać takich agregacji, szczególnie w przypadku dużych ilości danych.
Agregacja pól kluczowych
Sposób obliczania agregacji oznacza, że nie można agregować pól kluczowych, ponieważ nie jest jasne, która tabela ma być używana do agregacji. Na przykład, jeśli pole <Key> łączy dwie tabele, nie jest jasne, czy Count(<Key>) ma zwrócić liczbę rekordów z pierwszej czy drugiej tabeli.
Jeśli jednak użyjesz klauzuli distinct, agregacja będzie dobrze zdefiniowana i można ją będzie obliczyć dla pola klucza połączonego między dwiema tabelami.
Jeżeli użyjesz pola klucza wewnątrz funkcji agregacji bez klauzuli distinct, Qlik Sense zwróci liczbę, która może być bez znaczenia. Rozwiązaniem jest użycie klauzuli distinct lub kopii klucza znajdującej się tylko w jednej tabeli.
Na przykład w poniższych tabelach ProductId jest kluczem między tabelami.
Count(ProductId) można liczyć w tabeli Products (która zawiera po jednym rekordzie na produkt — ProductId jest kluczem podstawowym) lub w tabeli Details (która najprawdopodobniej ma po kilka rekordów na produkt). Jeśli chcesz policzyć liczbę odrębnych produktów, użyj Count(distinct ProductId). Jeśli chcesz policzyć liczbę wierszy w określonej tabeli, nie używaj tego klucza.
Agregacje pól kluczy zawartych w trzech lub większej liczbie tabel
Przedrostek distinct działa tylko z polami kluczy łączącymi maksymalnie dwie tabele. W przypadku grupowania agregacji na polu klucza istniejącym w trzech lub większej liczbie tabel wszelkie operacje wymagające informacji dotyczących częstotliwości dla pola zwrócą NULL. W przypadku, gdy pole klucza łączy trzy lub więcej tabel, należy użyć kopii pola bez klucza.