Mierzenie i debugowanie skuteczności za pomocą Google Analytics 4 i BigQuery

Dowiedz się, jak przesyłać dane ze wskaźników internetowych do usług w Google Analytics 4 oraz eksportować je do analizy w BigQuery i Looker Studio.

Google oferuje wiele narzędzi – wyszukiwanie Konsola, PageSpeed statystyk (PSI) wrażenia użytkowników Chrome Zgłoś (CrUX) – które pozwalają programistom sprawdzić, jak strony internetowe radzą sobie z podstawową przeglądarką. w przypadku danych Android Vitals ich rzeczywistych użytkowników w .

Narzędzia te są bardzo przydatne, ponieważ dają ogólny wgląd w działanie witryny. zwiększają wydajność użytkowników i nie wymagają konfiguracji.

Jest jednak kilka ważnych powodów, dla których nie chcesz polegać na tych do pomiaru skuteczności witryny:

  • Narzędzia oparte na CrUX raportują dane według miesięcy lub poprzednich 28 dni. To oznacza, że musisz odczekać długi czas po wprowadzeniu jakichkolwiek zmian, może zobaczyć wyniki wyszukiwania.
  • Narzędzia oparte na CrUX można dzielić na segmenty tylko według ograniczonej liczby wymiarów, takich jak kraj, typ połączenia i kategorię urządzenia (komputer lub urządzenie mobilne). Nie możesz Podzielić dane według wymiarów związanych z Twoją działalnością (np.: zaangażowanie użytkownicy, użytkownicy z konkretnej grupy eksperymentalnej itp.).
  • Narzędzia oparte na CrUX mówią Ci, jaka jest wydajność, ale nie wiedzą, jak to zrobić. dlaczego. Za pomocą narzędzi analitycznych możesz wysyłać dodatkowe dane, które pomogą Ci śledzić i debugować.

Z tego względu zalecamy wszystkim właścicielom witryn monitorowanie podstawowych wskaźników internetowych. za pomocą istniejących narzędzi analitycznych. Z tego posta dowiesz się, jak korzystać narzędzia udostępniane przez Google.

Po zakończeniu konfiguracji możesz utworzyć następujące panele informacyjne:

Zrzut ekranu z raportem dotyczącym oprogramowania sprzęgającego Web Vitals

Zrzut ekranu z raportem dotyczącym oprogramowania sprzęgającego Web Vitals

Jeśli interesuje Cię omówienie wszystkich opisanych tu czynności, obejrzyj naszą prezentację z Google I/O 2021:

Zmierz odległość

Mierzenie skuteczności było zawsze możliwe dzięki Google Analytics przy użyciu danych niestandardowych, ale Oto kilka nowych funkcji Google Analytics 4 (GA4), które deweloperzy powinno być szczególnie ekscytujące.

Chociaż interfejs internetowy Google Analytics ma zaawansowane narzędzia analityczne, nie ma problemów z mocą i elastycznością dostępu do nieprzetworzonych danych zdarzeń za pomocą zapytań języka, który prawdopodobnie już znasz.

Aby zacząć mierzyć podstawowe wskaźniki internetowe za pomocą Google Analytics 4 i BigQuery, musisz zrobić 3 czynności:

  1. Tworzenie konta Google Analytics 4 oraz Projekt BigQuery.
  2. włączyć BigQuery Export, w konfiguracji usługi Google Analytics, więc wszystkie uzyskane dane automatycznie wypełniane w tabelach projektów BigQuery.
  3. Dodaj kod JavaScript web- Vitals. do korzystania z biblioteki, aby mierzyć podstawowe wskaźniki internetowe wysyłanie danych do Google Analytics; 4, w tym dane atrybucji.

Analizuj

Po zakończeniu konfiguracji w BigQuery powinny pojawić się dane o zdarzeniach i wysyłanie zapytań o dane w taki sposób:

SELECT * FROM `my_project_id.analytics_XXXXX.events_*`
WHERE event_name IN ('LCP', 'INP', 'CLS')

Oto podgląd wyników tego zapytania:

Dane o zdarzeniach internetowych w BigQuery

Wysyłanie zapytań o dane wskaźników internetowych

Zanim zaczniesz tworzyć zapytania o dane zdarzeń internetowych, warto sprawdzić, zrozumieć sposób agregacji danych.

Najważniejszą rzeczą do zrozumienia jest to, że w niektórych przypadkach wiele zdarzeń może być odebrane dla tych samych danych, na tej samej stronie. Może się tak zdarzyć, jeśli wartość danych zmian i raportowana jest zaktualizowana wartość (często w przypadku CLS).

W przypadku zdarzeń wskaźników internetowych ostatnia wysyłana wartość jest zawsze najdokładniejsza, więc przed przeprowadzeniem analizy należy odfiltrować tylko te wartości. Fragment kodu udostępniany przez bibliotekę JavaScript Web- Vitals do wysyłania danych do Google Analytics 4 wysyła unikalny identyfikator dla każdego rodzaju danych, dzięki czemu możesz używać następujące zapytanie, aby ograniczyć wyniki tylko do ostatnio odebranej wartości dla każdego identyfikator danych:

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)

Pamiętaj, że wszystkie inne zapytania, o których wspominamy w tym poście, będą zaczynać się od tego podzapytanie.

Przykładowe zapytania

W kolejnych sekcjach znajdziesz kilka przykładów typowych zapytań dotyczących wskaźników internetowych, co chce zrobić.

LCP, INP i CLS w 75. percentylu (p75) w całej witrynie

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  metric_name,
  APPROX_QUANTILES(metric_value, 100)[OFFSET(75)] AS p75,
  COUNT(1) as count
FROM (
  SELECT
    metric_name,
    ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
  FROM web_vitals_events
)
GROUP BY 1

Wszystkie indywidualne wartości LCP od najwyższej do najniższej

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
FROM web_vitals_events
WHERE metric_name = 'LCP'
ORDER BY metric_value DESC
# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  page_path,
  APPROX_QUANTILES(metric_value, 100)[OFFSET(75)] AS LCP,
  COUNT(1) as count
FROM (
  SELECT
    REGEXP_SUBSTR((SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location"), r'\.com(\/[^?]*)') AS page_path,
    ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
  FROM web_vitals_events
  WHERE metric_name = 'LCP'
)
GROUP BY 1
ORDER BY count DESC
LIMIT 10

10 stron o najgorszej wartości CLS (p75)

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  page_path,
  APPROX_QUANTILES(metric_value, 100)[OFFSET(75)] AS CLS,
  COUNT(1) as count
FROM (
  SELECT
    REGEXP_SUBSTR((SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location"), r'\.com(\/[^?]*)') AS page_path,
    ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
  FROM web_vitals_events
  WHERE metric_name = 'CLS'
)
GROUP BY 1
HAVING count > 50 # Limit to relatively popular pages
ORDER BY CLS DESC
LIMIT 10

Debugowanie

Poprzednie zapytania pokazują, jak tworzyć zapytania o dane wskaźników internetowych, co jest przydatne aby poznać aktualną skuteczność i jej zmiany w czasie. Ale Co można zrobić, jeśli skuteczność jest niższa od oczekiwanej, ale nie dlaczego?

Wiedza o tym, jakie są wyniki, nie jest pomocna, jeśli nie możesz podjąć działań. i rozwiązać problemy.

Sekcja Debugowanie wydajności w polu wyjaśnia, jak to zrobić. możesz przesłać dodatkowe dane na potrzeby debugowania z danymi analitycznymi. Jeśli wykonaj instrukcje podane w tym poście, informacje pojawiają się również w BigQuery.

Przykładowe zapytania

Podane niżej zapytania pokazują, jak używać parametru zdarzenia debug_target, aby aby określić główną przyczynę problemów z wydajnością.

Najpopularniejsze elementy mające wpływ na CLS

debug_target to ciąg selektora arkusza CSS odpowiadający elementowi w stronę, która najlepiej pasuje do wartości danych.

W CLS debug_target reprezentuje największy element spośród przesunięcie układu, które miało wpływ na wartość CLS. Jeśli żadne elementy się nie przesunęły, Parametr debug_target przyjmuje wartość null.

To zapytanie uwzględni listę stron od najgorszej (najniższej) do najlepszej (CLS) 75. percentyl (pogrupowane według kolumny debug_target):

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  page_path,
  debug_target,
  APPROX_QUANTILES(metric_value, 100)[OFFSET(75)] AS CLS,
  COUNT(1) as count
FROM (
  SELECT
    REGEXP_SUBSTR((SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location"), r'\.com(\/[^?]*)') AS page_path,
    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = "debug_target") as debug_target,
    ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
    *
  FROM web_vitals_events
  WHERE metric_name = 'CLS'
)
GROUP BY 1, 2
HAVING count > 50 # Limit to relatively popular pages
ORDER BY CLS DESC

Wynik zapytania dotyczący najważniejszych elementów wpływających na CLS

Wiedza o tym, które elementy na stronie się zmieniają, powinna ułatwić Zidentyfikować i usunąć główną przyczynę problemu.

Pamiętaj, że widoczne tu elementy mogą nie być tymi samymi elementami, podczas debugowania stron lokalnie wartości ulegają zmianom. jest dla nas bardzo ważne. Bardzo trudno jest to naprawić z których nie zdajesz sobie sprawy, są problemy!

Debugowanie innych danych

Poprzednie zapytanie pokazuje wyniki dla wskaźnika CLS, ale jest on identyczny pozwala tworzyć raporty o celach debugowania LCP i INP. Tylko zastąp klauzulę „where” odpowiednim wskaźnikiem do debugowania:

WHERE metric_name = 'INP'
WHERE metric_name = 'LCP'

Informacje o debugowaniu znajdziesz w sekcji Wydajność debugowania , w którym znajdziesz instrukcje dotyczące zbierania wysyłać dane debugowania dotyczące każdego podstawowego wskaźnika internetowego.

Wyświetl wizualizację

Uzyskanie statystyk na podstawie samych wyników zapytań może być trudne. z innymi. Na przykład to zapytanie zawiera listę dziennych 75 centylów dla wartości LCP w zbiorze danych.

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  event_date,
  metric_name,
  APPROX_QUANTILES(ROUND(metric_value, 2), 100)[OFFSET(75)] AS p75
FROM
  (
    SELECT
      event_date,
      metric_name,
      ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value'), 3) AS metric_value
    FROM web_vitals_events
    WHERE
      metric_name = 'LCP'
  )
GROUP BY
  1, 2
ORDER BY event_date

Na podstawie tych wyników zapytań trudno jest określić trendy lub wyniki odstające analizując dane.

Wyniki zapytania dotyczącego dziennej wartości danych

W takich przypadkach wizualizacja danych może pomóc w szybszym wyciąganiu wniosków.

Wizualizacja wyników zapytań w Looker Studio

BigQuery umożliwia szybką wizualizację wyników zapytań za pomocą danych Studio. Looker Studio to wizualizacja danych. i narzędzia do tworzenia paneli informacyjnych, które jest bezpłatne. Aby zwizualizować wyniki zapytania, Po uruchomieniu zapytania w interfejsie BigQuery kliknij przycisk Przeglądaj dane. wybierz Przeglądaj w Looker Studio.

Opcja Eksplorowanie za pomocą Looker Studio w BigQuery

Spowoduje to utworzenie bezpośredniego połączenia między BigQuery a Looker Studio widok. W tym widoku możesz wybrać pola, które chcesz zwizualizować, typów wykresów, konfiguracji filtrów i tworzyć doraźne wykresy, aby umożliwić szybką analizę wizualną. Na podstawie wyników poprzedniego zapytania możesz utworzyć ten wykres liniowy, aby zobaczyć trend Wartości LCP w czasie:

Wykres liniowy przedstawiający dzienne wartości LCP w Looker Studio

Dzięki temu bezpośredniemu połączeniu między BigQuery a Looker Studio możesz na wykresach z zapytań i przeprowadzać analizy wizualne. Jeśli jednak chcesz przeprowadzić dodatkową analizę, warto przyjrzeć się kilku wykresom w interaktywny panel, który pozwala uzyskać bardziej całościowy widok lub umożliwia bardziej szczegółową analizę do danych. Dzięki wygodnemu panelowi nie musisz pisać zapytań i ręcznie generować wykresy za każdym razem, gdy chcesz przeanalizować swoje dane.

Panel Looker Studio możesz utworzyć za pomocą natywnego narzędzia BigQuery. . Aby to zrobić: wejdź na datastudio.google.com i utwórz nowy źródła danych, wybierz oprogramowanie sprzęgające BigQuery oraz wskaż zbiór danych, który chcesz praca z:

Korzystanie z natywnego oprogramowania sprzęgającego BigQuery w Looker Studio

Realizuj dane ze wskaźników internetowych

Podczas tworzenia paneli z danymi zdarzeń internetowych w opisany wcześniej sposób nieskuteczne używanie bezpośrednio zbioru danych eksportu Google Analytics 4. Ze względu na to, że struktury danych GA4 i wstępnego przetwarzania wymaganego na potrzeby wskaźników internetowych dane, niektóre jego części będą wielokrotnie wyświetlane. Powoduje to 2 problemy: wydajność panelu i koszty BigQuery.

Możesz użyć piaskownicy BigQuery, bez ponoszenia opłat. Za pomocą funkcji BigQuery bezpłatny poziom wykorzystania, pierwszy 1 TB danych o zapytaniach przetwarzanych miesięcznie jest bezpłatny. Metody analizy omówione w tym poście, chyba że korzystasz ze znacznie dużego zbioru danych lub regularnie wykonuje wiele zapytań, musisz być w stanie używać tego limitu co miesiąc. Ale jeśli masz witrynę często słuchaną i chcesz regularnie monitorować różne wskaźniki za pomocą szybkiego, interaktywnego panelu, sugerują wstępne przetwarzanie i materializację danych dotyczących internetowych wskaźników internetowych przy jednoczesnym korzystaniu Funkcje zwiększające wydajność BigQuery, takie jak partycjonowanie, grupowanie i buforowanie.

Poniższy skrypt wstępnie przetworzy Twoje dane BigQuery (tabelę źródłową) oraz utworzyć tabelę zmaterializowaną (tabelę docelową). Gdy używasz tego zapytania na swoim koncie do zbioru danych, możesz też zdefiniować zakres dat, zmniejsza ilość przetwarzanych danych.

# Materialize Web Vitals metrics from GA4 event export data

# Replace target table name
CREATE OR REPLACE TABLE bigquery_project_id.ga4_demo_dev.web_vitals_summary
  PARTITION BY DATE(event_timestamp)
  CLUSTER BY metric_name
AS
SELECT
  ga_session_id,
  IF(
    EXISTS(SELECT 1 FROM UNNEST(events) AS e WHERE e.event_name = 'first_visit'),
    'New user',
    'Returning user') AS user_type,
  IF(
    (SELECT MAX(session_engaged) FROM UNNEST(events)) > 0, 'Engaged', 'Not engaged')
    AS session_engagement,
  evt.* EXCEPT (session_engaged, event_name),
  event_name AS metric_name,
  FORMAT_TIMESTAMP('%Y%m%d', event_timestamp) AS event_date
FROM
  (
    SELECT
      ga_session_id,
      ARRAY_AGG(custom_event) AS events
    FROM
      (
        SELECT
          ga_session_id,
          STRUCT(
            country,
            device_category,
            device_os,
            traffic_medium,
            traffic_name,
            traffic_source,
            page_path,
            debug_target,
            event_timestamp,
            event_name,
            metric_id,
            IF(event_name = 'LCP', metric_value / 1000, metric_value) AS metric_value,
            user_pseudo_id,
            session_engaged,
            session_revenue) AS custom_event
        FROM
          (
            SELECT
              (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')
                AS ga_session_id,
              (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
                AS metric_id,
              ANY_VALUE(device.category) AS device_category,
              ANY_VALUE(device.operating_system) AS device_os,
              ANY_VALUE(traffic_source.medium) AS traffic_medium,
              ANY_VALUE(traffic_source.name) AS traffic_name,
              ANY_VALUE(traffic_source.source) AS traffic_source,
              ANY_VALUE(
                REGEXP_SUBSTR(
                  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'),
                  r'^[^?]+')) AS page_path,
              ANY_VALUE(
                (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'debug_target'))
                AS debug_target,
              ANY_VALUE(user_pseudo_id) AS user_pseudo_id,
              ANY_VALUE(geo.country) AS country,
              ANY_VALUE(event_name) AS event_name,
              SUM(ecommerce.purchase_revenue) AS session_revenue,
              MAX(
                (
                  SELECT
                    COALESCE(
                      value.double_value, value.int_value, CAST(value.string_value AS NUMERIC))
                  FROM UNNEST(event_params)
                  WHERE key = 'session_engaged'
                )) AS session_engaged,
              TIMESTAMP_MICROS(MAX(event_timestamp)) AS event_timestamp,
              MAX(
                (
                  SELECT COALESCE(value.double_value, value.int_value)
                  FROM UNNEST(event_params)
                  WHERE key = 'metric_value'
                )) AS metric_value,
            FROM
              # Replace source table name
              `bigquery_project_id.analytics_XXXXX.events_*`
            WHERE
              event_name IN ('LCP', 'INP', 'CLS', 'first_visit', 'purchase')
            GROUP BY
              1, 2
          )
      )
    WHERE
      ga_session_id IS NOT NULL
    GROUP BY ga_session_id
  )
CROSS JOIN UNNEST(events) AS evt
WHERE evt.event_name NOT IN ('first_visit', 'purchase');

Ten zmaterializowany zbiór danych ma kilka zalet:

  • Struktura danych jest spłaszczona i ułatwia tworzenie zapytań.
  • Zachowuje on tylko zdarzenia wskaźników internetowych z pierwotnego zbioru danych GA4.
  • Identyfikator sesji, typ użytkownika (nowi a powracający) oraz informacje o zaangażowaniu w sesję jest dostępny bezpośrednio w kolumnach.
  • Tabela to partycje według data i grupowanie według nazwy danych. Zwykle zmniejsza to ilość przetworzonych danych zapytania.
  • Do tworzenia zapytań dotyczących tej tabeli nie trzeba używać symboli wieloznacznych, więc wyniki zapytania mogą są przechowywane w pamięci podręcznej przez maksymalnie 24 godziny. Zmniejsza to koszty związane z powtarzaniem tego samego zapytania.
  • Jeśli korzystasz z silnika analityki biznesowej BigQuery, możesz uruchomić zoptymalizowane funkcje SQL w tej metodzie tabeli.

Możesz bezpośrednio przesłać zapytanie do tej zmaterializowanej tabeli z poziomu interfejsu użytkownika BigQuery lub jej użyć w Looker Studio za pomocą oprogramowania sprzęgającego BigQuery.

Korzystanie z oprogramowania sprzęgającego Web Vitals

Ponieważ utworzenie panelu od podstaw jest czasochłonne, opracowaliśmy pakiet które utworzy dla Ciebie panel z szablonami. Najpierw upewnij się, że udało Ci się zmaterializować tabelę wskaźników internetowych przy użyciu poprzedniego zapytania. Następnie otwórz Oprogramowanie sprzęgające Web Vitals w Looker Studio, korzystając z tego linku: goo.gle/web-vitals-connector

Po przyznaniu jednorazowej autoryzacji powinno wyświetlić się następujący komunikat ekran konfiguracji:

Ekran autoryzacji oprogramowania sprzęgającego Web Vitals

Podaj identyfikator zmaterializowanej tabeli BigQuery (tj. tabelę docelową) i Identyfikator projektu rozliczeniowego BigQuery. Po kliknięciu Połącz Looker Studio utworzy do tworzenia nowego panelu opartego na szablonie i powiązania z nim danych. Możesz edytować, modyfikować, i udostępniać panel według własnego uznania. Jeśli utworzysz panel tylko raz, kliknij ponownie link oprogramowania sprzęgającego, chyba że chcesz utworzyć z paneli informacyjnych z różnych zbiorów danych.

W panelu możesz obserwować dzienne trendy dotyczące wskaźników internetowych. i niektóre informacje o korzystaniu z witryny, takie jak użytkownicy i sesje, kartę Podsumowanie.

Na karcie Analiza użytkowników możesz wybrać dane, a potem zobaczyć zestawienie obejmujące danych, jak i liczby użytkowników w różnych sytuacjach. danych.

Karta Analiza ścieżki strony ułatwia wykrywanie problematycznych obszarów witryny. Tutaj możesz wybrać dane, aby wyświetlić ogólne informacje. Widać też mapa rozproszona wszystkich ścieżek do stron z wartością percentyla na osi y i dla rejestracji na osi x. Mapa punktowa może pomóc w identyfikacji stron o niższej niż oczekiwane. Po wybraniu stron przy użyciu wykresu punktowego tabeli Ścieżka do strony, możesz dokładniej przeanalizować problem, wyświetlając tabelę Debugowanie docelowe.

Karta Analiza przychodów pokazuje, jak możesz monitorować działalność i dane o skuteczności w tym samym miejscu. W tej sekcji znajdziesz dane o wszystkich sesjach, w których użytkownik dokonał zakupu. Można porównywać przychody z wrażeniami użytkowników podczas konkretnej sesji .

Zaawansowane użycie

Gdy lepiej poznasz zbiór danych, możesz edytować panel i dodawać aby tworzyć bardziej szczegółowe i ukierunkowane analizy. Zwiększanie możliwości panelu możesz wykonać te czynności:

  • Skonfiguruj zaplanowane zapytanie w BigQuery, aby uzyskać zaktualizowane dane. Realizacja uruchomione wcześniej zapytanie zawiera tylko przegląd danych w danym momencie. Jeśli Aby zapewnić aktualność informacji w panelu, możesz uruchomić które będzie uruchamiane codziennie i doda do Twojej tabeli zmaterializowanej nowe i skalowalnych danych.
  • Złączaj dane własne (np. z systemu CRM), aby uzyskiwać statystyki biznesowe. W zmaterializowanym tabeli, możesz dodać kolumnę user_id jako oddzielną kolumnę. Dzięki temu możesz dołączyć do danych własnych. Jeśli danych własnych nie ma jeszcze w BigQuery, możesz: wczytaj dane albo używasz danych sfederowanych
  • Zgłoś wersję witryny lub aplikacji jako parametr w danych przesyłanych do Google Analytics i dodaj ją jako kolumnę w tabeli zmaterializowanej. Następnie możesz dodać jako wymiar na wykresach, co ułatwia zmiany wersji wpływają na wydajność.
  • Jeśli spodziewasz się znacząco dużego wykorzystania zbioru danych przez bezpośrednie lub panelu, spróbuj użyć płatnej wersji BigQuery BI, Wyszukiwarka.

Podsumowanie

W tym poście omówiliśmy podstawy korzystania z Google Analytics 4 i BigQuery, mierzyć i debugować wydajność na podstawie zebranych w terenie danych o rzeczywistych użytkownikach. it pokazał też, jak tworzyć automatyczne raporty i panele informacyjne za pomocą Looker Studio oraz oprogramowanie sprzęgające Web Vitals, aby możliwie najprostszą wizualizację danych.

Oto kilka kluczowych wniosków z tego posta:

  • Pomiar skuteczności na podstawie rzeczywistych danych użytkowników jest kluczowy debugowaniu i optymalizacji witryny.
  • Możesz uzyskać dokładniejsze statystyki, gdy dane o skuteczności i informacje o Twojej firmie i wskaźniki są w tym samym systemie. Google Analytics i BigQuery sprawiają, jak to tylko możliwe.
  • Eksport nieprzetworzonych danych Google Analytics do BigQuery zapewnia nieograniczone możliwości dogłębną, niestandardową analizę z użyciem języka zapytań, który prawdopodobnie już znasz.
  • Google oferuje wiele interfejsów API i narzędzi do wizualizacji, takich jak Looker Studio, pozwalają tworzyć raporty dokładnie tak, jak sobie tego życzysz. stworzona przez nas.