LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Przegląd bloga /Digital Analytics / Odczyt statusu zgody dla pojedynczego zdarzenia w...
Ten artykuł w innych językach:

Odczyt statusu zgody dla pojedynczego zdarzenia w eksporcie GA4 do BigQuery

Odczyt statusu zgody dla pojedynczego zdarzenia w eksporcie GA4 do BigQuery
Spis treści
  1. 1. Najpierw kontrola wartości źródłowych
  2. 2. Pułapka NULL na czterech wartościach
  3. 3. Jawny mianownik wskaźnika
  4. 4. Analiza wzorców
  5. Pytania i odpowiedzi
  6. Źródła

W eksporcie GA4 do BigQuery rekord privacy_info zawiera informacje o stanie zgody na przechowywanie danych dla wyeksportowanego zdarzenia. Ułatwia kontrolę techniczną sygnałów zgody. Nie zastępuje rejestru CMP ani dowodu konkretnej decyzji na banerze.

Częsty błąd SQL: analytics_storage != 'Yes' wyklucza wartości NULL. Porównanie z NULL nie daje prawdy; WHERE zachowuje tylko warunki prawdziwe.

1. Najpierw kontrola wartości źródłowych

analytics_storage i ads_storage są ciągami znaków. Google dokumentuje Yes, No i Unset. Rzeczywista wartość SQL NULL pozostaje osobno rozpoznawalnym brakiem. 'Unset' i NULL nie są zamienne w porównaniach. Zapis z kropką wskazuje pole wewnątrz rekordu.

Przed wykonaniem potrzebne jest dostosowanie projektu, zestawu danych i przykładowych dat. Grupowanie pokazuje wszystkie istniejące kombinacje bez zaliczania nieznanych stanów do odmów.

SELECT
  event_date,
  privacy_info.analytics_storage AS analytics_storage,
  privacy_info.ads_storage AS ads_storage,
  COUNT(*) AS event_count
FROM `project_id.analytics_XXXXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20260801' AND '20260831'
GROUP BY 1, 2, 3
ORDER BY event_date, event_count DESC;
Rozróżnienie Yes, No, Unset i SQL NULL. Filtr WHERE przepuszcza tylko prawdziwe porównania.
Rozróżnienie Yes, No, Unset i SQL NULL. Filtr WHERE przepuszcza tylko prawdziwe porównania.

2. Pułapka NULL na czterech wartościach

Ten mały przykład GoogleSQL nie wymaga danych Analytics. Rozróżnia jawne No, wartości inne niż Yes oraz wartości inne niż Yes wraz z NULL.

WITH sample AS (
  SELECT state
  FROM UNNEST(ARRAY<STRING>['Yes', 'No', 'Unset', NULL]) AS state
)
SELECT state,
  state = 'No' AS equals_no,
  state != 'Yes' AS not_yes,
  state IS DISTINCT FROM 'Yes' AS not_yes_including_null
FROM sample;

Dla No i Unset porównanie != 'Yes' jest prawdziwe. Dla NULL wynik to NULL, więc odpowiedni filtr WHERE usuwa wiersz. IS DISTINCT FROM 'Yes' obejmuje również NULL. Techniczne znaczenie to „inne niż Yes, łącznie z brakiem”, a nie „wyraźna odmowa”.

Nawet No nie dowodzi kliknięcia „Odrzuć”: domyślny stan odmowy może obowiązywać przed decyzją na banerze. Samo pole nie wyjaśnia przyczyny wartości nieznanych.

3. Jawny mianownik wskaźnika

Kolejne zapytanie oddziela stany znane, nieustawione, brakujące i nieoczekiwane. SAFE_DIVIDE zwraca NULL przy zerowym mianowniku zamiast błędu obliczenia. Udziały mieszczą się między 0 a 1; prezentacja procentowa wymaga odpowiedniego formatowania.

WITH source AS (
  SELECT privacy_info.analytics_storage AS state
  FROM `project_id.analytics_XXXXXX.events_*`
  WHERE _TABLE_SUFFIX BETWEEN '20260801' AND '20260831'
)
SELECT
  COUNT(*) AS exported_events,
  COUNTIF(state = 'Yes') AS yes_events,
  COUNTIF(state = 'No') AS no_events,
  COUNTIF(state = 'Unset') AS unset_events,
  COUNTIF(state IS NULL) AS null_events,
  COUNTIF(state NOT IN ('Yes', 'No', 'Unset')) AS other_events,
  SAFE_DIVIDE(COUNTIF(state = 'Yes'), COUNT(*)) AS yes_share_all_events,
  SAFE_DIVIDE(
    COUNTIF(state = 'Yes'),
    COUNTIF(state IN ('Yes', 'No'))
  ) AS yes_share_known_events
FROM source;

Przy jednym zdarzeniu z Yes, No, Unset i NULL udział Yes we wszystkich zdarzeniach wynosi 25%. Wśród dwóch znanych stanów wynosi 50%. Obie liczby mogą być poprawnie obliczone, ale odpowiadają na inne pytania. Udziały wartości nieznanych powinny pozostać widoczne obok wyników.

Oba wyniki są ważone liczbą zdarzeń: wizyta generująca wiele zdarzeń ma większy udział niż wizyta z niewielką liczbą zdarzeń. W podstawowym Consent Mode wizyt bez zgody może w ogóle nie być w eksporcie. Wskaźnik decyzji na banerze wymaga więc odpowiednio zdefiniowanych danych CMP: okresu, jednostki zliczania i obsługi powtarzanych decyzji.

4. Analiza wzorców

  • Strona i zdarzenie: Czy nieznane stany skupiają się na konkretnym szablonie lub zdarzeniu generowanym wyłącznie przez serwer?
  • Czas: Czy zmiana zbiega się z wdrożeniem lub zmianą CMP?
  • Urządzenie i źródło: Czy różnica utrzymuje się przy porównywalnej strukturze zdarzeń i dostępności danych?

To wskazówki do analizy, nie dowody przyczyny. Potwierdzenia wymagają konfiguracja tagów, inicjalizacja zgody, żądania sieciowe i ewentualne przekazywanie sygnałów po stronie serwera.

Wizyta może obejmować kilka stanów zgody na przechowywanie danych. Stały identyfikator pseudonimowy między zdarzeniami z odmową i zgodą nie jest gwarantowany. Bez odpowiednich identyfikatorów nie da się wiarygodnie połączyć wcześniejszych zdarzeń w sesję; łączenie po brakujących identyfikatorach nie rozwiązuje problemu.

Pytania i odpowiedzi

Dlaczego _TABLE_SUFFIX zamiast samego event_date?

Dla tych dziennych tabel z symbolem wieloznacznym stały zakres sufiksów ogranicza wybrane tabele. Ciągi dat wykluczają events_intraday_…. Filtr tylko na event_date nie zastępuje tego wyboru. Szacowany zakres odczytu i koszt wymagają kontroli; jeden miesiąc nie jest automatycznie tani.

Czy COALESCE wyjaśnia braki?

Nie. COALESCE(state, 'missing') jedynie nadaje NULL widoczną etykietę. Nie rozstrzyga, czy przyczyną była brakująca konfiguracja, inna ścieżka zbierania danych czy coś jeszcze.

Dlaczego jawne nazwy kolumn?

Wskazanie kolumn ogranicza zależność od schematu eksportu. Nowe pola nie zmieniają automatycznie kształtu wyniku. Zmiana typu potrzebnego pola lub brak pola nadal może wymagać dostosowania.

Źródła

Lukas Wójcik

Lukas Wójcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Masz pytanie lub pomysł na projekt internetowy? Napisz krótko, o co chodzi. Formularz korzysta z reCAPTCHA do ochrony przed spamem.

Napisanie komentarza

Odmienne wyniki z innych kont i pytania o konfigurację są tu mile widziane.

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.