{"id":461,"date":"2026-09-11T17:15:00","date_gmt":"2026-09-11T15:15:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/?p=461"},"modified":"2026-10-26T11:59:00","modified_gmt":"2026-10-26T10:59:00","slug":"automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/","title":{"rendered":"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery"},"content":{"rendered":"<p>Awaria pomiaru mo\u017ce pozosta\u0107 niezauwa\u017cona, mimo \u017ce strona dzia\u0142a poprawnie. Dzienna kontrola liczby zdarze\u0144 dostarcza wskaz\u00f3wki: ile zdarze\u0144 trafi\u0142o do eksportu i jak wynik r\u00f3\u017cni si\u0119 od por\u00f3wnywalnego dnia tygodnia? BigQuery oblicza por\u00f3wnanie, a Looker Studio pokazuje wyniki. Powiadomienie wymaga dodatkowo skonfigurowanej regu\u0142y alertu.<\/p>\n<p>Przyk\u0142ad sprawdza cztery nazwy zdarze\u0144. Nie weryfikuje wszystkich parametr\u00f3w ani ca\u0142ego procesu pomiaru. Kampanie, \u015bwi\u0119ta i zmiany zg\u00f3d r\u00f3wnie\u017c mog\u0105 powodowa\u0107 odchylenia.<\/p>\n<h2>1. Dost\u0119pno\u015b\u0107 danych przed liczb\u0105 zdarze\u0144<\/h2>\n<p>Sprawdzany jest dzie\u0144 sprzed czterech dni oraz ten sam dzie\u0144 tygodnia z o\u015bmiu wcze\u015bniejszych tygodni. Dzie\u0144 badany nie wchodzi do \u015bredniej odniesienia. Op\u00f3\u017anienie daje czas na eksport, ale nie potwierdza kompletno\u015bci. GA4 nie gwarantuje jednej godziny zako\u0144czenia eksportu dziennego; 05:30 UTC nie jest bezpieczn\u0105 granic\u0105.<\/p>\n<p>Brak tabeli dziennej pozostaje warto\u015bci\u0105 nieznan\u0105. Brak zdarzenia oznacza zero dopiero przy istniej\u0105cej tabeli. Istniej\u0105ca tabela te\u017c mo\u017ce by\u0107 niepe\u0142na. <code>session_start<\/code> oznacza tutaj liczb\u0119 takich zdarze\u0144, a nie odtworzon\u0105 metryk\u0119 sesji GA4.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-459-alerts-20261024-pl.png\" alt=\"Dost\u0119pno\u015b\u0107, por\u00f3wnanie i dostarczenie wymagaj\u0105 osobnych kontroli. Zmiana wzgl\u0119dem sta\u0142ej bazy nie mo\u017ce zosta\u0107 uznana za wynik bez odchyle\u0144.\" width=\"1120\" height=\"580\" loading=\"lazy\"><figcaption>Dost\u0119pno\u015b\u0107, por\u00f3wnanie i dostarczenie wymagaj\u0105 osobnych kontroli. Zmiana wzgl\u0119dem sta\u0142ej bazy nie mo\u017ce zosta\u0107 uznana za wynik bez odchyle\u0144.<\/figcaption><\/figure>\n<h2>2. Przyk\u0142ad SQL z oddzielnymi stanami b\u0142\u0119d\u00f3w<\/h2>\n<p>Projekt, zestaw danych i ka\u017cde wyst\u0105pienie strefy raportowania wymagaj\u0105 dostosowania. Zapytanie oczekuje tabel dziennych GA4 o zgodnym schemacie. Brak wszystkich pasuj\u0105cych tabel lub uprawnie\u0144 powoduje b\u0142\u0105d zadania; ten przypadek wymaga oddzielnego nadzoru dzia\u0142ania. Przed ustawieniem harmonogramu potrzebne s\u0105 pr\u00f3bne wykonanie w BigQuery i oszacowanie kosztu.<\/p>\n<pre><code class=\"language-sql\">-- GoogleSQL; replace project, dataset and reporting timezone.\nWITH dates AS (\n  SELECT d AS metric_date,\n    DATE_SUB(CURRENT_DATE(&#x27;Europe\/Warsaw&#x27;), INTERVAL 4 DAY) AS target_date\n  FROM UNNEST(GENERATE_DATE_ARRAY(\n    DATE_SUB(CURRENT_DATE(&#x27;Europe\/Warsaw&#x27;), INTERVAL 60 DAY),\n    DATE_SUB(CURRENT_DATE(&#x27;Europe\/Warsaw&#x27;), INTERVAL 4 DAY),\n    INTERVAL 7 DAY)) AS d\n),\navailable AS (\n  SELECT table_name\n  FROM `project_id.analytics_XXXXXXXXX.INFORMATION_SCHEMA.TABLES`\n  WHERE table_type = &#x27;BASE TABLE&#x27;\n),\ncounts AS (\n  SELECT PARSE_DATE(&#x27;%Y%m%d&#x27;, event_date) AS metric_date,\n    event_name, COUNT(*) AS event_count\n  FROM `project_id.analytics_XXXXXXXXX.events_*`\n  WHERE _TABLE_SUFFIX BETWEEN\n    FORMAT_DATE(&#x27;%Y%m%d&#x27;, DATE_SUB(CURRENT_DATE(&#x27;Europe\/Warsaw&#x27;), INTERVAL 60 DAY))\n    AND FORMAT_DATE(&#x27;%Y%m%d&#x27;, DATE_SUB(CURRENT_DATE(&#x27;Europe\/Warsaw&#x27;), INTERVAL 4 DAY))\n    AND event_name IN (&#x27;purchase&#x27;, &#x27;add_to_cart&#x27;, &#x27;begin_checkout&#x27;, &#x27;session_start&#x27;)\n  GROUP BY 1, 2\n),\ngrid AS (\n  SELECT d.metric_date, d.target_date, n AS event_name,\n    IF(a.table_name IS NULL, NULL, COALESCE(c.event_count, 0)) AS event_count\n  FROM dates AS d\n  CROSS JOIN UNNEST([&#x27;purchase&#x27;, &#x27;add_to_cart&#x27;, &#x27;begin_checkout&#x27;, &#x27;session_start&#x27;]) AS n\n  LEFT JOIN available AS a\n    ON a.table_name = CONCAT(&#x27;events_&#x27;, FORMAT_DATE(&#x27;%Y%m%d&#x27;, d.metric_date))\n  LEFT JOIN counts AS c ON c.metric_date = d.metric_date AND c.event_name = n\n),\nstats AS (\n  SELECT target_date AS metric_date, event_name,\n    MAX(IF(metric_date = target_date, event_count, NULL)) AS event_count,\n    COUNT(IF(metric_date &lt; target_date, event_count, NULL)) AS reference_days,\n    AVG(IF(metric_date &lt; target_date, event_count, NULL)) AS expected_avg,\n    STDDEV_SAMP(IF(metric_date &lt; target_date, event_count, NULL)) AS reference_sd\n  FROM grid\n  GROUP BY target_date, event_name\n),\nscored AS (\n  SELECT *,\n    IF(reference_days = 8,\n      SAFE_DIVIDE(event_count - expected_avg, reference_sd), NULL) AS z_score\n  FROM stats\n),\nclassified AS (\n  SELECT *,\n    CASE\n      WHEN event_count IS NULL THEN &#x27;MISSING_EXPORT&#x27;\n      WHEN reference_days != 8 THEN &#x27;INCOMPLETE_BASELINE&#x27;\n      WHEN reference_sd = 0 AND event_count != expected_avg THEN &#x27;CONSTANT_BASELINE_CHANGE&#x27;\n      WHEN reference_sd = 0 THEN &#x27;NO_CHANGE&#x27;\n      WHEN z_score &lt; -2.0 THEN &#x27;DROP&#x27;\n      WHEN z_score &gt; 3.0 THEN &#x27;SPIKE&#x27;\n      ELSE &#x27;WITHIN_RULE&#x27;\n    END AS quality_status\n  FROM scored\n)\nSELECT *, CURRENT_TIMESTAMP() AS evaluated_at,\n  IF(quality_status IN (&#x27;NO_CHANGE&#x27;, &#x27;WITHIN_RULE&#x27;), 0, 1) AS alert_flag\nFROM classified\nORDER BY event_name;\n<\/code><\/pre>\n<p><code>reference_days<\/code> musi wynosi\u0107 osiem. Brak odniesienia daje <code>INCOMPLETE_BASELINE<\/code>, a brak dnia badanego \u2014 <code>MISSING_EXPORT<\/code>. Sta\u0142a baza nie pozwala na dzielenie przez odchylenie standardowe: osiem warto\u015bci 100 i nast\u0119pnie zero daje wi\u0119c <code>CONSTANT_BASELINE_CHANGE<\/code>. Osiem warto\u015bci 100 i ponownie 100 daje <code>NO_CHANGE<\/code>.<\/p>\n<p>Przy zmiennej bazie wynik z opisuje odleg\u0142o\u015b\u0107 od \u015bredniej wzgl\u0119dem rozrzutu o\u015bmiu warto\u015bci odniesienia. Na przyk\u0142ad \u015brednia 100, odchylenie standardowe pr\u00f3by 10 i nowa warto\u015b\u0107 70 daj\u0105 (70 \u2212 100) \/ 10 = \u22123. Odchylenie standardowe okre\u015bla, jak bardzo warto\u015bci odniesienia r\u00f3\u017cni\u0105 si\u0119 mi\u0119dzy sob\u0105. Progi \u22122 i +3 s\u0105 regu\u0142ami do dalszej analizy, nie skalibrowanymi testami istotno\u015bci. Osiem obserwacji to ma\u0142a podstawa; wiele r\u00f3wnoczesnych kontroli i niewielkie liczby zdarze\u0144 mog\u0105 prowadzi\u0107 do myl\u0105cych wskaza\u0144. <code>WITHIN_RULE<\/code> oznacza wy\u0142\u0105cznie brak uruchomienia tej regu\u0142y.<\/p>\n<h2>3. Zapis wynik\u00f3w i wysy\u0142anie alert\u00f3w<\/h2>\n<ol>\n<li>Utworzenie zestawu danych monitoringu w odpowiednim regionie BigQuery. Kontrola uprawnie\u0144 odczytu i zapisu to\u017csamo\u015bci wykonuj\u0105cej zadanie.<\/li>\n<li>Pr\u00f3bne wykonanie zapytania. Oczekiwane s\u0105 cztery wiersze z <code>evaluated_at<\/code> i <code>alert_flag<\/code>. Kontrola kosztu: zakres tabel obejmuje 57 dni, cho\u0107 potrzebnych jest dziewi\u0119\u0107 dat por\u00f3wnania.<\/li>\n<li>Dob\u00f3r harmonogramu na podstawie obserwowanej dost\u0119pno\u015bci eksportu. Tabela bie\u017c\u0105cego wyniku mo\u017ce by\u0107 zast\u0119powana po ka\u017cdym udanym przebiegu. Oddzielna historia wymaga identyfikatora wykonania i obs\u0142ugi powt\u00f3rze\u0144; dopisywanie bez kontroli tworzy duplikaty.<\/li>\n<li>Prezentacja daty, zdarzenia, liczby, \u015bredniej odniesienia, statusu i czasu oceny w Looker Studio. Alerty wykres\u00f3w Pro obs\u0142uguj\u0105 e-mail i dzia\u0142aj\u0105 na filtrach domy\u015blnych. Wysy\u0142ka raportu do Google Chat jest inn\u0105 funkcj\u0105 ni\u017c warunkowy alert danych.<\/li>\n<li>Dla Cloud Monitoring oddzielne zapytanie zwracaj\u0105ce tylko wiersze alarmowe. Automatyczna metryka <code>bigquerydatatransfer.googleapis.com\/transfer_config\/last_execution_job_rows<\/code> liczy wiersze wyniku, nie warto\u015bci z. Potrzebny jest filtr w\u0142a\u015bciwego <code>config_id<\/code> i pr\u00f3g powy\u017cej zera.<\/li>\n<\/ol>\n<p>Zapytanie alarmowe powinno nast\u0119powa\u0107 po udanym obliczeniu oraz sprawdza\u0107 \u015bwie\u017co\u015b\u0107, oczekiwan\u0105 dat\u0119 i wszystkie cztery wiersze. Stary poprawny wynik nie mo\u017ce zas\u0142ania\u0107 awarii nowego przebiegu. B\u0142\u0119dy zada\u0144 i brak kolejnego wykonania wymagaj\u0105 osobnych ostrze\u017ce\u0144: ostatnia liczba wierszy mo\u017ce utrzymywa\u0107 si\u0119 po awarii. Kana\u0142y powiadomie\u0144 wymagaj\u0105 kontroli na przygotowanych przypadkach testowych.<\/p>\n<h2>4. Kontrole przed codziennym u\u017cyciem<\/h2>\n<ul>\n<li>Sta\u0142a baza i ca\u0142kowity zanik zdarze\u0144: zg\u0142oszona zmiana, bez fa\u0142szywego wyniku normalnego.<\/li>\n<li>Brak tabeli dziennej: brak eksportu, bez wymy\u015blonego zera zdarze\u0144.<\/li>\n<li>Brak tygodnia odniesienia: por\u00f3wnanie wstrzymane.<\/li>\n<li>Niezmieniona sta\u0142a baza: brak zmiany.<\/li>\n<li>B\u0142\u0105d zadania lub stary wynik: ostrze\u017cenie operacyjne niezale\u017cne od statusu jako\u015bci.<\/li>\n<\/ul>\n<p>Decyzj\u0119 o statusie sprawdzono w izolacji na danych syntetycznych. Nie potwierdza to dzia\u0142ania instalacji BigQuery, Pro ani Cloud Monitoring. Codzienna kontrola z czterodniowym op\u00f3\u017anieniem nie zapewnia natychmiastowych alert\u00f3w awarii. Szybsze wykrywanie wymaga osobnej oceny danych wst\u0119pnych.<\/p>\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Dlaczego uzupe\u0142nienie brak\u00f3w zerami nie wystarcza?<\/h3>\n<p>Bez siatki dat znikaj\u0105 dni bez zdarze\u0144. Uzupe\u0142nienie ka\u017cdej luki zerem myli jednak brak eksportu z zaobserwowanym dniem zerowym. Przyk\u0142ad sprawdza r\u00f3wnie\u017c istnienie tabeli.<\/p>\n<h3>Czy wskazanie dowodzi awarii pomiaru?<\/h3>\n<p>Nie. Analiza potrzebuje dodatkowych informacji: wdro\u017ce\u0144, zmian CMP, kampanii, b\u0142\u0119d\u00f3w serwera i stanu eksportu. Regu\u0142a liczby zdarze\u0144 nie ustala przyczyny ani nie weryfikuje warto\u015bci poszczeg\u00f3lnych parametr\u00f3w.<\/p>\n<\/div>\n<p><!-- lw-anomaly-weekday:start --><\/p>\n<h2>Kontrola w praktyce: baza dni tygodnia bez sprawdzanego dnia<\/h2>\n<p><a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ga4-anomaly-detector\/\">Detektor anomalii GA4<\/a> por\u00f3wnuje teraz wybrany dzie\u0144 raportowy z tym samym dniem tygodnia z o\u015bmiu poprzednich tygodni. Czwartek jest por\u00f3wnywany z o\u015bmioma czwartkami. Sprawdzany dzie\u0144 nie wchodzi do \u015bredniej odniesienia ani odchylenia standardowego pr\u00f3by. Silny spadek nie obni\u017ca wi\u0119c w\u0142asnej bazy.<\/p>\n<p>Narz\u0119dzie odczytuje sesje, wszystkich u\u017cytkownik\u00f3w, wy\u015bwietlenia stron\/ekran\u00f3w, kluczowe zdarzenia, liczb\u0119 zdarze\u0144, \u0142\u0105czne przychody i wsp\u00f3\u0142czynnik zaanga\u017cowania przez Data API tylko do odczytu. Domy\u015blnie wybrany jest dzie\u0144 sprzed czterech dni, aby uwzgl\u0119dni\u0107 czas przetwarzania. Ten odst\u0119p nie potwierdza jednak kompletno\u015bci danych. Nadal istotne s\u0105 strefa raportowania us\u0142ugi i metadane odpowiedzi.<\/p>\n<ol>\n<li>Wyb\u00f3r zako\u0144czonego dnia i kontrola o\u015bmiu dat odniesienia pokazanych w wyniku.<\/li>\n<li>Je\u017celi w odpowiedzi brakuje wymaganej daty, por\u00f3wnanie zostaje wstrzymane. Brak wiersza nie jest po cichu zast\u0119powany zerem; jawnie raportowane zero pozostaje zerem.<\/li>\n<li>Ocena opisowego wyniku z wzgl\u0119dem wybranego progu. Dla sta\u0142ej bazy pokazywany jest brak zmiany lub zmiana wzgl\u0119dem sta\u0142ej warto\u015bci, bez dzielenia przez zero.<\/li>\n<li>Pobranie dziewi\u0119ciu por\u00f3wnywanych dat jako CSV i zestawienie wskaza\u0144 z wdro\u017ceniami, kampaniami, \u015bwi\u0119tami i innymi dowodami.<\/li>\n<\/ol>\n<p>Osiem obserwacji to niewielka baza. Wskazania nie s\u0105 skalibrowanymi testami istotno\u015bci, a siedem r\u00f3wnoczesnych kontroli metryk mo\u017ce dawa\u0107 przypadkowe wyniki. Por\u00f3wnanie tych samych dni tygodnia nie usuwa trend\u00f3w, akcji specjalnych, zmian zg\u00f3d ani op\u00f3\u017anie\u0144 przetwarzania. Brak wskazania nie dowodzi kompletno\u015bci pomiaru, a wskazanie nie ustala przyczyny. To narz\u0119dzie do r\u0119cznej analizy, nie us\u0142uga cyklicznych alarm\u00f3w.<\/p>\n<p>\u0179r\u00f3d\u0142a: <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\/rest\/v1beta\/properties\/runReport\">dokumentacja Google runReport<\/a>, <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\/api-schema\">definicje metryk<\/a> i <a href=\"https:\/\/www.itl.nist.gov\/div898\/handbook\/eda\/section3\/eda35h.htm\">NIST o wykrywaniu obserwacji odstaj\u0105cych i jego za\u0142o\u017ceniach<\/a>.<\/p>\n<p><!-- lw-anomaly-weekday:end --><\/p>\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/support.google.com\/analytics\/answer\/9358801?hl=en\">GA4: czas eksportu i ograniczenia<\/a><\/li>\n<li><a href=\"https:\/\/support.google.com\/analytics\/answer\/7029846\">GA4: schemat eksportu<\/a><\/li>\n<li><a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/information-schema-tables\">Wykaz tabel<\/a><\/li>\n<li><a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/reference\/standard-sql\/statistical_aggregate_functions\">Odchylenie standardowe pr\u00f3by<\/a><\/li>\n<li><a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/scheduling-queries\">Konfiguracja zapyta\u0144 cyklicznych<\/a><\/li>\n<li><a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/create-alert-scheduled-query\">Alert wed\u0142ug liczby wierszy i ograniczenia dzia\u0142ania<\/a><\/li>\n<li><a href=\"https:\/\/docs.cloud.google.com\/data-studio\/create-alerts-on-a-chart\">Alerty wykres\u00f3w Pro<\/a><\/li>\n<li><a href=\"https:\/\/www.itl.nist.gov\/div898\/handbook\/eda\/section3\/eda35h.htm\">Obserwacje odstaj\u0105ce i za\u0142o\u017cenia o rozk\u0142adzie danych<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Przyk\u0142ad BigQuery por\u00f3wnuje liczby zdarze\u0144 GA4 z o\u015bmioma odpowiednimi dniami tygodnia i odr\u00f3\u017cnia brak eksportu od zera zdarze\u0144. Looker Studio pokazuje wyniki; automatyczne alerty wymagaj\u0105 dodatkowej konfiguracji i test\u00f3w.<\/p>\n","protected":false},"author":1,"featured_media":14021,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[117],"tags":[92084,92097,92100,92511,92064,92238],"class_list":["post-461","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl","tag-bigquery-pl","tag-data-quality-pl","tag-google-analytics-4-pl","tag-looker-studio-pl","tag-monitoring-pl","tag-tutorial-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Monitoring jako\u015bci danych GA4: zapytania anomalii w BigQuery, harmonogram kontroli i Looker Studio z por\u00f3wnaniem dni tygodnia.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Monitoring jako\u015bci danych GA4: zapytania anomalii w BigQuery, harmonogram kontroli i Looker Studio z por\u00f3wnaniem dni tygodnia.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-11T15:15:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T10:59:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-461-automatyczne-alerty-jakosci-danych-g-g.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery\",\"datePublished\":\"2026-09-11T15:15:00+00:00\",\"dateModified\":\"2026-10-26T10:59:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/\"},\"wordCount\":1120,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-461-automatyczne-alerty-jakosci-danych-g-g.png\",\"keywords\":[\"BigQuery\",\"Data Quality\",\"Google Analytics 4\",\"Looker Studio\",\"Monitoring\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/\",\"name\":\"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-461-automatyczne-alerty-jakosci-danych-g-g.png\",\"datePublished\":\"2026-09-11T15:15:00+00:00\",\"dateModified\":\"2026-10-26T10:59:00+00:00\",\"description\":\"Monitoring jako\u015bci danych GA4: zapytania anomalii w BigQuery, harmonogram kontroli i Looker Studio z por\u00f3wnaniem dni tygodnia.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-461-automatyczne-alerty-jakosci-danych-g-g.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-461-automatyczne-alerty-jakosci-danych-g-g.png\",\"width\":1200,\"height\":630,\"caption\":\"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery | Lukas Wojcik","description":"Monitoring jako\u015bci danych GA4: zapytania anomalii w BigQuery, harmonogram kontroli i Looker Studio z por\u00f3wnaniem dni tygodnia.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/","og_locale":"en_US","og_type":"article","og_title":"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery | Lukas Wojcik","og_description":"Monitoring jako\u015bci danych GA4: zapytania anomalii w BigQuery, harmonogram kontroli i Looker Studio z por\u00f3wnaniem dni tygodnia.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-11T15:15:00+00:00","article_modified_time":"2026-10-26T10:59:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-461-automatyczne-alerty-jakosci-danych-g-g.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery","datePublished":"2026-09-11T15:15:00+00:00","dateModified":"2026-10-26T10:59:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/"},"wordCount":1120,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-461-automatyczne-alerty-jakosci-danych-g-g.png","keywords":["BigQuery","Data Quality","Google Analytics 4","Looker Studio","Monitoring","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/","name":"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-461-automatyczne-alerty-jakosci-danych-g-g.png","datePublished":"2026-09-11T15:15:00+00:00","dateModified":"2026-10-26T10:59:00+00:00","description":"Monitoring jako\u015bci danych GA4: zapytania anomalii w BigQuery, harmonogram kontroli i Looker Studio z por\u00f3wnaniem dni tygodnia.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-461-automatyczne-alerty-jakosci-danych-g-g.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-461-automatyczne-alerty-jakosci-danych-g-g.png","width":1200,"height":630,"caption":"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/automatyczne-alerty-jakosci-danych-ga4-w-looker-studio-i-bigquery\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Automatyczne alerty jako\u015bci danych GA4 w Looker Studio i BigQuery"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/461","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=461"}],"version-history":[{"count":10,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/461\/revisions"}],"predecessor-version":[{"id":26738,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/461\/revisions\/26738"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/14021"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=461"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}