Agregacja i downsampling
Domyślnie widżet otrzymuje surowe wiersze: każdy rekord pasujący do jego filtrów, od najnowszego, aż do limitu wierszy. Jest to dokładnie to, czego potrzeba w tabeli z najnowszymi odczytami, i dokładnie to, czego nie potrzeba na wykresie ostatnich sześciu miesięcy — czujnik próbkujący co sekundę wytwarza w takim oknie 15 milionów wierszy, z których wykres o szerokości 600 pikseli narysuje może 600.
Agregacja rozwiązuje oba problemy naraz. Baza danych projektu grupuje pasujące rekordy w przedziały czasowe, oblicza jedną wartość na przedział i przesyła do widżetu wyłącznie te wartości. Rok danych staje się kilkuset punktami, a pytania, na które surowe dane nie odpowiadają — średnia temperatura na godzinę, rekordy na maszynę, łączna energia dzisiaj — stają się zwykłą konfiguracją widżetu.
Wszystko dzieje się w bazie danych, zanim dane dotrą do przeglądarki. W widżecie nic nie jest obliczane, więc zagregowane widżety pozostają na żywo i pozostają szybkie niezależnie od tego, jak wiele historii za nimi stoi.
Włączanie agregacji
Agregacja znajduje się w tym samym oknie dialogowym co filtry — tym, które otwiera ikona filtra obok powiązania danych. Całe okno opisuje strona Powiązanie danych.
Wewnątrz sekcja Agregacja daje dwie możliwości:
- Surowe wiersze — ustawienie domyślne: rekordy są zwracane w takiej postaci, w jakiej są zapisane.
- Agregowane w czasie — rekordy są grupowane i redukowane do jednej wartości na grupę.
Przełączenie na Agregowane w czasie odsłania selektor Metoda, a tam, gdzie ma to zastosowanie, opisane niżej kontrolki rozmiaru przedziału. Ponieważ każda agregacja potrzebuje zakresu czasu, na którym pracuje, jej włączenie uzupełnia także domyślne ruchome okno ostatnich 24 godzin, jeśli widżet nie miał jeszcze okna czasowego — dostosujesz je w sekcji Ruchome okno czasowe bezpośrednio powyżej.
Metody
| Metoda | Wynik na przedział | Działa na |
|---|---|---|
| Średnia | Średnia arytmetyczna wartości | Kolumny liczbowe |
| Suma | Suma wartości | Kolumny liczbowe |
| Liczba | Liczba rekordów posiadających wartość | Dowolna kolumna |
| Minimum | Najmniejsza wartość | Kolumny liczbowe, tekstowe i ze znacznikiem czasu |
| Maksimum | Największa wartość | Dowolna z powyższych |
| Pierwsza wartość | Wartość najstarszego rekordu w przedziale | Dowolna kolumna |
| Ostatnia wartość | Wartość najnowszego rekordu w przedziale | Dowolna kolumna |
Jedna metoda obowiązuje dla wszystkich kolumn wartości w obrębie jednej serii danych. Aby pokazać kilka statystyk tego samego pomiaru — na przykład pasmo minimum/maksimum z linią średniej — dodaj po jednej serii danych na statystykę. Współdzielą one jedno zapytanie do bazy danych, więc dodatkowe serie nic nie kosztują pod względem liczby żądań.
Średnia, Suma, Minimum i Maksimum wymagają kolumny zawierającej liczby. Wskazanie im kolumny tekstowej lub logicznej kończy się odrzuceniem wraz z komunikatem wyjaśniającym. Liczba działa na wszystkim, co czyni ją metodą do pytań w rodzaju „ile rekordów”.
Co podlega agregacji
Nigdy nie wypisujesz kolumn do agregacji wprost — platforma wyprowadza je z mapowania pól, które i tak skonfigurowałeś dla widżetu:
| Rola pola | Znaczenie przy agregacji |
|---|---|
x = tsp | Wykres ma oś czasu: przedziały dzielą okno czasowe. |
| x = dowolna inna kolumna | Wykres ma oś kategorii: ta kolumna grupuje rekordy. |
| pivot | Dzieli wynik na jedną serię na każdą odrębną wartość, agregowaną osobno. |
| y, r i pozostałe pola wartości | Agregowane wybraną metodą. |
Oznacza to, że to samo mapowanie, którego używasz dla surowych wierszy, działa nadal: zmapuj x na znacznik czasu, a y na temperature, włącz agregację, a wykres narysuje średnią temperaturę na przedział zamiast każdego pojedynczego odczytu.
Trzy postacie zagregowanego widżetu
1. Szereg czasowy z automatyczną rozdzielczością
Najczęstszy przypadek: x jest zmapowane na tsp, a tryb przedziału pozostaje na Automatycznie — dopasowane do rozdzielczości widżetu. Platforma dobiera wtedy rozmiar przedziału na podstawie wyrenderowanej szerokości widżetu — wykres o szerokości 600 pikseli nigdy nie otrzyma więcej niż około 600 punktów, niezależnie od okna czasowego. Rozszerz okno z doby do roku, a przedziały po prostu staną się szersze; ilość danych przesyłanych przez sieć pozostanie taka sama.
Wybierz to ustawienie, gdy sam rozmiar przedziału nie niesie znaczenia, a zależy Ci wyłącznie na czytelnym i szybkim wykresie trendu: „temperatura w ostatnim miesiącu”.
Zmiana rozmiaru widżetu powoduje ponowne pobranie danych w nowej rozdzielczości, ale tylko wtedy, gdy szerokość przekroczy kolejny próg — drobne przeciągnięcia nie wywołują żądań.
2. Szereg czasowy ze stałym rozmiarem przedziału
Wybierz Stały rozmiar przedziału i podaj długość oraz jednostkę — co 1 godzinę, co 15 minut, co 6 godzin. Użyj tego zawsze, gdy interwał jest częścią pytania, a nie szczegółem prezentacji: „sztuki wyprodukowane na godzinę”, „energia zużyta na dobę”.
Stałe przedziały są wyrównane do naturalnych granic w strefie czasowej Twojej przeglądarki: przedziały sześciogodzinne zaczynają się o 00:00, 06:00, 12:00 i 18:00 czasu lokalnego; dobowe łamią się o lokalnej północy; tygodniowe zaczynają się w poniedziałek.
Jeśli wybrany rozmiar dałby więcej przedziałów, niż wykres jest w stanie sensownie pokazać (limit wynosi 2000), platforma automatycznie poszerza przedziały do wielokrotności tego, o co poprosiłeś — przedziały jednominutowe dla pełnego tygodnia stają się pięciominutowe — zamiast odrzucać zapytanie. Okno dialogowe informuje, kiedy tak się dzieje i jaki rozmiar jest faktycznie używany.
3. Jedna wartość na kategorię
Zmapuj x na kolumnę zamiast na znacznik czasu — nazwę maszyny, typ produktu, zakład — a widżet stanie się podsumowaniem kategorii: całe okno czasowe jest traktowane jako jeden przedział, a każda odrębna wartość tej kolumny daje dokładnie jeden zagregowany wiersz.
To postać dla „rekordów na maszynę dzisiaj” albo „średniego czasu cyklu na linię produkcyjną w tym tygodniu”. Nie ma tu rozmiaru przedziału do wyboru — okno dialogowe informuje o tym zamiast pokazywać kontrolki interwału.
Zliczanie rekordów: liczba wierszy w grupie to metoda Liczba zastosowana do kolumny znacznika czasu tsp, ponieważ ma ją każdy rekord. Zmapuj y na tsp, a platforma wybierze Liczba automatycznie — to jedyna agregacja, na jaką pozwala kolumna znacznika czasu.
x → machine_name (grupuje rekordy)
y → tsp (zliczane → liczba rekordów)
Metoda: Liczba
Okno: ostatni 1 dzieńW efekcie powstaje jeden słupek na maszynę, pokazujący, ile rekordów wytworzyła ona w ciągu ostatniej doby.
Zagregowane pojedyncze wartości
Powiązania skalarne — wartość kafelka KPI, wskaźnika, pola tekstowego — dają ten sam wybór w sekcji Wartość:
- Najnowsza wartość — wartość najnowszego rekordu, tak jak dotychczas.
- Agregowane w oknie czasowym — jedna wartość obliczona dla całego okna.
Używaj tego do najważniejszych liczb na żywo: „sztuki wyprodukowane dzisiaj” (Liczba na tsp z oknem 1 dnia), „średnia temperatura na tej zmianie”, „szczytowa moc w tym miesiącu”. Tutaj również nie ma rozmiaru przedziału — przedziałem jest samo okno. Wartość odświeża się wraz z napływem nowych rekordów, więc w przeciwieństwie do liczby wpisanej do widżetu na sztywno nigdy się nie dezaktualizuje.
Filtry, okna i agregacja razem
Sekcje okna dialogowego działają w kolejności, w jakiej są wyświetlane — a jest to również kolejność, w jakiej stosuje je baza danych:
- Ruchome okno czasowe / niestandardowy zakres czasu — wybiera okres.
- Filtry — decydują, które rekordy z tego okresu biorą udział.
- Agregacja — redukuje wybrane rekordy do jednej wartości na przedział.
- Limit wierszy — zabezpieczenie awaryjne, zobacz niżej.
Ponieważ filtry działają przed agregacją, zawężają to, co trafia do każdego przedziału. machine = 'A' w połączeniu ze średnimi godzinowymi daje średnią godzinową dla maszyny A. Filtry powiązane z widżetami filtra lub segmentami routingu działają dokładnie tak samo jak przy surowych wierszach, więc zagregowany wykres podąża za listą rozwijaną albo za adresem URL strony jak każdy inny widżet.
Widżety kalendarza również się z tym komponują: gdy użytkownik wybierze zakres dat, zastępuje on ruchome okno, a agregacja podąża za nim.
Zatrzaskiwanie okna
Gdy agregacja jest aktywna, początek okna jest zatrzaskiwany na siatkę przedziałów, aby same przedziały nie przesuwały się z upływem czasu — bez tego każde odświeżenie nieznacznie przesuwałoby wszystkie granice przedziałów i cały wykres by drgał. Okno dialogowe sygnalizuje to komunikatem „Okno przesuwa się w krokach …”, a podgląd wyznaczonego początku i końca zawsze pokazuje zakres faktycznie odpytywany.
Koniec okna nigdy nie jest przedłużany: okno kończące się teraz nadal kończy się teraz, a okno kończące się godzinę temu nigdy nie sięgnie do tej ostatniej godziny.
Limit wierszy przy agregacji
Limit wierszy pozostaje widoczny, ale zmienia rolę: liczba przedziałów wynika z rozmiaru widżetu albo z wybranego przez Ciebie stałego interwału, a nie z tego pola. Działa on tylko wtedy, gdy widżet musi wrócić do surowych wierszy — na przykład na instancji self-hosted, której wersja platformy jest starsza niż agregacja. Pozostawienie w nim rozsądnej wartości utrzymuje taki widżet w użyteczności.
Luki w danych
Przedział, w którym nie pasował żaden rekord, jest pomijany w wyniku, a nie zwracany jako zero. Dla średniej jest to uczciwa odpowiedź — nie ma średniej z niczego — ale dla wykresu Liczby zdarzenia występującego z przerwami oznacza to, że wykres liniowy narysuje prostą linię przez okres ciszy, zamiast spaść do zera. Wykresy słupkowe pokazują lukę w naturalny sposób; przy wykresach liniowych miej świadomość różnicy między „brakiem danych” a „zerem”.
Aktualizacje na żywo
Zagregowane widżety pozostają na żywo. Wraz z napływem rekordów przeliczane są przedziały, których to dotyczy, i widżet się odświeża — najwyżej raz na kilka sekund, więc urządzenie publikujące z dużą częstotliwością nie zaleje panelu. Ponieważ najnowszy przedział zwykle wciąż się wypełnia, jego wartość zmienia się aż do jego zamknięcia; jest to oczekiwane i właśnie dlatego ostatni punkt wykresu na żywo bywa niższy od sąsiednich dla metod Liczba i Suma.
Wydajność i długie historie
Agregacja w długim oknie i tak musi odczytać stojące za nią rekordy. Dla tabel, które regularnie zasilają wykresy z długimi oknami, aplikacja może zadeklarować w swoim schemacie danych ciągły downsampling — zobacz downsample w dokumentacji backendu danych. Platforma utrzymuje wtedy wstępnie zagregowaną kopię tabeli i odpowiada z niej na zapytania z długim oknem, zwykle o rzędy wielkości szybciej, a tę historię po downsamplingu może przechowywać dłużej niż same surowe dane — dzięki czemu wykres pokaże dwa lata średnich godzinowych jeszcze długo po usunięciu surowych rekordów.
Jest to całkowicie przezroczyste dla panelu: konfiguracja widżetu się nie zmienia, a zapytania, których wstępnie zagregowana kopia nie jest w stanie obsłużyć (bardzo drobne interwały, filtry na kolumnach, według których nie grupuje), automatycznie wracają do tabeli surowych danych.
Ograniczenia
- Agregacja dotyczy tabel, a nie tabel transformacyjnych. Zamiast tego agreguj tabelę źródłową albo wykonaj wstępną agregację w SQL samej transformacji.
- Jedna metoda na serię danych. Dla kilku statystyk jednej kolumny użyj kilku serii danych.
- Znaczniki czasu agreguje wyłącznie metoda Liczba.
Średniaze znacznika czasu nie ma sensu i jest odrzucana. - Oś kategorii i oś czasu wzajemnie się wykluczają w obrębie jednej serii danych — wykres jest albo „w czasie”, albo „na kategorię”. Aby uzyskać oba naraz (średnie godzinowe na maszynę), pozostaw
xnatsp, a kolumnę maszyny umieść w polu pivot. - Pola JSON można agregować jak zwykłe kolumny, ale ze wstępnie zagregowanej kopii korzystają tylko te pola, które aplikacja zadeklarowała do downsamplingu; pozostałe są obliczane z tabeli surowych danych.
Przepisy
| Czego potrzebujesz | x | y | Metoda | Interwał |
|---|---|---|---|---|
| Trend temperatury w ciągu miesiąca | tsp | temperature | Średnia | Automatyczny |
| Sztuki wyprodukowane na godzinę | tsp | tsp | Liczba | Stały, 1 godzina |
| Energia zużyta na dobę | tsp | kwh | Suma | Stały, 1 dzień |
| Szczytowa moc na godzinę, na maszynę | tsp | power (+ pivot machine) | Maksimum | Stały, 1 godzina |
| Rekordy na maszynę dzisiaj | machine | tsp | Liczba | — (kategoria) |
| Średni czas cyklu na linię w tym tygodniu | line | cycle_time | Średnia | — (kategoria) |
| Sztuki wyprodukowane dzisiaj (kafelek KPI) | — | tsp | Liczba | — (pojedyncza wartość) |
Podsumowanie
- Przełącz powiązanie z Surowe wiersze na Agregowane w czasie w oknie dialogowym filtra, aby baza danych obliczała wartości zamiast przesyłać rekordy.
- Gdy
xjest na znaczniku czasu, otrzymujesz szereg czasowy — automatyczną rozdzielczość dla trendów, stały interwał wtedy, gdy to interwał jest pytaniem. - Gdy
xjest na innej kolumnie, otrzymujesz jedną wartość na kategorię; przy powiązaniu skalarnym — jedną liczbę na żywo. - Liczba na kolumnie
tspto sposób na zliczanie rekordów. - Filtry działają przed agregacją; puste przedziały są pomijane; limit wierszy staje się zabezpieczeniem awaryjnym.
- Przy długich historiach aplikacje mogą zadeklarować
downsample, dzięki czemu platforma zasila wykresy ze wstępnie zagregowanej kopii i może przechowywać tę historię dłużej, niż wynosi retencja surowych danych.