使用 Google Analytics(分析)4 和 BigQuery 衡量效果并进行调试

了解如何将网页指标数据发送到 Google Analytics(分析)4 媒体资源,以及如何导出数据以在 BigQuery 和 Looker Studio 中进行分析。

Minhaz Kazi
Minhaz Kazi

Google 提供了许多工具(Search ConsolePageSpeed Insights (PSI) 和 Chrome 用户体验报告 (CrUX)),让开发者能够查看其网站在实际用户方面的核心网页指标指标表现如何。

这些工具非常强大,可让您大致了解网站的实际用户性能,而且完全不需要进行任何设置即可开始使用。

但是,您不能仅依靠这些工具来衡量网站性能,有几个关键原因:

  • 基于 CrUX 的工具会按月或按以前的 28 天时间段报告数据。 这意味着,在进行任何更改后,您必须等待很长时间才能看到结果。
  • 基于 CrUX 的工具只能按有限数量的维度(例如国家/地区、连接类型和设备类别(桌面设备或移动设备))进行细分。您不能按特定于业务的维度(例如:互动用户、特定实验组用户等)对数据进行划分。
  • 基于 CrUX 的工具可以告诉您效果如何,但无法告诉您原因。借助分析工具,您可以发送其他数据,以帮助您跟踪和调试问题。

因此,我们建议所有网站所有者使用其现有的分析工具来监控 Core Web Vitals 指标。这篇博文介绍了如何使用 Google 提供的免费工具实现这一目标。

完成所有设置后,您可以创建如下所示的信息中心:

网页指标连接器报告屏幕截图

网页指标连接器报告屏幕截图

如果您想直观地了解此处列出的所有步骤,请观看我们在 2021 年 Google I/O 大会上的演讲

测量

您一直可以通过 Google Analytics(分析)使用自定义指标来衡量效果,但 Google Analytics(分析)4 (GA4) 中有一些新功能值得开发者特别关注。

虽然 Google Analytics(分析)网页界面确实具有强大的分析工具,但使用您熟悉的查询语言却很难超过原始事件数据访问的强大功能和灵活性。

要开始使用 Google Analytics(分析)4 和 BigQuery 衡量核心网页指标,您需要完成三项工作:

  1. 创建 Google Analytics(分析)4 媒体资源BigQuery 项目
  2. 在 Google Analytics(分析)媒体资源配置中启用 BigQuery Export,这样您就可以将收到的所有数据自动填充到 BigQuery 项目表中。
  3. web-vitals JavaScript 库添加到您的网站,以便衡量 Core Web Vitals 指标并将数据发送到 Google Analytics(分析)4

分析

完成所有设置后,您应该会看到 BigQuery 界面中填充了事件数据,并且您应该能够按如下方式查询数据:

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

以下是该查询的结果的预览:

BigQuery 中的网页指标事件数据

查询网页指标数据

在开始查询网页指标事件数据之前,请务必先了解数据的汇总方式。

请务必了解,在某些情况下,系统可能会在同一网页上收到同一指标的多个事件。如果指标值发生更改并且报告了更新的值(CLS 很常见),则可能会发生这种情况。

对于网页指标事件,发送的最后一个值始终是最准确的值,因此在执行任何分析之前,请务必过滤出这些值。Web Vitals JavaScript 库提供的用于将数据发送到 Google Analytics(分析)4 的代码段包括为每个指标发送唯一 ID,因此您可以使用以下查询将结果限制为仅显示每个指标 ID 的上次接收值:

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

请注意,本博文中引用的所有其他查询都将以此子查询开头。

接下来的几个部分将介绍您可能需要运行的常见网页指标查询示例。

示例查询

整个网站的 75% 百分位 (p75) 的 LCP、FID 和 CLS

# 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

各个 LCP 值(从高到低)

# 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

CLS 最差的前 10 个页面 (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

调试

上面的查询展示了如何查询网页指标数据,这有助于您了解当前性能及其在一段时间内的趋势。但是,如果效果不如预期,但您不确定是什么原因导致的,该怎么办?

如果您无法采取行动和解决问题,了解得分没有帮助。

在实际运行环境中调试性能介绍了如何随分析数据一起发送其他调试信息。如果您按照该博文中详细说明的说明进行操作,应该还会看到调试信息也显示在 BigQuery 中。

以下查询展示了如何使用 debug_target 事件参数来帮助确定性能问题的根本原因。

示例查询

影响 CLS 的主要元素

debug_target 是一个 CSS 选择器字符串,对应于页面上与指标值最相关的元素。

使用 CLS 时,debug_target 表示对 CLS 值做出贡献的最大布局偏移的最大元素。如果没有偏移元素,则 debug_target 值为 null

以下查询将按第 75 百分位的 CLS 按最差到最佳的顺序列出页面,按 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

对 CLS 影响最大的元素的查询结果

了解页面上的哪些元素在发生变化,应该可以更轻松地找出问题的根本原因并加以解决。

请注意,此处报告的元素可能与您在本地调试页面时看到的偏移元素不同,因此从一开始捕获这些数据非常重要。如果您未意识到存在问题,就很难解决问题!

调试其他指标

上述查询会显示 CLS 指标的结果,但您可以使用完全相同的技术来报告 LCP 和 FID 的调试目标。只需将 where 子句替换为要调试的相关指标即可:

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

同样,您可以参阅现场调试性能,了解如何收集和发送每个核心网页指标的调试信息。

可视化

仅查看查询结果即可获取数据洞见可能非常具有挑战性。例如,以下查询会列出数据集中 LCP 的每日第 75 百分位值。

# 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

从这些查询结果中,仅通过查看数据很难确定趋势或离群值。

每日指标值查询结果

在这种情况下,直观呈现数据有助于您更快地获得数据洞见。

在 Looker Studio 中直观呈现查询结果

BigQuery 提供了一种通过数据洞察快速直观呈现任何查询结果的方法。Looker Studio 是一款可免费使用的数据可视化和信息中心工具。如需直观呈现查询结果,请在 BigQuery 界面中运行查询后,点击“探索数据”按钮,然后选择使用 Looker Studio 进行探索

BigQuery 中的“通过 Looker Studio 探索”选项

这将在探索视图中创建从 BigQuery 到 Looker Studio 的直接链接。在此视图中,您可以选择要直观呈现的字段、选择图表类型、设置过滤条件,以及创建临时图表以进行快速可视化分析。您可以根据上述查询结果创建此折线图,以查看 LCP 值随时间变化的趋势:

Looker Studio 中每日 LCP 值的折线图

通过 BigQuery 与 Looker Studio 之间的直接关联,您可以根据任何查询创建简明图表并进行可视化分析。但是,如果要执行其他分析,则可能需要在交互式信息中心内查看多个图表,以获取更全面的视图或深入了解数据。有了便捷的信息中心,您就不必在每次想要分析指标时都编写查询和手动生成图表。

您可以使用原生 BigQuery 连接器在 Looker Studio 中创建信息中心。为此,请前往 datastudio.google.com,创建新的数据源,选择 BigQuery 连接器,然后选择要使用的数据集:

在 Looker Studio 中使用 BigQuery 原生连接器

将网页指标数据具体化

如上所述创建网页指标事件数据的信息中心时,直接使用 Google Analytics(分析)4 导出数据集效率并不高。由于 GA4 数据的结构以及网页指标指标所需的预处理,查询的某些部分最终会运行多次。这会带来两个问题:信息中心性能和 BigQuery 费用。

您可以免费使用 BigQuery 沙盒模式。借助 BigQuery 的免费用量层级,每月处理的前 1 TB 查询数据是免费的。对于本博文中讨论的分析方法,除非您使用非常大的数据集或定期查询大量数据集,否则您每月应该能够保持在此免费限额范围内。但是,如果您的网站流量较高,并且希望使用快速交互式信息中心定期监控不同的指标,我们建议您对网页指标数据进行预处理和具体化,同时利用分区、聚类和缓存等 BigQuery 效率功能。

以下脚本将对您的 BigQuery 数据(源表)进行预处理,并创建一个具体化表(目标表)。将此查询用于您自己的数据集时,您可能还需要定义源表的日期范围,以减少处理的数据量。

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

此具体化数据集具有多项优势:

  • 数据结构扁平化,更易于查询。
  • 它仅保留原始 GA4 数据集中的网页指标事件。
  • 会话 ID、用户类型(新用户与回访用户)和会话互动信息直接在列中提供。
  • 该表按日期partitioned,并按指标名称聚类。这通常可以减少每个查询处理的数据量。
  • 由于您无需使用通配符来查询此表,因此查询结果最多可缓存 24 小时。这样可以降低重复同一查询的成本。
  • 如果您使用 BigQuery BI 引擎,则可以对此表运行优化的 SQL 函数和运算符

您可以直接在 BigQuery 界面中查询此具体化表,也可以通过 BigQuery 连接器在 Looker Studio 中使用该表。

使用网页指标连接器

由于从头开始创建信息中心非常耗时,因此我们开发了一个打包解决方案来为您创建模板信息中心。首先,确保您已使用上述查询具体化了网页指标表格。然后使用此链接访问 Looker Studio 的网页指标连接器:goo.gle/web-vitals-connector

提供一次性授权后,您应该会看到以下配置屏幕:

网页指标连接器授权屏幕

提供具体化的 BigQuery 表 ID(即目标表)和您的 BigQuery 结算项目 ID。点击“连接”后,Looker Studio 会创建一个新的模板化信息中心,并将您的数据与其相关联。您可以根据需要修改、修改和共享信息中心。创建一次信息中心后,除非您想通过不同的数据集创建多个信息中心,否则无需再次访问连接器链接。

在信息中心内,您可以在摘要标签页中查看网页指标的每日趋势以及您网站的一些使用情况信息,例如用户数和会话数。

用户分析标签页中,您可以选择一个指标,然后获取指标百分位数的细分以及按不同使用情况和业务指标统计的用户数。

网页路径分析标签页可帮助您确定网站上的问题区域。在这里,您可以选择一个指标以查看其概览。不过,您也可以看到所有页面路径的散点图,其中 y 轴为百分位值,x 轴为记录计数。散点图有助于识别指标值低于预期的网页。使用网页路径表的散点图选择网页后,您可以查看“调试目标”表,进一步找出问题区域。

收入分析标签页展示了如何在同一位置监控业务和效果指标。此部分绘制的是用户进行了购买的所有会话。您可以比较特定会话期间所赚取的收入与用户体验。

高级用法

随着您越来越熟悉数据集,您可以修改信息中心并添加自己的图表,以进行更丰富、有针对性的分析。如需使信息中心更加实用,您可以按以下步骤操作:

  • 在 BigQuery 中设置计划查询以获取更新后的数据。我们在上面运行的具体化查询只截取了您当时的快照。如果您希望使用新数据更新信息中心,则可以运行每天运行的计划查询,并在具体化表上附加新数据。
  • 联接第一方数据(例如 CRM)以获取业务数据洞见。在具体化表中,您可以将 user_id 添加为单独的列。这样,您就可以联接第一方数据。如果您的第一方数据尚未在 BigQuery 中,您可以加载数据或使用联合数据源
  • 在发送到 Google Analytics(分析)的数据中将您的网站或应用版本作为参数报告,并将其作为列添加到具体化表中。然后,您可以将该版本数据添加为图表中的维度,以便更轻松地查看版本更改对性能的影响。
  • 如果您希望通过直接查询或信息中心大幅使用数据集,可以尝试使用付费版本的 BigQuery BI Engine

摘要

这篇博文介绍了有关如何使用 Google Analytics(分析)4 和 BigQuery 使用在现场收集的真实用户数据来衡量和调试性能的基础知识。还说明了如何使用 Looker Studio 和 Web Vitals 连接器构建自动化报告和信息中心,以便尽可能轻松地直观呈现数据。

这篇博文的一些关键要点:

  • 使用真实的用户数据衡量性能对于理解、调试和优化网站至关重要。
  • 如果您的效果指标和业务指标位于同一系统中,则可以获得更深入的数据洞见。Google Analytics(分析)和 BigQuery 使这成为可能。
  • 借助 BigQuery Export 功能,您可以使用可能已经了解的查询语言,对原始 Google Analytics(分析)数据进行深入的自定义分析。
  • Google 提供许多 API 和可视化工具,例如 Looker Studio,可让您自由按照自己希望的方式构建报告。