Mengukur dan melakukan debug performa dengan Google Analytics 4 dan BigQuery

Pelajari cara mengirimkan data Web Vitals ke properti Google Analytics 4 dan mengekspor data tersebut untuk dianalisis di BigQuery dan Looker Studio.

Google menyediakan sejumlah alat—Penelusuran Konsol, PageSpeed Insight (PSI), dan Pengalaman Pengguna Chrome Laporan (CrUX)—yang memungkinkan developer melihat performa situs mereka terhadap Web Inti Metrik Vitals untuk pengguna nyata mereka di .

Alat tersebut memberikan gambaran tingkat tinggi tentang kegunaan situs Anda kinerja pengguna nyata, dan mereka tidak membutuhkan pengaturan untuk mulai digunakan.

Namun, ada beberapa alasan penting mengapa Anda tidak ingin mengandalkan hanya alat untuk mengukur performa situs:

  • Alat berbasis CrUX melaporkan data berdasarkan periode 28 hari bulanan atau sebelumnya. Ini berarti Anda harus menunggu lama setelah melakukan perubahan sebelum Anda dapat melihat hasilnya.
  • Alat berbasis CrUX hanya dapat disegmentasikan menurut jumlah dimensi yang terbatas, seperti negara, jenis koneksi, dan kategori perangkat (desktop atau seluler). Anda tidak bisa mengelompokkan data menurut dimensi yang spesifik untuk bisnis Anda (misalnya: engagement pengguna, pengguna dalam grup eksperimen tertentu, dll.).
  • Alat berbasis CrUX dapat memberi tahu Anda apa performa Anda, tetapi tidak dapat membedakannya kepada Anda mengapa. Dengan alat analisis, Anda dapat mengirim data tambahan untuk membantu melacak dan men-debug masalah.

Oleh karena itu, sebaiknya semua pemilik situs memantau metrik Core Web Vitals menggunakan alat analisis yang sudah ada. Postingan ini menjelaskan cara menggunakan alat yang ditawarkan oleh Google untuk melakukan hal itu.

Setelah semuanya disiapkan, Anda dapat membuat dasbor seperti ini:

Screenshot laporan Web Vitals Connector

Screenshot laporan Web Vitals Connector

Jika Anda ingin mendapatkan ringkasan visual dari semua langkah yang diuraikan di sini, lihat pembicaraan kami dari Google I/O '21:

Ukur

Mengukur kinerja selalu dapat dilakukan dengan Google Analytics menggunakan metrik kustom, tetapi ada adalah beberapa fitur baru di Google Analytics 4 (GA4) yang developer secara khusus harus menarik minat pengguna.

Meskipun antarmuka web Google Analytics memiliki alat analisis yang canggih, sulit untuk mengalahkan kekuatan dan fleksibilitas akses data peristiwa mentah menggunakan kueri bahasa yang mungkin sudah Anda ketahui.

Untuk mulai mengukur Core Web Vitals menggunakan Google Analytics 4 dan BigQuery, Anda harus melakukan tiga hal:

  1. Membuat Google Analytics 4 properti dan Project BigQuery.
  2. Mengaktifkan BigQuery Export di konfigurasi properti Google Analytics, sehingga semua data yang Anda terima akan yang otomatis terisi di tabel project BigQuery Anda.
  3. Menambahkan JavaScript web-vitals ke situs Anda, sehingga Anda dapat mengukur metrik Core Web Vitals dan mengirim data ke Google Analytics 4, termasuk data atribusi.

Analisis

Setelah Anda siap, Anda akan melihat data peristiwa terisi di BigQuery dan Anda akan dapat melakukan kueri data seperti ini:

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

Berikut adalah pratinjau hasil kueri tersebut:

Data peristiwa Web Vitals di BigQuery

Membuat kueri data Web Vitals

Sebelum mulai membuat kueri data peristiwa Web Vitals, Anda harus memahami bagaimana data diagregasi.

Hal yang paling penting untuk dipahami adalah, dalam beberapa kasus, beberapa peristiwa mungkin diterima untuk metrik yang sama, pada halaman yang sama. Hal ini bisa terjadi jika nilai metrik perubahan dan nilai yang diperbarui dilaporkan (kejadian umum dengan CLS).

Untuk peristiwa Data Web, nilai terakhir yang dikirim adalah yang paling akurat, jadi sebelum melakukan analisis apa pun, sebaiknya filter nilai-nilai tersebut saja. Cuplikan kode yang disediakan oleh library JavaScript web-vitals untuk mengirim data ke Google Analytics 4 menyertakan pengiriman ID unik per metrik, sehingga Anda dapat menggunakan untuk membatasi hasil Anda hanya ke nilai yang terakhir diterima untuk ID metrik:

# 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
)

Perhatikan bahwa semua kueri lain yang dirujuk dalam posting ini akan dimulai dengan sub kueri.

Contoh kueri

Beberapa bagian berikutnya menunjukkan beberapa contoh kueri Data Web umum yang mungkin ingin dijalankan.

LCP, INP, dan CLS dengan persentil 75% (p75) di seluruh situs

# 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

Semua nilai LCP individual dari tertinggi hingga terendah

# 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 halaman teratas dengan CLS terburuk (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

Debug

Kueri sebelumnya menunjukkan cara membuat kueri data metrik Data Web, yang sangat membantu untuk memahami performa Anda saat ini dan trennya dari waktu ke waktu. Tapi apa yang dapat Anda lakukan jika kinerja Anda lebih buruk dari yang diharapkan tetapi Anda tidak yakin kenapa?

Mengetahui apa skor yang tidak membantu jika Anda tidak dapat mengambil tindakan dan memperbaiki masalah.

Men-debug performa dalam kolom menjelaskan caranya Anda dapat mengirim informasi debug tambahan dengan data analisis. Jika Anda ikuti petunjuk yang dijelaskan dalam posting tersebut, Anda akan melihat bahwa informasi di BigQuery juga.

Contoh kueri

Kueri berikut menunjukkan cara menggunakan parameter peristiwa debug_target untuk membantu mengidentifikasi penyebab utama dari masalah performa.

Elemen teratas yang berkontribusi pada CLS

debug_target adalah string pemilih CSS yang sesuai dengan elemen di halaman yang paling relevan dengan nilai metrik.

Dengan CLS, debug_target akan merepresentasikan elemen terbesar dari pergeseran tata letak yang berkontribusi pada nilai CLS. Jika tidak ada elemen yang bergeser, maka Nilai debug_target akan menjadi null.

Kueri berikut akan mencantumkan halaman dari yang terburuk hingga terbaik berdasarkan CLS-nya di urutan ke-75 persentil, dikelompokkan menurut 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

Hasil kueri untuk elemen teratas yang berkontribusi pada CLS

Mengetahui elemen apa pada laman yang berubah seharusnya membuat pengguna lebih mudah mengidentifikasi dan memperbaiki akar penyebab masalah.

Perlu diingat bahwa elemen yang dilaporkan di sini mungkin bukan elemen yang sama dengan Anda melihat perubahan saat men-debug halaman Anda secara lokal, itulah sebabnya penting untuk menangkap data ini sejak awal. Sangat sulit untuk memperbaiki sesuatu yang tidak Anda sadari adalah masalah!

Men-debug metrik lainnya

Kueri sebelumnya menampilkan hasil untuk metrik CLS, tetapi sama persis dapat digunakan untuk melaporkan target debug untuk LCP dan INP. Hanya ganti klausa where dengan metrik yang relevan untuk di-debug:

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

Sekali lagi, Anda dapat melihat Performa debug di untuk mendapatkan petunjuk tentang cara mengumpulkan dan mengirim informasi debug untuk setiap metrik Core Web Vitals.

Memvisualisasikan

Mungkin akan sulit untuk mendapatkan insight hanya dengan melihat hasil kueri sendirian. Misalnya, kueri berikut mencantumkan nilai persentil ke-75 harian untuk LCP dalam set data.

# 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

Dari hasil kueri ini, sulit untuk mengidentifikasi tren atau {i>outlier<i} hanya dengan melihat data.

Hasil kueri nilai metrik harian

Dalam kasus seperti itu, memvisualisasikan data dapat membantu Anda mendapatkan wawasan dengan lebih cepat.

Memvisualisasikan hasil kueri di Looker Studio

BigQuery menyediakan cara cepat untuk memvisualisasikan hasil kueri melalui Data di Studio. Looker Studio adalah visualisasi data dan dasbor yang gratis untuk digunakan. Untuk memvisualisasikan hasil kueri, setelah menjalankan kueri Anda di UI BigQuery, klik tombol Explore Data dan pilih Jelajahi dengan Looker Studio.

Opsi Jelajahi dengan Looker Studio di BigQuery

Tindakan ini akan membuat link langsung dari BigQuery ke Looker Studio dalam eksplorasi {i>view<i}. Dalam tampilan ini, Anda bisa memilih bidang yang ingin divisualisasikan, memilih jenis diagram, menyiapkan filter, dan membuat diagram {i>ad hoc <i}untuk analisis visual yang cepat. Dari hasil kueri sebelumnya, Anda dapat membuat diagram garis ini untuk melihat tren Nilai LCP dari waktu ke waktu:

Diagram garis nilai LCP harian di Looker Studio

Dengan link langsung antara BigQuery dan Looker Studio ini, Anda dapat membuat bagan dari kueri mana pun dan melakukan analisis visual. Namun, jika Anda ingin melakukan analisis tambahan, Anda mungkin ingin melihat beberapa bagan dalam dasbor interaktif untuk mendapatkan tampilan yang lebih menyeluruh atau untuk melihat perincian ke dalam data. Memiliki dasbor yang berguna berarti Anda tidak perlu menulis kueri dan membuat diagram secara manual setiap kali Anda ingin menganalisis metrik.

Anda dapat membuat dasbor di Looker Studio menggunakan BigQuery native konektor. Untuk melakukannya, buka datastudio.google.com, buat browser baru sumber data, pilih konektor BigQuery, dan pilih set data yang ingin Anda bekerja dengan:

Menggunakan konektor native BigQuery di Looker Studio

Mewujudkan data Web Vitals

Saat membuat dasbor data peristiwa Web Vitals seperti yang dijelaskan sebelumnya, tidak efisien menggunakan set data ekspor Google Analytics 4 secara langsung. Karena struktur data GA4 dan pra-pemrosesan yang diperlukan untuk Data Web metrik, bagian dari kueri Anda pada akhirnya akan berjalan beberapa kali. Hal ini menciptakan dua masalah: kinerja dasbor dan biaya BigQuery.

Anda dapat menggunakan sandbox BigQuery mode tanpa biaya. Dengan antarmuka paket penggunaan gratis, Gratis 1 TB data kueri pertama yang diproses setiap bulan. Untuk metode analisis yang dibahas dalam posting ini, kecuali jika Anda menggunakan {i>dataset<i} yang sangat besar atau sering melakukan kueri {i>dataset <i}secara teratur, Anda harus dapat bertahan di dalam batas gratis ini setiap bulan. Tetapi jika Anda memiliki situs web dengan lalu lintas yang tinggi dan ingin memantau berbagai metrik secara teratur menggunakan dasbor interaktif yang cepat, kami menyarankan untuk melakukan pra-pemrosesan dan mewujudkan data web vitals Fitur efisiensi BigQuery seperti partisi, pengelompokan, dan cache.

Skrip berikut akan melakukan pra-pemrosesan data BigQuery (tabel sumber) dan buat tabel terwujud (tabel target). Saat menggunakan kueri ini untuk Anda sendiri Anda mungkin juga ingin menentukan rentang tanggal untuk tabel sumber untuk menurunkan jumlah data yang diproses.

# 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');

Set data terwujud ini memiliki beberapa keuntungan:

  • Struktur data sudah diratakan dan lebih mudah untuk dikueri.
  • Data ini hanya mempertahankan peristiwa Web Vitals dari set data GA4 asli.
  • ID sesi, jenis pengguna (baru versus yang kembali), dan informasi engagement sesi langsung tersedia di kolom.
  • Tabelnya adalah dipartisi oleh tanggal dan dikelompokkan menurut nama metrik. Ini biasanya mengurangi jumlah data yang diproses untuk setiap kueri.
  • Karena Anda tidak perlu menggunakan {i>wildcard <i} untuk membuat kueri tabel ini, hasil kueri dapat di-cache hingga 24 jam. Hal ini mengurangi biaya dari pengulangan materi yang sama kueri.
  • Jika menggunakan mesin BigQuery BI, Anda dapat menjalankan fungsi SQL yang dioptimalkan dan operator di tabel sementara.

Anda dapat langsung membuat kueri tabel terwujud ini dari dalam UI BigQuery atau menggunakannya di Looker Studio menggunakan konektor BigQuery.

Menggunakan Web Vitals Connector

Karena membuat dasbor dari awal memakan waktu, kami mengembangkan solusi yang akan membuat dasbor template untuk Anda. Pertama-tama pastikan bahwa Anda telah mewujudkan tabel Data Web Anda menggunakan kueri sebelumnya. Kemudian, akses Konektor Web Vitals untuk Looker Studio menggunakan link ini: goo.gle/web-vitals-connector

Setelah memberikan otorisasi satu kali, Anda akan melihat hal berikut layar konfigurasi:

Layar otorisasi Web Vitals Connector

Berikan ID tabel BigQuery yang terwujud (yaitu tabel target) dan ID project penagihan BigQuery. Setelah mengklik hubungkan, Looker Studio akan membuat menggunakan template dasbor baru dan menghubungkan data Anda dengannya. Anda dapat mengedit, mengubah, dan bagikan dasbor sesuai keinginan Anda. Jika Anda membuat dasbor satu kali, Anda tidak mengunjungi link konektor lagi, kecuali jika Anda ingin membuat beberapa dasbor dari {i>dataset <i}yang berbeda.

Saat membuka dasbor, Anda dapat melihat tren harian Data Web metrik dan beberapa informasi penggunaan untuk situs Anda seperti pengguna dan sesi, di tab Ringkasan.

Di tab Analisis Pengguna, Anda dapat memilih metrik, lalu mendapatkan perincian persentil metrik serta jumlah pengguna menurut penggunaan dan metrik.

Tab Analisis Jalur Halaman akan membantu Anda mengidentifikasi area masalah pada situs Anda. Di sini, Anda dapat memilih metrik untuk melihat ringkasan. Namun, Anda juga melihat peta sebar dari semua jalur halaman dengan nilai persentil pada sumbu y dan catat dihitung pada sumbu x. Peta sebar dapat membantu mengidentifikasi halaman yang memiliki daripada nilai metrik yang diharapkan. Setelah Anda memilih halaman menggunakan tabel Jalur halaman, Anda dapat melihat perincian lebih lanjut area masalah dengan menampilkan tabel Debug Target.

Tab Analisis Pendapatan adalah contoh cara memantau bisnis Anda dan metrik performa di tempat yang sama. Bagian ini merencanakan semua sesi di mana pengguna melakukan pembelian. Anda dapat membandingkan pendapatan yang diperoleh dengan pengalaman pengguna selama sesi tertentu .

Penggunaan lanjutan

Saat Anda semakin terbiasa dengan {i>dataset<i}, Anda dapat mengedit dasbor dan menambahkan bagan Anda sendiri untuk analisis yang lebih mendalam dan bertarget. Untuk membuat dasbor lebih berguna, Anda dapat melakukan langkah-langkah berikut:

  • Siapkan kueri terjadwal di BigQuery untuk mendapatkan data yang diperbarui. Materialisasi yang kita jalankan sebelumnya hanya mengambil cuplikan dari data Anda pada saat itu. Jika Anda ingin dasbor Anda tetap diperbarui dengan data baru, Anda dapat menjalankan yang akan berjalan setiap hari dan menambahkan tabel terwujud Anda dengan layanan otomatis dan data skalabel.
  • Gabungkan data pihak pertama (misalnya, CRM) untuk mendapatkan insight bisnis. Dalam materi tabel, Anda dapat menambahkan user_id sebagai kolom terpisah. Ini akan memungkinkan Anda bergabung dengan data pihak pertama. Jika data pihak pertama Anda belum ada di BigQuery, Anda dapat memuat data atau gunakan data gabungan sumber Google Cloud.
  • Laporkan versi situs atau aplikasi Anda sebagai parameter dalam data yang Anda kirim ke Google Analytics, lalu menambahkannya sebagai kolom dalam tabel terwujud. Lalu Anda dapat menambahkan data versi tersebut sebagai dimensi dalam diagram agar lebih mudah dilihat perubahan versi akan mempengaruhi performa.
  • Jika Anda memperkirakan penggunaan {i>dataset <i}yang signifikan melalui hubungan atau dasbor, Anda dapat mencoba menggunakan versi berbayar BigQuery BI Compute Engine.

Ringkasan

Postingan ini membahas dasar-dasar cara menggunakan Google Analytics 4 dan BigQuery untuk mengukur dan men-debug performa dengan data pengguna nyata yang dikumpulkan di lapangan. Ini juga menjelaskan cara membuat laporan dan dasbor otomatis menggunakan Looker Studio dan Konektor Data Web untuk melakukan memvisualisasikan data semudah mungkin.

Beberapa poin penting dari postingan ini:

  • Mengukur performa dengan data pengguna nyata sangat penting untuk pemahaman, proses debug, dan pengoptimalan situs.
  • Anda bisa mendapatkan insight yang lebih mendalam saat metrik performa dan bisnis Anda metrik berada dalam sistem yang sama. Google Analytics dan BigQuery membuatnya sebaik mungkin.
  • BigQuery Export data Google Analytics mentah memberi Anda potensi tak terbatas untuk analisis kustom yang mendalam menggunakan bahasa kueri yang mungkin sudah Anda ketahui.
  • Google memiliki sejumlah API dan alat visualisasi seperti Looker Studio yang memberikan Anda bebas menyusun laporan sesuai keinginan Anda dibuat.