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

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

Google cung cấp một số công cụ—Tìm kiếm Bảng điều khiển, PageSpeed Thông tin chi tiết (PSI) và Trải nghiệm người dùng Chrome Báo vi phạm (CrUX) – cho phép các nhà phát triển xem hiệu quả hoạt động của trang web của họ so với Trang web chính Các chỉ số quan trọng đối với người dùng thực của họ trong .

Những công cụ này hiệu quả ở chỗ chúng mang lại cho bạn cái nhìn tổng quan về hiệu suất thực của người dùng và hoàn toàn không yêu cầu 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 dựa vào những các công cụ riêng để đo lường hiệu suất của trang web:

  • Các công cụ dựa trên CrUX báo cáo dữ liệu theo khoảng thời gian 28 ngày trước đó hoặc hằng tháng. Đ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 trước khi bạn có thể xem 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ố 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ể phân chia dữ liệu theo các phương diện cụ thể cho doanh nghiệp của bạn (ví dụ: lượt tương tác người dùng, 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 mình như thế nào, nhưng không thể cho bạn biết lý do. Nhờ 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ì những lý do này, tất cả chủ sở hữu trang web nên theo dõi các chỉ số Core Web Vitals 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ụ được Google cung cấp để làm điều đó.

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

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

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

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

Đo

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

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 khó vượt qua sức mạnh và tính linh hoạt của việc truy cập dữ liệu sự kiện thô bằng cách sử dụng truy vấn ngôn ngữ bạn có thể đã biết.

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

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

Phân tích

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

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

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

Dữ liệu sự kiện Chỉ số quan trọng của 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 Chỉ số quan trọng của trang web, bạn cần hiểu cách dữ liệu được tổng hợp.

Điều quan trọng nhất cần hiểu là trong một số trường hợp, nhiều sự kiện có thể đã nhận được 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ố và một giá trị cập nhật sẽ đượ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 Chỉ số quan trọng của 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ỳ phân tích nào, bạn chỉ cần lọc các giá trị đó. Đoạn mã do thư viện JavaScript web-vitals cung cấp để gửi dữ liệu đến Google Analytics 4 gửi một mã nhận dạng duy nhất cho mỗi chỉ số, nên bạn có thể sử dụng để giới hạn kết quả ở mức giá trị nhận được gần đây nhất 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', '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
)

Xin lưu ý rằng tất cả những truy vấn khác được đề cập trong bài đăng này đều sẽ bắt đầu bằng truy vấn con.

Cụm từ tìm kiếm mẫu

Các phần tiếp theo trình bày một vài ví dụ về những truy vấn thường gặp của Chỉ số quan trọng của trang web mà bạn có thể muốn chạy.

LCP, INP 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', '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

Tất 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', '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 trang hàng đầu có 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', '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

Gỡ lỗi

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

Việc biết được mức độ điểm của bạn sẽ không hữu ích nếu bạn không thể hành động và khắc phục vấ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 cùng với dữ liệu phân tích. Nếu bạn làm theo hướng dẫn được nêu chi tiết trong bài đăng đó, bạn sẽ thấy gỡ lỗi thông tin đó cũng xuất hiện trong BigQuery.

Cụm từ tìm kiếm mẫu

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

Các yếu tố hàng đầu đóng góp vào CLS

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

Với CLS, debug_target đại diện cho phần tử lớn nhất trong sự thay đổi bố cục góp phần vào giá trị CLS (Mức thay đổi bố cục tích luỹ). Nếu không có phần tử nào dịch chuyển thì Giá trị của debug_target sẽ là null.

Cụm từ tìm kiếm sau đây sẽ liệt kê các trang theo thứ tự từ kém nhất đến tốt nhất theo CLS (Mức thay đổi bố cục tích luỹ) ở vị trí thứ 75 phân vị, đượ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', '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

Kết quả truy vấn về những yếu tố hàng đầu đóng góp vào CLS (Mức thay đổi bố cục tích luỹ)

Khi biết được những thành phần nào trên trang đang thay đổi, bạn sẽ dễ dàng xác định và khắc phục căn nguyên của vấn đề.

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

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

Truy vấn trước đó đưa ra kết quả cho chỉ số CLS (Mức thay đổi bố cục tích luỹ), nhưng kết quả tương tự có thể dùng để báo cáo về mục tiêu gỡ lỗi cho LCP và INP. Chỉ thay thế mệnh đề where bằng chỉ số có liên quan để gỡ lỗi:

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

Xin nhắc lại, bạn có thể tham khảo bài viết Hiệu suất gỡ lỗi trong để xem hướng dẫn về cách thu thập và gửi thông tin gỡ lỗi cho từng chỉ số Core Web Vitals.

Hình ảnh hóa

Có thể không dễ để có được thông tin chi tiết chỉ bằng cách xem kết quả truy vấn một mình. Ví dụ: truy vấn sau đây liệt kê các giá trị phân vị thứ 75 hằng ngày 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', '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

Từ các kết quả truy vấn này, rấ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 giúp bạn nhanh chóng trực quan hoá mọi kết quả truy vấn thông qua mục Dữ liệu Studio. Looker Studio là một hình ảnh dữ liệu và công cụ trang tổng quan miễn phí sử dụng. Để trực quan hoá kết quả truy vấn, sau khi chạy truy vấn của bạn trong giao diện người dùng BigQuery, hãy nhấp vào nút Khám phá dữ liệu và chọn Khám phá bằng Looker Studio.

Khám phá lựa 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 dữ liệu khám phá chế độ xem. Trong chế độ xem này, bạn có thể chọn những trường mà bạn muốn minh hoạ, chọn các loại biểu đồ, thiết lập bộ lọc và tạo biểu đồ đặc biệt để phân tích nhanh trực quan. Từ các kết quả truy vấn trước đó, bạn có thể tạo biểu đồ dạng đường này để xem xu hướng của Giá trị LCP theo thời gian:

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

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

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

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

Hiện thực hoá dữ liệu Chỉ số quan trọng của 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ước đây, không hiệu quả khi sử dụng trực tiếp tập dữ liệu xuất của Google Analytics 4. Do cấu trúc của dữ liệu GA4 và quy trình xử lý trước cần thiết cho Các chỉ số quan trọng về trang web các chỉ số khác nhau, các phần truy vấn của bạn sẽ chạy nhiều lần. Việc này tạo hai vấn đề: hiệu suất trên trang tổng quan và chi phí BigQuery.

Bạn có thể dùng hộp cát BigQuery không mất phí. Với BigQuery cấp sử dụng miễn phí, 1 TB dữ liệu truy vấn đầu tiên được xử lý mỗi tháng là miễn phí. Đối với phương pháp phân tích được thảo luận trong bài đăng này, trừ khi bạn đang sử dụng một tập dữ liệu lớn hoặc thường xuyên truy vấn tập dữ liệu nhiều, bạn sẽ có thể ở trong giới hạn miễn phí này mỗi tháng. Nhưng nếu bạn 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 cách sử dụng trang tổng quan tương tác nhanh, chúng tôi đề xuất xử lý trước và cụ thể hoá dữ liệu chỉ số quan trọng của trang web trong khi vẫn tận 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 bạn sử dụng cụm từ tìm kiếm này cho chính mình tập dữ liệu, bạn cũng có thể muốn xác định phạm vi ngày để bảng nguồn sẽ 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', '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');

Tập dữ liệu cụ thể hoá 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.
  • Chế độ này chỉ giữ lại các sự kiện Chỉ số quan trọng của trang web từ 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 có sẵn trực tiếp trong các cột.
  • Bảng là được phân vùng theo ngày và được 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 phải sử dụng ký tự đại diện để truy vấn bảng này nên kết quả truy vấn có thể được lưu vào bộ nhớ đệm trong tối đa 24 giờ. Cách này giúp giảm chi phí do lặp lại cùng một cách truy vấn.
  • Nếu dùng công cụ BigQuery BI, bạn có thể chạy các hàm SQL được tối ưu hoá và toán tử này vào bảng.

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 nó 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 gói để tạo trang tổng quan mẫu cho bạn. Trước tiên, hãy đảm bảo rằng đã cụ thể hoá bảng Chỉ số quan trọng của trang web bằng cách sử dụng truy vấn trước đó. Sau đó truy cập vào Trình kết nối Chỉ số quan trọng của trang web cho Looker Studio bằng đường liên kết sau: goo.gle/web-vitals-connector

Sau khi cấp phép một lần, bạn sẽ thấy như sau màn hình cấu hình:

Màn hình uỷ quyền Trình kết nối Chỉ số quan trọng của trang web

Cung cấp mã bảng BigQuery được cụ thể hoá (tức là bảng mục tiêu) và Mã dự án thanh toán BigQuery. Sau khi nhấp vào kết nối, Looker Studio sẽ tạo một trang tổng quan theo mẫu mới 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 như bạn 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 liên kết trình kết nối, trừ khi bạn muốn tạo nhiều liên kết trang tổng quan từ nhiều tập dữ liệu.

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ố quan trọng về trang web và một số thông tin về việc sử dụng trang web của bạn như số người dùng và số phiên 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 xem bảng chi tiết về phân vị chỉ số cũng như số người dùng theo mức sử dụng và doanh nghiệp chỉ số.

Thẻ Phân tích đường dẫn trang sẽ giúp bạn xác định các khu vực có vấn đề trên của bạn. Tại đây, bạn có thể chọn một chỉ số để xem thông tin tổng quan. Nhưng 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à bản ghi số lượng trên trục x. Bản đồ tán xạ có thể giúp xác định các trang có so với giá trị dự kiến của chỉ số. Sau khi chọn các trang bằng biểu tượng tán xạ biểu đồ 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 Debug Target (Mục tiêu gỡ lỗi).

Thẻ Phân tích doanh thu là một ví dụ về cách bạn có thể theo dõi hoạt động kinh doanh của mình và chỉ số hiệu suất ở cùng một nơi. Phần này hiển thị tất cả các phiên hoạt động 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 này hơn, bạn có thể chỉnh sửa trang tổng quan và thêm biểu đồ của riêng bạn để phân tích được nhắm mục tiêu và phong phú hơn. Để làm cho trang tổng quan tốt hơn hữu ích, bạn có thể thực hiện các bước sau:

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

Tóm tắt

Bài đăng này đề cập đến 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 hiện trường. Nó cũng giải thích cách tạo báo cáo tự động và trang tổng quan bằng Looker Studio và Trình kết nối Web Vitals để giúp trực quan hoá dữ liệu dễ dàng nhất có thể.

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

  • Đo lường hiệu suất bằng dữ liệu người dùng thực 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 chỉ số hiệu suất và hoạt động kinh doanh của bạn đều ở trong cùng một hệ thống. Google Analytics và BigQuery giúp thực hiện điều này nhất có thể.
  • BigQuery Export cho dữ liệu thô trong Google Analytics 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 cách sử dụ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 mang lại bạn được tự do tạo các báo cáo của mình chính xác theo cách bạn muốn tạo.