Detailní průvodce sessionizací GA4 BigQuery exportu – od identifikace session a spolehlivého řazení eventů po dva atribuční modely (First Event Available a Session Start), jejich limity a validaci shody mezi nimi.
Pokud reportujete GA4 data z BigQuery exportu, dříve nebo později narazíte na rozdíly mezi čísly v GA4 UI a vlastními výpočty. Některé jsou očekávané (sampling, thresholding, timezone), jiné vznikají ve chvíli, kdy si v BigQuery sestavujete vlastní session-level tabulku a musíte se rozhodnout, jak řešit atribuci jednotlivých návštěv.
Tento článek popisuje, jak v MeasureDesign sessionizujeme GA4 BigQuery export – tj. jak z raw eventů sestavujeme session-level tabulku s atribučními parametry (source, medium, campaign). Najdete zde dva atribuční modely a popis, kdy je který vhodný. Všechny zmíněné queries jsou ve veřejně dostupném GitHub repozitáři MeasureDesign (odkazy v textu).
Základní principy sessionizace
Sessionizací rozumíme proces, který z raw event-level dat vytvoří session-level tabulku, kde každý řádek odpovídá jedné session s přiřazenými atribučními parametry. Než se dostaneme k jednotlivým modelům, je třeba vyřešit dvě věci: jak identifikovat session a jak spolehlivě řadit eventy v rámci session.
Unikátní session ID
Ačkoliv by se to mohlo zdát jako přirozená volba, ga_session_id v BigQuery není unikátní ID session. Jde o timestamp, takže více uživatelů (s různými hodnotami user_pseudo_id) může mít stejné ga_session_id. Unikátní session ID proto vytváříme jako kombinaci obou polí.
SELECT CONCAT(
user_pseudo_id, "-",
(SELECT value.int_value FROMUNNEST(event_params) WHERE key ='ga_session_id')
) AS unique_session_id
FROM `project_name.analytics_12345.events_20240121`
Safe actual_timestamp
U eventů v GA4 BigQuery exportu pracujeme se dvěma timestampy:
• event_timestamp – čas, kdy byl event přijat serverem (UTC); generován automaticky GA4
• actual_timestamp – vlastní event parameter (best practice v implementaci), který představuje čas, kdy event nastal na straně klienta (v prohlížeči uživatele); je potřeba ho doimplementovat do měření.
Pro správné řazení eventů v rámci session preferujeme actual_timestamp, protože event_timestamp může být zkreslený. Nicméně i actual_timestamp má své limity – uživatel může mít chybně nastavené datum nebo čas na zařízení. V praxi jsme zaznamenali edge cases s timestampem v budoucnosti nebo naopak v dávné minulosti.
Proto v sessionizaci používáme UDF safe_actual_ts_ms, která vrací actual_timestamp pouze tehdy, pokud je v rozumném okolí event_timestamp. V opačném případě použije jako fallback event_timestamp.
Pokud pro session není dostupný žádný source / medium signál, klasifikujeme ji jako direct / none. Jde o výchozí fallback pro oba modely.
Existují dva přístupy, jak ze session získat atribuční parametry. Každý má své use cases a limity.
Model 1: First Event Available (FEV)
Princip
Atribuční parametry přebíráme z prvního eventu v rámci session, který tyto informace obsahuje - tj. má alespoň jednu nenulovou hodnotu v source / medium / campaign / content / term.
„První“ v tomto kontextu znamená chronologicky první podle našeho explicitního řazení, ne v pořadí, v jakém eventy přijdou v BQ exportu. Spoléhat na pořadí řádků v exportu by bylo nespolehlivé, protože eventy v batchích nedorazí ve striktním pořadí a Google žádné defaultní řazení negarantuje. Řadíme proto sami přes ORDER BY actual_timestamp ASC (s fallbackem na event_timestamp přes funkci safe_actual_ts_ms), s event_bundle_sequence_id ASC jako tie-breakerem pro eventy se shodným timestampem.
Kdy použít
• Historická data před 2023-11 (session_start tehdy parametry neměl)
• Property s vysokým podílem sessions bez session_start eventu
• Když potřebujeme zachytit kampaňové parametry, které mohou v rámci session přijít z různých eventů (např. UTM parametry přidané při změně URL na single-page webech)
Limity
• Výpočetně náročnější - musí se procházet všechny eventy v rámci session, nejen session_start. Pokud má session hodně eventů, může být řazení pomocí window funkcí nákladné.
• event_bundle_sequence_id jako tie-breaker není vždy spolehlivý (nebyl dostupný před určitým datem)
Načti všechny eventy za období + sestav event_traffic_sources concat (source*medium*campaign*content*term)
Vyfiltruj prázdné concaty (samé hvězdičky = žádná atribuce)
Pro každé unique_session_id najdi PRVNÍ event s nenulovým concatem (window FIRST_VALUE)
Rozparsuj concat zpět na jednotlivé sloupce
Aplikuj direct fallback (prázdný source → (direct), prázdný medium → (none))
Diagram - Model 1 (atribuční logika)
Model 2: Event session_start (SeS)
Princip
Od 2023-11-02 obsahují automaticky sbírané session_start eventy stejné parametry jako první klientem vyvolaný event v rámci session (release notes Google). To znamená, že atribuční parametry můžeme získat přímo ze session_start eventu, bez nutnosti procházet všechny eventy session.
Kdy použít
Property s daty od 2023-11-02
Property s nízkým podílem sessions bez session_start eventu
Limity
Sessions bez session_start eventu vypadávají z reportingu
Při duplicitních session_start eventech (vzácné, ale může se to stát) je nutný tie-breaker přes event_timestamp a event_bundle_sequence_id
Atribuce reflektuje stav v okamžiku session_start eventu, takže pozdější UTM změny v rámci session ignoruje (akceptovatelný kompromis)
1. Vyfiltruj eventy s event_name = 'session_start' a user_pseudo_id IS NOT NULL
2. ROW_NUMBER() OVER (PARTITION BY unique_session_id ORDER BY event_timestamp ASC, event_bundle_sequence_id ASC) – deduplikace v případě duplicitních session_start eventů
4. Direct fallback (source/medium = N/A → direct/none)
5. Campaign fallback z URL parametru utm_campaign, pokud je session_campaign N/A
6. MERGE INTO cílové tabulky (handle late-arriving updates pomocí WHEN MATCHED)
Diagram - Model 2(atribuční logika)
Poznámky k MERGE DML
MERGE je BigQuery DML statement, která v jednom kroku rozhodne, jestli řádek do cílové tabulky vložit (INSERT), nebo aktualizovat existující záznam (UPDATE). Pro sessionizaci je to praktické ze dvou důvodů:
Pipeline můžete pustit opakovaně na stejné časové okno (například po výpadku scheduleru nebo při manuálním re-runu) a výsledek bude stejný, ne duplikovaný. Bez MERGE byste museli každý opakovaný běh řešit nejdřív DELETE z cílové tabulky, pak INSERT - což je nejen pomalejší, ale taky riskantní, pokud se mezi DELETE a INSERT něco rozbije.
Správně handluje late-arriving data - typicky GA4 BQ export občas doplní eventy s několikadenním zpožděním, mediální exporty doplní konverze, upraví prokliky, spendy…
Struktura MERGE statementu
MERGE má v BigQuery konzistentní strukturu, kterou je dobré znát, protože všechny sessionizační queries ji používají obdobně. Začíná definicí cílové tabulky a zdrojového dotazu, které se propojí pomocí podmínky v klauzuli ON – typicky přes unique_session_id v rámci aktuálního datového okna. Následují větve určující, co se má stát při shodě (WHEN MATCHED) a při neshodě (WHEN NOT MATCHED).
Zjednodušená syntaxe vypadá takto:
MERGEINTO `project.dataset.target_table` t
USING (
-- zdrojový SELECT: vrátí sessions za dané datové okno) s
ON t.unique_session_id = s.unique_session_id
AND t.session_date BETWEEN start_date AND end_date
WHEN MATCHED AND (
t.session_source ISDISTINCTFROM s.session_source
OR t.session_medium ISDISTINCTFROM s.session_medium
OR t.session_campaign ISDISTINCTFROM s.session_campaign
) THEN UPDATE SET t.session_source = s.session_source,
t.session_medium = s.session_medium,
t.session_campaign = s.session_campaign,
t.last_update_timestamp =CURRENT_TIMESTAMP()
WHENNOT MATCHED THENINSERT (...) VALUES (...);
Cílová tabulka má alias (t) = target, zdrojový dotaz má alias (s) = source
Podmínka ON funguje jako párovací klíč (unique_session_id). Navíc obsahuje partition filter (session_date BETWEEN ...), který slouží k optimalizaci query.
V klauzuli WHEN MATCHED se používá IS DISTINCT FROM místo !=, protože operátor != při porovnání s hodnotou NULL nevrací TRUE ani FALSE, ale NULL.
Target tabulka musí být vytvořena PŘEDEM (viz zakomentovaný CREATE OR REPLACE blok v query)
Při scheduling v BQ scheduled query nenastavovat destination table (MERGE řeší zápis interně)
WHEN MATCHED updatuje session jen pokud se source/medium/campaign reálně změnily → chrání před zbytečnými updaty
WHEN NOT MATCHED vloží novou session → handle late-arriving data za dynamic date window (default CURRENT_DATE()-2 až CURRENT_DATE()-1)
Validace shody mezi modely (FEV vs SeS)
Po nasazení sessionizace u nového klienta (property) nebo při migraci mezi modely ověřujeme, jak moc se výstupy obou modelů liší. Drobný rozdíl (jednotky procent) je normální a očekávaný. Větší rozdíl může indikovat nestandardní implementaci, která stojí za prověření.
Query porovnává počet sessions za den z obou modelů – cnt_sessions_fev (Model 1) vs cnt_sessions_ss (Model 2) – a vypočítává procentuální rozdíl.
V praxi považujeme rozdíl 1–2 % mezi modely za akceptovatelný noise – typicky pramení z menšiny sessions bez session_start eventu, které FEV zachytí a SeS ne. Rozdíl nad 5 % je signál, že stojí za to se na implementaci podívat blíž – nejčastěji jde o nestandardní consent flow, SPA navigaci bez zachyceného session_start, nebo problém s orderingem eventů v batchích. Před nasazením do produkce doporučujeme validaci spustit alespoň na měsíčním okně, aby výsledek nezkreslila krátkodobá anomálie (kampaňový peak, výpadek měření).
Závěr
Sessionizace GA4 BigQuery exportu, jak je popsaná v tomto článku, představuje základ pro atribuční pipeline. Jde o robustní, opakovaně otestovaný přístup, který tvoří první vrstvu (L0) session-level dat. V praxi ale u většiny klientů na tento základ dále stavíme:
Individuální úpravy atribuce zdrojů podle konkrétních potřeb klienta – vlastní channel grouping, override pravidla pro specifické partnery nebo zpřesnění klasifikace organic vs referral pro nestandardní domény.
Dopárování dat z Google Ads (campaign ID, ad group, keyword) přes gclid join, podobně pro další mediální systémy - to, co GA4 v BQ exportu standardně neposkytuje v plné podobě.
Diagnostiku a monitoring sessionizace - periodická kontrola stavu (% sessions bez startu, duplicity, late-arriving data) jako součást provozního setupu.
Klíčové závěry:
Výchozí volbou pro nové implementace je Model 2 (session_start) – výpočetně levnější, čistá MERGE pipeline, kompatibilní se všemi daty od 2023-11-02.
Model 1 (FEV) má místo u historických dat a u properties s rozbitou session_start coverage - ale za cenu vyššího compute costu.
Validujte shodu mezi modely.
Všechny queries zmíněné v článku najdete v týmovém GitHub repu:
Pokud máte k sessionizaci dotazy nebo narazíte na edge case, který tento postup nepokrývá, ozvěte se nám.
Kdo stojí za článkem
Anna Horáková
Analyst
Anička se v MeasureDesign věnovala datové analytice a propojovala data pomocí GA4, BigQuery a Looker Studia. Anička byla členkou našeho teamu do roku 2026.
Třetí díl seriálu o first-party datech bude opět hodně technický – ukážeme si, jak zkontrolovat, že data správně odcházejí do jednotlivých systémů a dělají to, co mají. Podíváme se na odchozí hity v DevTools i na kontrolu přímo v reklamních platformá
Detailní průvodce sessionizací GA4 BigQuery exportu – od identifikace session a spolehlivého řazení eventů po dva atribuční modely (First Event Available a Session Start), jejich limity a validaci shody mezi nimi.
Naučte se, jak nasadit serverový GTM na Cloud Run. Porovnáme Stape s vlastním řešením, vysvětlíme náklady a typy účtování a ukážeme, jak se vyhnout častým chybám při nastavení.
Kompletní technický průvodce sběrem first-party dat přes dataLayer, jejich normalizací, hashováním a odesíláním přes server-side GTM do Google Ads a Meta.
Testovali jsme ClickUp MCP pro management úkolů za pomoci AI. Zjistěte víc o praktických limitech, bezpečnostních omezeních a pro koho se tento nástroj hodí.
Ženy v analytice se často potýkají s imposter syndromem, přestože vynikají v práci s detailem i datovém storytellingu. Přidejte se ke komunitě Data Sisters.
Naučte se, jak přenést historická data z Google Analytics 4 do nového projektu v BigQuery pomocí Data Transfer Service. Podrobný návod krok za krokem se screenshoty.
48 hodin vývoje aplikace s AI na hackathonu #HackYourWeekend v Brně. Od nápadu po nasazení pomocí Claude Code, měření přes BigQuery a získané zkušenosti.
6. 9. se v prostorách Brněnského Gen konal další ročník MeasureCamp - naší oblíbené komunitní akce. Potěšilo nás, že MeasureCampu se letos zúčastnilo 74 žen.
Výpočet dat Velikonoc v BigQuery pomocí algoritmu Computus. SQL skript generuje data Velikonoční neděle, Velkého pátku a Velikonočního pondělí pro analýzu dat z GA4.
Naučte se využívat export Google Ads do BigQuery pro získávání byznysových insightů. Kombinujte jej s daty z GA4 a CRM, řešte atribuční výzvy a zlepšete reporting.
Naučte se pracovat s raw daty z GA4 v BigQuery a Google Cloud Platform. Materiály z workshopu, SQL dotazy a praktické příklady z Marketing Festivalu 2024.
Podívejte se na náš veřejný webinář s praktickými tipy pro vyhodnocování kampaní v GA4 během Black Friday a Vánoc. Naučte se, jak z analytiky v e-commerce vytěžit maximum.
Vojta se v MeasureDesign věnuje vývoji technických a datových řešení, která mají být nejen funkční, ale i dobře použitelná v praxi. Baví ho propojovat webový vývoj, automatizaci a práci s daty tak, aby věci dávaly smysl jak z pohledu uživatele, tak z pohledu technického fungování na pozadí. Nejvíc ho těší moment, kdy se podaří složit komplexnější problém do čistého a spolehlivého řešení.
Jiří Otipka
Analyst
Jirka pracuje v marketingu přes 10 let a pokud existuje něco, co ho baví více než čísla sama, tak je to jejich propojování. Miluje matematiku a datovou analytiku a protože rád zkoumá i zdrojové kódy, dokáže se hravě domluvit i s programátory jejich jazykem. V MeasureDesign se specializuje na napojování nových datových zdrojů – vytváří vlastní konektory pomocí Pythonu, testuje kvalitu dat a zkoumá, co všeho by se dalo propojit, aby to mělo význam pro business. S Looker Studiem je jako ryba ve vodě a velkou zkušenost má také s vyhodnocováním PPC kampaní.
Lenka Pittnerová
Analyst
Lenka se k MeasureDesign připojila na konci roku 2025 s bohatými zkušenostmi z PPC marketingu, kde dlouhodobě pracovala s Google Ads, Meta Ads a dalšími reklamními systémy. Právě při řízení kampaní ale opakovaně narážela na tentýž problém – špatně nebo nedostatečně nastavenou webovou analytiku, která znemožňovala efektivní optimalizaci. To ji vedlo k tomu, že se analytice začala věnovat nejdřív z nutnosti, postupně však zjistila, že ji baví víc než samotné reklamy. Dnes se zaměřuje především na implementaci webové analytiky a datových řešení, která firmám zajišťují kvalitní a spolehlivá data pro strategické rozhodování i výkonný marketing. Část PPC projektů si ponechává – jednak proto, že ji stále baví, ale hlavně aby zůstala v kontaktu s realitou mediálních systémů a skutečnými potřebami klientů.
Martina Kvasničková
AI & Data Research
Marťa se k MeasureDesign připojila v roce 2025 během studia webových aplikací. Fascinuje ji, jak rychle se vyvíjí svět umělé inteligence, a proto se zaměřila na výzkum velkých jazykových modelů. Ve firmě pomáhá integrovat AI do každodenní práce – tak, aby byla rychlejší, efektivnější a zároveň dostupná pro všechny členy týmu. Nejvíc ji baví hledat způsoby, jak AI využít prakticky a přetavit nové technologie v užitečné nástroje.
Markéta Svěráková
Analyst
Markéta začínala v marketingu, ale pak přišla mateřská – a s ní nekonečný chaos. Potřebovala si zachovat aspoň zbytky zdravého rozumu, a tak se vrhla na data. Čísla totiž nekřičí, nerozsypávají křupíky do klávesnice a dávají aspoň nějaký smysl. V Engeto Academy prošla kurzem datové analytiky, kde se spřátelila se SQL, Power BI, Excelem a Pythonem a začala hledat vzorce i mimo dětské omalovánky. Dnes v MeasureDesign pomáhá klientům zjistit, co jim jejich čísla doopravdy říkají.
Blanka Hejduková
Back Office
Blanka se stala součástí našeho týmu v roce 2024 a od té doby má na starosti oblast back office, včetně fakturace a administrativních úkolů. Využívá své zkušenosti z České pošty a vzdělání v oboru finančního managementu, aby zajistila hladký chod všech procesů. Ve volném čase se věnuje svým dvěma dětem, s nimiž ráda cestuje, a zároveň si užívá práci na zahrádce, kde nachází svůj odpočinek.
Petra Súkeníková
Analyst
Do MeasureDesign nastoupila v roce 2023 a specializuje se na implementaci měření a reporting. Největší radost jí dělá moment, kdy se po všech nastaveních a testech konečně rozběhnou první data. Naopak největší výzvou jsou nečekané (a často nezadokumentované) změny od Google – chvíle, kdy se z analytika stává paranormal behaviour expert. 👻 Byla členkou našeho týmu do léta 2026.
Anna Horáková
Analyst
Anička má více jak 7 let zkušeností z agenturního prostředí, kde spravovala pro klienty reklamní kampaně na sociálních sítích, nejradši pro obsahové weby. Chtěla získat trochu větší pohled nejen na kampaňová data, a tak více směřovala svou práci k webové analytice. K našemu týmu se přidala v roce 2022 a nyní se zaměřuje na datovou analytiku, kde s využitím GA4, BigQuery, Looker Studia a dalších nástrojů může propojovat a analyzovat data ještě víc do hloubky a přinést klientům zajímavé analýzy i podklady pro business rozhodování. Anička byla členkou našeho teamu do roku 2026.
Klára Belzová
Analyst
Klára je ve firmě od roku 2019. Věnuje se hlavně webové analytice, ale nezalekne se ani práce s daty v BigQuery. Nejvíc ji baví, když může klienta provést od definování jeho potřeb přes implementaci měření až k výsledné vizualizaci dat.
Až podezřele velkou radost jí dělá pohled na hezky přehledný GTM kontejner nebo report plný užitečných dat.
Vašek Jelen
Lead Analyst & Co-Founder
Vašek se již více než 15 let věnuje digitální analytice – od nastavování měření po uložení, vizualizaci a interpretaci dat. Firmám pomáhá mít v datech pořádek a umět je naplno využít. Věnuje se primárně datům z digitálních platforem jako jsou weby, aplikace, klientské zóny apod. a propojování těchto dat s dalšími firemními daty jako jsou mediální a zákaznická data. Po letech na volné noze spoluzaložil analytické studio MeasureDesign, kde kromě analytických projektů a školení na míru vzdělává nové analytičky a analytiky.
Zuzana Mikyšková
Analyst & Co-Founder
Zuzčina kariéra vedla přes řízení inovací a výzkumu v korporátu, vedení “wom” (word of mouth) projektů do digitální agentury, kde projektově řídila tvorby webových stránek. Zuzka je ale dost zvědavá a potřebovala vědět, jak web funguje, když je vypuštěn do světa. To ji motivovalo ke studiu webové analytiky, a následně přivedlo k osudové spolupráci s Vaškem a v roce 2019 spolu založili firmu.