Poniższa tabela zawiera pełną listę typów danych z kilkoma kolumnami, które pomogą Ci zrozumieć, jak każdy typ jest reprezentowany w interfejsie Google Health API, oraz zakres, w którym jest dostępny.
Pola typu danych
Tabela typów danych interfejsu Google Health API zawiera kilka kolumn, które pomogą Ci zrozumieć reprezentację i wymagania poszczególnych typów danych. Te kolumny to:
| Pole | Opis |
|---|---|
dataType |
Identyfikator rozdzielony łącznikami (np. active-minutes) używany w adresach URL punktów końcowych. |
Parametr filter |
Identyfikator oddzielony podkreśleniami (np. active_minutes) używany jako wartość parametru filtra dataType w żądaniach dziennego zestawienia i zestawienia. |
| Typ rekordu | Wskazuje strukturę i format zarejestrowanych danych. Wewnętrznie odpowiada to reprezentacji zasobów punktów danych. Możliwe wartości to:
|
| Dostępne operacje | Zawiera listę metod interfejsu API obsługiwanych w przypadku danego typu danych (np. list, create i rollUp). |
| Zakres | Zakresy protokołu OAuth wymagane do uzyskania dostępu do typu danych. |
| Obsługa webhooków | Wskazuje, że typ danych obsługuje powiadomienia w czasie rzeczywistym za pomocą webhooków, gdy synchronizowane są nowe dane. |
| Obsługa prawdziwych zer | Wskazuje, że typ danych obsługuje rejestrowanie wartości 0, aby odróżnić aktywną wartość 0 (np. 0 aktywnych minut) od brakujących lub niezarejestrowanych danych. |
| Rozdzielczość przechowywania | Minimalny interwał nagrywania lub próbkowania, w którym są przechowywane punkty danych (np. 1 minuta w przypadku steps). W przypadku zestawień reprezentuje to minimalną zalecaną wartość windowSize, która zapewnia równomiernie rozłożoną agregację bez artefaktów danych w podinterwałach. |
| Zgodne urządzenia | Rozwijana lista urządzeń fizycznych, które mogą rejestrować i synchronizować ten typ danych z interfejsem Google Health API (za pomocą aplikacji Fitbit). |
| Typ danych | Dostępne operacje |
Zakres |
|---|---|---|
|
Aktywny wydatek energetyczny
dataType:
active-energy-burnedfilter parameter: active_energy_burned
Typ rekordu: Interwał
Rozdzielczość pamięci masowej: 1 minuta
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Aktywne minuty
dataType:
active-minutesfilter parameter: active_minutes
Typ rekordu: Interwał
Rozdzielczość pamięci masowej: 1 minuta
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Aktywne minuty w strefie
dataType:
active-zone-minutesfilter parameter: active_zone_minutes
Typ rekordu: Interwał
Rozdzielczość pamięci masowej: 1 minuta
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Poziom aktywności
|
lista, uzgadnianie | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Altitude
dataType:
altitudefilter parameter: altitude
Typ rekordu: Interwał
Rozdzielczość pamięci masowej: 1 minuta
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Glukoza we krwi
dataType:
blood-glucosefilter parameter: blood_glucose
Typ rekordu: Sample
|
list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Tkanka tłuszczowa
dataType:
body-fatfilter parameter: body_fat
Typ rekordu: Sample
Zgodne urządzenia
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Kalorie w strefie tętna
dataType:
calories-in-heart-rate-zonefilter parameter: calories_in_heart_rate_zone
Typ rekordu: Interwał
Rozdzielczość pamięci masowej: 1 minuta
|
rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Temperatura wewnętrzna ciała
dataType:
core-body-temperaturefilter parameter: core_body_temperature
Typ rekordu: Sample
|
list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Dzienna zmienność rytmu serca
dataType:
daily-heart-rate-variabilityfilter parameter: daily_heart_rate_variability
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Dzienne strefy tętna
dataType:
daily-heart-rate-zonesfilter parameter: daily_heart_rate_zones
Typ rekordu: dzienny
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Dzienne nasycenie tlenem
dataType:
daily-oxygen-saturationfilter parameter: daily_oxygen_saturation
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Dzienna częstość oddychania
dataType:
daily-respiratory-ratefilter parameter: daily_respiratory_rate
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Dzienne tętno spoczynkowe
dataType:
daily-resting-heart-ratefilter parameter: daily_resting_heart_rate
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Odchylenia temperatury podczas snu w ciągu dnia
dataType:
daily-sleep-temperature-derivationsfilter parameter: daily_sleep_temperature_derivations
Typ rekordu: dzienny
Obsługa webhooków
Przewodnik po funkcjach związanych ze zdrowiem
Przewodnik po funkcjach związanych ze snem
Przewodnik po funkcjach związanych z temperaturą skóry
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Dzienny pułap tlenowy
dataType:
daily-vo2-maxfilter parameter: daily_vo2_max
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Dystans
dataType:
distancefilter parameter: distance
Typ rekordu: Interwał
Rozdzielczość pamięci masowej: 1 minuta
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Elektrokardiogram (EKG)
dataType:
electrocardiogramfilter parameter: electrocardiogram
Typ rekordu: sesja
Zgodne urządzenia
|
lista | .ecg.readonly |
|
Ćwiczenia
dataType:
exercisefilter parameter: exercise
Typ rekordu: sesja
Zgodne urządzenia
|
list, get, reconcile, create, update, batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Piętra
dataType:
floorsfilter parameter: floors
Typ rekordu: Interwał
Rozdzielczość pamięci masowej: 1 minuta
|
reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Jedzenie
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Jednostka miary jedzenia
dataType:
food-measurement-unitfilter parameter: food_measurement_unit
Typ rekordu: jedzenie
Zgodne urządzenia
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Tętno
dataType:
heart-ratefilter parameter: heart_rate
Typ rekordu: Sample
Rozdzielczość pamięci: 1 sekunda
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Zmienność rytmu serca
dataType:
heart-rate-variabilityfilter parameter: heart_rate_variability
Typ rekordu: Przykładowy
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Wysokość
|
list, get, reconcile, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Zapis nawodnienia
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
|
Powiadomienie o nieregularnym rytmie serca
dataType:
irregular-rhythm-notificationfilter parameter: irregular_rhythm_notification
Typ rekordu: sesja
|
lista | .irn.readonly |
|
Miesiączka
dataType:
menstrual-periodfilter parameter: menstrual_period
Typ rekordu: Interwał
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Nastroje
|
create, update, batchDelete | .mindfulness.writeonly |
|
Dziennik odżywiania
dataType:
nutrition-logfilter parameter: nutrition_log
Typ rekordu: sesja
Zgodne urządzenia
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
|
Test owulacyjny
dataType:
ovulation-testfilter parameter: ovulation_test
Typ rekordu: Sample
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Nasycenie tlenem
dataType:
oxygen-saturationfilter parameter: oxygen_saturation
Typ rekordu: Sample
Rozdzielczość pamięci masowej: 1 minuta
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Podsumowanie dotyczące częstości oddechów podczas snu
dataType:
respiratory-rate-sleep-summaryfilter parameter: respiratory_rate_sleep_summary
Typ rekordu: Sample
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Pułap tlenowy podczas biegu
dataType:
run-vo2-maxfilter parameter: run_vo2_max
Typ rekordu: Sample
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Okres braku aktywności
dataType:
sedentary-periodfilter parameter: sedentary_period
Typ rekordu: Interwał
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Czujniki temperatury skóry
v4beta
dataType:
skin-temperature-sensorsfilter parameter: skin_temperature_sensors
Typ rekordu: Sample
Zgodne urządzenia |
lista | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Sen
dataType:
sleepfilter parameter: sleep
Typ rekordu: sesja
Zgodne urządzenia
|
list, get, reconcile, create, update, batchDelete | .sleep.readonly.sleep.writeonly |
|
Kroki
dataType:
stepsfilter parameter: steps
Typ rekordu: Interwał
Rozdzielczość pamięci masowej: 1 minuta
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Dane dotyczące długości pływania
dataType:
swim-lengths-datafilter parameter: swim_lengths_data
Typ rekordu: Interwał
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Objawy
|
create, update, batchDelete | .logged_symptoms.writeonly |
|
Czas w strefie tętna
dataType:
time-in-heart-rate-zonefilter parameter: time_in_heart_rate_zone
Typ rekordu: Interwał
Rozdzielczość pamięci masowej: 1 minuta
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Wszystkie kalorie
dataType:
total-caloriesfilter parameter: total_calories
Typ rekordu: Interwał
Rozdzielczość pamięci masowej: 1 minuta
Zgodne urządzenia
|
rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Pułap tlenowy
dataType:
vo2-maxfilter parameter: vo2_max
Typ rekordu: Sample
Zgodne urządzenia
|
lista, uzgadnianie | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Waga
dataType:
weightfilter parameter: weight
Typ rekordu: Przykładowy
Zgodne urządzenia
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Ograniczenia zapytań
Podczas wysyłania zapytań o punkty danych, podsumowania lub podsumowania dzienne z interfejsu API pamiętaj o tych ograniczeniach:
- Wymagania dotyczące filtrów: niektóre pochodne typy danych tylko do odczytu, takie jak
total-calories, wymagają filtra określającego czas rozpoczęcia interwału (z użyciem czasu fizycznego lub cywilnego). - Limity zakresu zapytań: punkty końcowe agregacji zbiorczej i dziennej zbiorczej wymuszają maksymalne limity zakresu zapytań na podstawie typu danych:
- Maksymalny zakres zapytania wynosi 14 dni w przypadku
calories-in-heart-rate-zone,heart-rate,active-minutesitotal-calories. - Maksymalny zakres zapytania wynosi 90 dni w przypadku wszystkich innych typów danych.
- Maksymalny zakres zapytania wynosi 14 dni w przypadku
- Rozmiar okna zbiorczego: podczas wywoływania punktu końcowego
rollUpczas trwaniawindowSizemusi wynosić co najmniej 1 sekundę ("1s"). Czas trwania krótszy niż sekunda jest odrzucany z błędemINVALID_ARGUMENT. Dodatkowo wybierzwindowSizerówny lub większy niż podstawowa rozdzielczość pamięci masowej typu danych (np."60s"dla typów danych z interwałem 1-minutowym, takich jakstepsidistance), aby uniknąć nierównomiernego rozkładu w podinterwałach. Więcej informacji znajdziesz w sekcji Okno zestawienia i rozdzielczość miejsca na dane.
Typy danych dziennych i interwałowych
W przypadku niektórych danych fizjologicznych, takich jak zmienność rytmu serca (HRV) czy nasycenie tlenem (SpO2), interfejs Google Health API udostępnia 2 różne typy danych: wersję Daily (dzienną) i wersję Interval (interwałową). Zrozumienie tej różnicy jest kluczowe dla wyboru odpowiednich danych w konkretnym przypadku użycia:
Codziennie: pojedyncze, wstępnie zagregowane podsumowanie z całego dnia. Używaj tej opcji w przypadku trendów ogólnych i paneli dziennych, aby zaoszczędzić na przetwarzaniu.
Interwał: szczegółowe pomiary w wysokiej rozdzielczości wykonywane przez cały dzień. Używaj go do tworzenia wykresów wahań w ciągu dnia lub do przeprowadzania szczegółowej analizy godzinowej.
Dostępność danych
Aktualizacje danych użytkownika są dostępne dopiero po zsynchronizowaniu przez niego monitora aktywności lub ręcznym wprowadzeniu nowych danych w aplikacji Google Health. Fitbit i aplikacja Google Health mogą synchronizować się automatycznie co 15 minut, gdy aplikacja Google Health jest otwarta na urządzeniu mobilnym, a oba urządzenia mają aktywne połączenie do transmisji danych i znajdują się w zasięgu Bluetootha. Jeśli użytkownik śledzi aktywność za pomocą MobileTrack, MobileTrack synchronizuje się co godzinę, o ile aplikacja jest otwarta.
Wysyłam zapytanie o dane historyczne
Jedną z głównych zalet interfejsu Google Health API jest możliwość śledzenia wyników użytkownika i monitorowania jego parametrów życiowych przez dłuższy czas. Możesz wysyłać zapytania o dane użytkownika od momentu, gdy zaczęły być rejestrowane. Interfejs API nie nakłada żadnych ograniczeń na ilość danych historycznych, które może wykorzystać Twoja aplikacja.
Jednak wykonywanie zapytań dotyczących danych historycznych nadal podlega standardowym limitom liczby żądań. Aby zarządzać stabilnością systemu i zapobiegać nadmiernemu obciążeniu, interfejs Google Health API używa automatycznego podziału na strony z rozmiarami stron dostosowanymi do konkretnych punktów końcowych. Pamiętaj o tych ograniczeniach i zachowaniach:
- Automatyczny podział na strony: jeśli zapytanie dotyczy długiego okresu, interfejs API zwróci tylko pierwszą stronę wyników do limitu rozmiaru strony dla tego punktu końcowego wraz z parametrem
nextPageToken. Aby poprosić o kolejne strony, musisz użyćnextPageToken. - Zmienne rozmiary stron: limity zależą od punktu końcowego i typu danych. W przypadku większości typów danych rozmiary stron są ograniczone do maksymalnie 10 000.
Jednak w przypadku niektórych typów danych, takich jak
exerciseisleep, domyślny i maksymalny rozmiar strony jest ograniczony do 25. Jeśli na przykład klient poprosi o wszystkie dane o śnie z ostatnich 10 lat, interfejs API nadal zwróci tylko 25 sesji snu na pierwszej stronie. - Ograniczenia zakresu dat zbiorczych: w przypadku punktów końcowych zbiorczych i zagregowanych danych (takich jak
rollUpidailyRollUp) zakresy dat zapytań są ograniczone na podstawie typu danych:- Maksymalny zakres to 14 dni w przypadku
calories-in-heart-rate-zone,heart-rate,active-minutesitotal-calories. - Maksymalny zakres 90 dni w przypadku wszystkich innych typów danych zbiorczych.
- Maksymalny zakres to 14 dni w przypadku
W zależności od ilości danych historycznych, których potrzebuje Twoja aplikacja, pobranie całego zbioru danych będzie wymagało sekwencyjnego przeglądania stron. Pamiętaj o tym podczas projektowania procesu synchronizacji danych w aplikacji.
Aby zapewnić optymalną wydajność i uniknąć błędów interfejsu API, podczas wysyłania zapytań o dane historyczne postępuj zgodnie z tymi wskazówkami:
Synchronizacja danych etapami (wczytywanie „na gorąco” i „na zimno”)
- Początkowe „gorące” wczytywanie: podczas głównej sekwencji wczytywania pobieraj i renderuj tylko dane z ostatnich 7–14 dni. Dzięki temu użytkownicy od razu widzą dane i nie muszą czekać na zakończenie długotrwałych zapytań.
- Wczytywanie „na zimno” w tle: po wyrenderowaniu głównego interfejsu użytkownika przekieruj pobieranie starszych danych historycznych do asynchronicznej kolejki o niższym priorytecie lub do procesu w tle.
Dzielenie zapytań na fragmenty na potrzeby agregacji
- Punkty końcowe zestawienia i zestawienia dziennego wymuszają maksymalny zakres dat (14 lub 90 dni w zależności od typu danych), dlatego musisz podzielić duże zapytania o agregację historyczną na mniejsze, sekwencyjne interwały w tych granicach.
- Bezpiecznie grupuj lub sekwencjonuj te podzapytania, aby przestrzegać limitów równoczesności i utrzymywać stałe wskaźniki postępu interfejsu.
Korzystanie ze wstępnie zagregowanych zestawień
Zmień strukturę paneli przeglądu i wykresów trendów, aby korzystać z wstępnie zagregowanych punktów końcowych podsumowania (takich jak DailyRollUpDataPoints). Pozwoli to znacznie zmniejszyć obciążenie obliczeniowe backendu i skrócić czas przesyłania danych przez sieć do klienta.
Odporna obsługa błędów (inteligentne ponowne próby)
- W przypadku napotkania limitów liczby żądań (
429 Too Many Requests) i przekroczenia limitu czasu bramy serwera (504 Gateway Timeout) zastosuj rygorystyczną obsługę wzrastającego czasu do ponowienia. Nigdy nie ponawiaj od razu próby przesłania dużych, nieudanych ładunków. Natychmiastowe ponowne próby zwiększają przeciążenie backendu i pogarszają działanie systemu.
Dostęp innych firm
Urządzenia Fitbit nie mogą komunikować się bezpośrednio z aplikacjami ani usługami innych firm. Te urządzenia są przeznaczone do komunikacji i synchronizacji wyłącznie z aplikacją Google Health.
Urządzenie synchronizuje dane automatycznie przez cały dzień, gdy aplikacja Google Health jest otwarta, lub co 15 minut, jeśli Bluetooth jest aktywny, a aplikacja działa w tle. Po zakończeniu tego procesu synchronizacji dane są dostępne dla usług innych firm za pomocą interfejsu Google Health API.
Filtrowanie jakości i poprawności danych
Aby dostarczać wiarygodne wskaźniki zdrowotne bez konieczności niestandardowego filtrowania szumów po stronie klienta, interfejs Google Health API weryfikuje dane telemetryczne z czujników i wyklucza nieprawidłowe pomiary przed zwróceniem odpowiedzi:
- W przypadku saturacji krwi (
oxygen-saturation) na poziomie minutowym interfejs API zwraca tylko zweryfikowane odczyty i usuwa minuty oznaczone jako nieprawidłowe z powodu ruchu ramienia, luźnego dopasowania do nadgarstka lub wyniku ufności czujnika poniżej 50%, a także 3 minuty przed nieprawidłowym odczytem i po nim oraz odizolowane prawidłowe odcinki krótsze niż 4 minuty. W rezultacie zasięg na poziomie minuty może być rozproszony i mogą występować luki. Więcej informacji znajdziesz w sekcji Filtrowanie danych SpO2 na poziomie minut i prawidłowość danych.
Standardy odległości
Odległości ćwiczeń, takie jak elevationGainMillimeters, są mierzone w milimetrach jako standardowej jednostce z tych powodów:
- Utrzymywanie precyzji danych: najważniejszym powodem używania milimetrów jest zapewnienie, że nie utracimy precyzji danych, które odczytujemy i udostępniamy. Użycie tak małej jednostki jak milimetry pozwala nam na przedstawianie wymiarów z wysoką dokładnością.
- Standaryzacja: milimetry są standardową jednostką we wszystkich naszych usługach. Ta spójność zapewnia jednolite wrażenia deweloperom korzystającym z różnych części interfejsu API.
- Obsługa wielu systemów miar: użycie jednostki podstawowej, takiej jak milimetry, ułatwia deweloperom przeliczanie na dowolną inną wybraną jednostkę, niezależnie od tego, czy pracują z systemem metrycznym, imperialnym czy innym.
Zmienna długość dnia
Interfejs Health API traktuje priorytetowo czas użytkownika, aby uwzględnić zmienną długość dnia spowodowaną czasem letnim lub podróżą. Każdy punkt danych jest przechowywany z fizyczną sygnaturą czasową UTC i przesunięciem UTC aktywnym w momencie zdarzenia. Dzięki temu system może:
- Zmapuj zdarzenie na dokładny moment fizyczny.
- Dostosuj czas do lokalnego kontekstu użytkownika na potrzeby agregacji.
Czas letni
Gdy następuje zmiana czasu na letni, „cofnięcie” powoduje, że dzień cywilny trwa 25 godzin, a zestawienie dla tej daty będzie zawierać dane z 25 godzin. „Przesunięcie do przodu” powoduje, że dzień cywilny trwa 23 godziny, a czas jest przesuwany do tyłu do czasu standardowego.
Podróże
Podróżowanie między strefami czasowymi może powodować jeszcze większe różnice w fizycznym czasie trwania pojedynczego dnia cywilnego.
Aby uzgodnić różnice w strefach czasowych, użyj punktu końcowego dailyRollUp. Automatycznie przypisuje dane do dnia kalendarzowego, w którym zostały zarejestrowane, zgodnie z czasem lokalnym użytkownika, skutecznie „łącząc” dzień pomimo zmian strefy czasowej. Szczegółowe informacje i przykłady znajdziesz w sekcji Agregowanie danych z dni kalendarzowych w przewodniku po agregowaniu danych.