Đo lường và gỡ lỗi về hiệu suất bằng Google Analytics 4 và BigQuery

Tìm hiểu cách gửi dữ liệu Các chỉ số quan trọng về trang web đến các tài sản Google Analytics 4 và xuất dữ liệu để phân tích trong BigQuery và Looker Studio.

Google cung cấp một số công cụ — Search Console, PageSpeed Insights (PSI) và Báo cáo trải nghiệm người dùng của Chrome (CrUX) — cho phép các nhà phát triển xem hiệu suất của trang web của họ so với các chỉ số Chỉ số quan trọng chính của trang web cho người dùng thực của họ trong trường.

Những công cụ này rất hiệu quả vì chúng cung cấp cho bạn thông tin tổng quan về hiệu suất của người dùng thực tế trên trang web của bạn và hoàn toàn không cần phải thiết lập để bắt đầu sử dụng.

Tuy nhiên, có một vài lý do quan trọng khiến bạn không muốn chỉ dựa vào các công cụ này để đo lường hiệu suất của trang web:

  • Các công cụ dựa trên CrUX sẽ báo cáo dữ liệu theo khoảng thời gian hằng tháng hoặc 28 ngày trước đó. Điều này có nghĩa là bạn sẽ phải đợi một thời gian dài sau khi thực hiện bất kỳ thay đổi nào thì mới có thể thấy kết quả.
  • Bạn chỉ có thể phân đoạn các công cụ dựa trên CrUX theo một số ít phương diện, chẳng hạn như quốc gia, loại kết nối và danh mục thiết bị (máy tính hoặc thiết bị di động). Bạn không thể chia nhỏ dữ liệu theo các phương diện dành riêng cho doanh nghiệp của mình (ví dụ: người dùng đã tương tác, người dùng trong một nhóm thử nghiệm cụ thể, v.v.).
  • Các công cụ dựa trên CrUX có thể cho bạn biết hiệu suất của bạn là gì, nhưng không thể cho bạn biết lý do. Với các công cụ phân tích, bạn có thể gửi thêm dữ liệu để giúp theo dõi và gỡ lỗi.

Vì lý do này, tất cả chủ sở hữu trang web nên theo dõi các chỉ số Chỉ số quan trọng chính của trang web bằng công cụ phân tích hiện có. Bài đăng này giải thích cách bạn có thể sử dụng các công cụ miễn phí do Google cung cấp để làm việc đó.

Sau khi thiết lập xong mọi thứ, bạn có thể tạo các trang tổng quan như sau:

Ảnh chụp màn hình báo cáo Trình kết nối Các chỉ số quan trọng về trang web

Ảnh chụp màn hình báo cáo Trình kết nối Các chỉ số quan trọng về trang web

Còn nếu bạn muốn xem hình ảnh tổng quan về tất cả các bước đã nêu ở đây, hãy xem bài nói chuyện của chúng tôi tại Google I/O '21:

Đo

Google Analytics luôn có thể đo lường hiệu suất bằng cách sử dụng các chỉ số tuỳ chỉnh. Tuy nhiên, có một số tính năng mới trong Google Analytics 4 (GA4) mà các nhà phát triển đặc biệt nên quan tâm.

Mặc dù giao diện web của Google Analytics có các công cụ phân tích mạnh mẽ, nhưng thật khó để vượt qua sức mạnh và sự linh hoạt của quyền truy cập dữ liệu sự kiện thô bằng cách sử dụng ngôn ngữ truy vấn mà bạn có thể đã biết.

Để bắt đầu đo lường Các chỉ số quan trọng về trang web bằng Google Analytics 4 và BigQuery, bạn cần làm 3 việc sau:

  1. Tạo tài sản Google Analytics 4dự án BigQuery.
  2. Bật tính năng Xuất BigQuery trong cấu hình tài sản Google Analytics để tất cả dữ liệu mà bạn nhận được sẽ tự động được điền vào bảng dự án BigQuery.
  3. Thêm thư viện JavaScript web-vitals vào trang web của bạn để bạn có thể đo lường các chỉ số Các chỉ số quan trọng về trang web và gửi dữ liệu đến Google Analytics 4.

Phân tích

Sau khi thiết lập xong, bạn sẽ thấy dữ liệu sự kiện được điền trong giao diện BigQuery và bạn có thể truy vấn dữ liệu như sau:

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

Dưới đây là bản xem trước kết quả của truy vấn đó:

Dữ liệu sự kiện cho Các chỉ số quan trọng về trang web trong BigQuery

Truy vấn dữ liệu Chỉ số quan trọng của trang web

Trước khi bắt đầu truy vấn dữ liệu sự kiện Các chỉ số quan trọng về trang web, bạn cần hiểu cách tổng hợp dữ liệu.

Điều quan trọng nhất bạn cần hiểu là trong một số trường hợp, bạn có thể nhận được nhiều sự kiện cho cùng một chỉ số trên cùng một trang. Điều này có thể xảy ra nếu giá trị chỉ số thay đổi và giá trị đã cập nhật được báo cáo (điều này thường xảy ra với CLS).

Đối với các sự kiện Các chỉ số quan trọng về trang web, giá trị được gửi gần đây nhất luôn là giá trị chính xác nhất. Vì vậy, trước khi thực hiện bất kỳ hoạt động phân tích nào, bạn cần chỉ lọc các giá trị đó. Đoạn mã do thư viện JavaScript quan trọng cung cấp để gửi dữ liệu đến Google Analytics 4 bao gồm việc gửi một mã nhận dạng duy nhất cho mỗi chỉ số. Vì vậy, bạn có thể sử dụng truy vấn sau để giới hạn kết quả chỉ còn giá trị nhận được sau cùng cho mỗi mã chỉ số:

# 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', 'FID', '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
)

Xin lưu ý rằng tất cả các truy vấn khác được tham chiếu trong bài đăng này sẽ bắt đầu bằng truy vấn con này.

Trong các phần tiếp theo, bạn nên chạy một vài ví dụ về các truy vấn Các chỉ số quan trọng về trang web phổ biến.

Cụm từ tìm kiếm ví dụ

LCP, FID và CLS ở phân vị 75% (p75) trên toàn bộ trang web

# 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', 'FID', '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

Tất cả các giá trị LCP riêng lẻ từ cao nhất đến thấp nhất

# 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', 'FID', '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', 'FID', '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 trang hàng đầu có điểm CLS thấp nhất (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', 'FID', '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

Gỡ lỗi

Các cụm từ tìm kiếm ở trên cho biết cách truy vấn dữ liệu chỉ số Các chỉ số quan trọng về trang web. Dữ liệu này rất hữu ích để bạn nắm được hiệu suất hiện tại và xu hướng thay đổi theo thời gian. Nhưng bạn có thể làm gì nếu hiệu suất kém hơn dự kiến nhưng bạn không biết chắc vì sao?

Nếu bạn không thể hành động và khắc phục vấn đề thì việc biết được điểm sẽ không giúp ích cho bạn.

Hiệu suất gỡ lỗi trong trường giải thích cách bạn có thể gửi thêm thông tin gỡ lỗi bằng dữ liệu phân tích. Nếu làm theo hướng dẫn chi tiết trong bài đăng đó, bạn sẽ thấy thông tin gỡ lỗi cũng xuất hiện trong BigQuery.

Các truy vấn sau đây cho biết cách sử dụng thông số sự kiện debug_target để giúp xác định nguyên nhân gốc rễ của các vấn đề về hiệu suất.

Cụm từ tìm kiếm ví dụ

Những yếu tố hàng đầu đóng góp vào CLS (Điểm số tổng hợp về mức thay đổi bố cục)

debug_target là một chuỗi bộ chọn CSS tương ứng với phần tử trên trang liên quan nhất đến giá trị chỉ số.

Với CLS, debug_target đại diện cho thành phần lớn nhất trong số những lần thay đổi bố cục lớn nhất góp phần tạo ra giá trị CLS. Nếu không có phần tử nào được thay đổi, thì giá trị debug_target sẽ là null.

Cụm từ tìm kiếm sau đây sẽ liệt kê các trang từ kém nhất đến tốt nhất theo CLS ở phân vị thứ 75, được nhóm theo 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', 'FID', '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

Kết quả truy vấn về những phần tử hàng đầu góp phần vào CLS (Điểm số tổng hợp về mức thay đổi bố cục)

Việc biết được các phần tử nào trên trang đang thay đổi sẽ giúp bạn dễ dàng xác định và khắc phục nguyên nhân gốc của vấn đề.

Xin lưu ý rằng các thành phần được báo cáo ở đây có thể không giống với những thành phần mà bạn thấy thay đổi khi gỡ lỗi cục bộ cho các trang của mình. Đó là lý do tại sao việc thu thập dữ liệu này ngay từ đầu lại rất quan trọng. Sẽ rất khó để giải quyết những vấn đề mà bạn không nhận ra là vấn đề!

Gỡ lỗi các chỉ số khác

Truy vấn ở trên cho thấy kết quả của chỉ số CLS, nhưng bạn có thể sử dụng chính kỹ thuật này để báo cáo về mục tiêu gỡ lỗi cho LCP và FID. Bạn chỉ cần thay thế mệnh đề where bằng chỉ số có liên quan để gỡ lỗi:

WHERE metric_name = 'CLS'
WHERE metric_name = 'LCP'

Xin nhắc lại, bạn có thể tham khảo bài viết Gỡ lỗi hiệu suất trong trường để biết hướng dẫn về cách thu thập và gửi thông tin gỡ lỗi cho từng chỉ số Các chỉ số quan trọng về trang web.

Hình ảnh hóa

Nếu chỉ xem xét kết quả truy vấn thì bạn có thể gặp khó khăn khi nhận thông tin chi tiết. Ví dụ: truy vấn sau đây liệt kê các giá trị hằng ngày ở bách phân vị thứ 75 cho LCP trong tập dữ liệu.

# 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', 'FID', '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

Từ những kết quả truy vấn này, thật khó để xác định xu hướng hoặc điểm ngoại lai chỉ bằng cách xem xét dữ liệu.

Kết quả truy vấn giá trị chỉ số hằng ngày

Trong những trường hợp như vậy, việc trực quan hoá dữ liệu có thể giúp bạn rút ra thông tin chi tiết nhanh hơn.

Trực quan hoá kết quả truy vấn trong Looker Studio

BigQuery cung cấp một cách nhanh chóng để trực quan hoá mọi kết quả truy vấn thông qua Data Studio. Looker Studio là một công cụ trang tổng quan và trực quan hoá dữ liệu, miễn phí sử dụng. Để trực quan hoá kết quả truy vấn, sau khi chạy truy vấn trong giao diện người dùng BigQuery, hãy nhấp vào nút Khám phá dữ liệu rồi chọn Khám phá bằng Looker Studio.

Khám phá bằng tuỳ chọn Looker Studio trong BigQuery

Thao tác này sẽ tạo một đường liên kết trực tiếp từ BigQuery đến Looker Studio trong chế độ xem khám phá. Trong chế độ xem này, bạn có thể chọn các trường mà bạn muốn biểu diễn trực quan, chọn loại biểu đồ, thiết lập bộ lọc và tạo biểu đồ đặc biệt để phân tích trực quan nhanh chóng. Từ các kết quả truy vấn ở trên, bạn có thể tạo biểu đồ dạng đường này để xem xu hướng của các giá trị LCP theo thời gian:

Biểu đồ dạng đường về các giá trị LCP hằng ngày trong Looker Studio

Với mối liên kết trực tiếp này giữa BigQuery và Looker Studio, bạn có thể tạo biểu đồ nhanh từ bất kỳ truy vấn nào và thực hiện phân tích trực quan. Tuy nhiên, nếu muốn phân tích thêm, bạn nên xem một số biểu đồ trong trang tổng quan tương tác để có cái nhìn toàn diện hơn hoặc xem chi tiết dữ liệu. Khi có một trang tổng quan hữu ích, bạn sẽ không phải viết truy vấn và tạo biểu đồ theo cách thủ công mỗi khi muốn phân tích các chỉ số.

Bạn có thể tạo trang tổng quan trong Looker Studio bằng trình kết nối BigQuery gốc. Để thực hiện việc này, hãy chuyển đến datastudio.google.com, tạo một nguồn dữ liệu mới, chọn trình kết nối BigQuery rồi chọn tập dữ liệu bạn muốn làm việc:

Sử dụng trình kết nối gốc của BigQuery trong Looker Studio

Cụ thể hoá dữ liệu Các chỉ số quan trọng về trang web

Khi tạo trang tổng quan về dữ liệu sự kiện Chỉ số quan trọng của trang web như mô tả ở trên, việc sử dụng trực tiếp tập dữ liệu xuất của Google Analytics 4 sẽ không hiệu quả. Do cấu trúc của dữ liệu GA4 và quy trình xử lý trước cần thiết đối với các chỉ số Các chỉ số quan trọng về trang web, nên một số phần của truy vấn sẽ chạy nhiều lần. Việc này tạo ra 2 vấn đề: hiệu suất của trang tổng quan và chi phí trong BigQuery.

Bạn có thể sử dụng chế độ hộp cát BigQuery miễn phí. Với cấp sử dụng miễn phí của BigQuery, 1 TB dữ liệu truy vấn đầu tiên được xử lý mỗi tháng sẽ miễn phí. Đối với các phương pháp phân tích được thảo luận trong bài đăng này, trừ phi bạn đang sử dụng một tập dữ liệu lớn đáng kể hoặc thường xuyên truy vấn tập dữ liệu quá nhiều, thì bạn có thể duy trì trong giới hạn miễn phí này mỗi tháng. Tuy nhiên, nếu có trang web có lưu lượng truy cập cao và muốn thường xuyên theo dõi các chỉ số khác nhau bằng một trang tổng quan tương tác nhanh, bạn nên xử lý trước và cụ thể hoá dữ liệu chỉ số quan trọng của trang web trong khi sử dụng các tính năng hiệu quả của BigQuery như phân vùng, phân cụm và lưu vào bộ nhớ đệm.

Tập lệnh sau đây sẽ xử lý trước dữ liệu BigQuery của bạn (bảng nguồn) và tạo một bảng cụ thể (bảng mục tiêu). Khi sử dụng truy vấn này cho tập dữ liệu của riêng mình, bạn cũng nên xác định phạm vi ngày cho bảng nguồn để giảm lượng dữ liệu được xử lý.

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

Tập dữ liệu cụ thể này có một số ưu điểm:

  • Cấu trúc dữ liệu được làm phẳng và dễ truy vấn hơn.
  • Hệ thống chỉ giữ lại các sự kiện trong Các chỉ số quan trọng về trang web trong tập dữ liệu GA4 ban đầu.
  • Mã phiên, loại người dùng (mới so với cũ) và thông tin về mức độ tương tác trong phiên sẽ xuất hiện trực tiếp trong các cột.
  • Bảng này được partitioned theo ngày và được phân nhóm theo tên chỉ số. Điều này thường làm giảm lượng dữ liệu được xử lý cho mỗi truy vấn.
  • Vì bạn không cần sử dụng ký tự đại diện để truy vấn bảng này, kết quả truy vấn có thể được lưu vào bộ nhớ đệm trong tối đa 24 giờ. Điều này giúp giảm chi phí do lặp lại cùng một truy vấn.
  • Nếu sử dụng công cụ BigQuery BI, bạn có thể chạy các hàm và toán tử SQL được tối ưu hoá trên bảng này.

Bạn có thể truy vấn trực tiếp bảng cụ thể này từ bên trong giao diện người dùng BigQuery hoặc sử dụng bảng trong Looker Studio bằng trình kết nối BigQuery.

Sử dụng trình kết nối Chỉ số quan trọng của trang web

Vì việc tạo một trang tổng quan từ đầu rất tốn thời gian, nên chúng tôi đã phát triển một giải pháp theo gói để tạo một trang tổng quan mẫu cho bạn. Trước tiên, hãy đảm bảo rằng bạn đã cụ thể hoá bảng Các chỉ số quan trọng về trang web bằng truy vấn ở trên. Sau đó, truy cập vào trình kết nối Các chỉ số quan trọng về trang web cho Looker Studio bằng đường liên kết này: goo.gle/web-vitals-connector

Sau khi uỷ quyền một lần, bạn sẽ thấy màn hình cấu hình sau:

Màn hình uỷ quyền Trình kết nối Android vitals

Cung cấp mã bảng BigQuery cụ thể (tức là bảng mục tiêu) và mã dự án thanh toán BigQuery của bạn. Sau khi bạn nhấp vào nút kết nối, Looker Studio sẽ tạo một trang tổng quan mới theo mẫu và liên kết dữ liệu của bạn với trang tổng quan đó. Bạn có thể chỉnh sửa, sửa đổi và chia sẻ trang tổng quan này theo ý muốn. Nếu tạo trang tổng quan một lần, bạn sẽ không phải truy cập lại vào đường liên kết của trình kết nối, trừ phi bạn muốn tạo nhiều trang tổng quan từ các tập dữ liệu khác nhau.

Khi thao tác trên trang tổng quan, bạn có thể thấy xu hướng hằng ngày của các chỉ số Các chỉ số quan trọng về trang web và một số thông tin về mức sử dụng cho trang web của bạn (như số người dùng và số phiên hoạt động) trong thẻ Tóm tắt.

Trong thẻ Phân tích người dùng, bạn có thể chọn một chỉ số rồi nhận bảng chi tiết về phân vị của chỉ số cũng như số người dùng theo các chỉ số kinh doanh và sử dụng khác nhau.

Thẻ Phân tích lộ trình của trang sẽ giúp bạn xác định các khu vực có vấn đề trên trang web của mình. Tại đây, bạn có thể chọn một chỉ số để xem tổng quan. Tuy nhiên, bạn cũng sẽ thấy bản đồ tán xạ của tất cả các đường dẫn trang có giá trị phân vị trên trục y và số lượng bản ghi trên trục x. Bản đồ tán xạ có thể giúp xác định các trang có giá trị chỉ số thấp hơn dự kiến. Sau khi chọn các trang bằng biểu đồ tán xạ của bảng Đường dẫn trang, bạn có thể xem chi tiết vấn đề bằng cách xem bảng Mục tiêu gỡ lỗi.

Thẻ Phân tích doanh thu là ví dụ về cách bạn có thể theo dõi các chỉ số doanh nghiệp và hiệu suất của mình ở cùng một nơi. Phần này minh hoạ tất cả các phiên mà người dùng đã mua hàng. Bạn có thể so sánh doanh thu kiếm được với trải nghiệm người dùng trong một phiên cụ thể .

Cách sử dụng nâng cao

Khi quen với tập dữ liệu hơn, bạn có thể chỉnh sửa trang tổng quan và thêm biểu đồ của riêng mình để phân tích phong phú hơn và được nhắm mục tiêu cụ thể hơn. Để làm cho trang tổng quan trở nên hữu ích hơn, bạn có thể làm theo các bước sau:

  • Thiết lập truy vấn theo lịch trong BigQuery để nhận dữ liệu cập nhật. Truy vấn cụ thể hoá mà chúng tôi đã chạy ở trên chỉ chụp nhanh dữ liệu của bạn tại thời điểm đó. Nếu muốn trang tổng quan của mình luôn cập nhật dữ liệu mới, bạn có thể chạy một truy vấn đã lên lịch sẽ chạy mỗi ngày và thêm bảng cụ thể bằng dữ liệu mới.
  • Kết hợp với dữ liệu của bên thứ nhất (ví dụ: CRM) để biết thông tin chi tiết về doanh nghiệp. Trong bảng cụ thể hoá, bạn có thể thêm user_id dưới dạng một cột riêng. Việc này sẽ cho phép bạn kết hợp dữ liệu của bên thứ nhất. Nếu dữ liệu của bên thứ nhất chưa có trong BigQuery, bạn có thể tải dữ liệu hoặc sử dụng nguồn dữ liệu được liên kết.
  • Báo cáo phiên bản trang web hoặc ứng dụng dưới dạng tham số trong dữ liệu mà bạn gửi đến Google Analytics và thêm phiên bản đó dưới dạng cột trong bảng cụ thể. Sau đó, bạn có thể thêm dữ liệu phiên bản đó dưới dạng phương diện trong biểu đồ để dễ dàng xem các thay đổi về phiên bản ảnh hưởng đến hiệu suất.
  • Nếu muốn sử dụng nhiều tập dữ liệu một cách đáng kể thông qua truy vấn trực tiếp hoặc trang tổng quan, bạn có thể thử dùng phiên bản có tính phí của Công cụ BI BigQuery.

Tóm tắt

Bài đăng này trình bày những thông tin cơ bản về cách sử dụng Google Analytics 4 và BigQuery để đo lường và gỡ lỗi hiệu suất bằng dữ liệu người dùng thực được thu thập tại trường. Tài liệu này cũng giải thích cách dùng Looker Studio và Trình kết nối các chỉ số quan trọng về trang web để tạo báo cáo và trang tổng quan tự động để giúp bạn trình bày dữ liệu một cách dễ dàng nhất có thể.

Một số điểm chính cần ghi nhớ trong bài đăng này:

  • Việc đo lường hiệu suất bằng dữ liệu người dùng thực là rất quan trọng để hiểu, gỡ lỗi và tối ưu hoá trang web của bạn.
  • Bạn có thể nhận được thông tin chi tiết chuyên sâu hơn khi các chỉ số về hiệu suất và các chỉ số kinh doanh của bạn nằm trong cùng một hệ thống. Google Analytics và BigQuery có thể giúp bạn thực hiện điều này.
  • Tính năng xuất dữ liệu thô của Google Analytics trong BigQuery mang đến cho bạn tiềm năng không giới hạn để phân tích chuyên sâu, tuỳ chỉnh bằng ngôn ngữ truy vấn mà có thể bạn đã biết.
  • Google có một số API và công cụ trực quan hoá như Looker Studio cho phép bạn tự do tạo báo cáo của mình chính xác theo cách bạn muốn.