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

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

Google 提供了多种工具:搜索网络 ConsolePageSpeed 数据洞见 (PSI) Chrome 用户体验 报告 (CrUX) - 可让开发者了解其网站在核心 Web 应用的表现 真实用户的 Android Vitals 指标, 字段。

这些工具的出色之处在于,您可以通过它们 真实用户性能,完全不需要设置即可开始使用。

不过,有几个关键原因让您不想依赖于这些 来衡量网站性能:

  • 基于 CrUX 的工具会按每月或之前 28 天的数据生成报告。 也就是说,在进行任何更改后,您需要等待很长时间才能 就能看到结果
  • 基于 CrUX 的工具只能按有限数量的维度进行细分,例如 国家/地区、网络连接类型和设备类别(桌面设备或移动设备)。禁止的行为 按照您的业务特有的维度对数据进行细分(例如:感兴趣的 用户、特定实验组中的用户等)。
  • 基于 CrUX 的工具可以告诉您效果,但无法判断 您为什么。借助分析工具,您可以发送更多数据,以便跟踪 调试和调试问题

出于这些原因,我们建议所有网站所有者都监控 Core Web Vitals 指标 使用现有的分析工具。本文将说明如何使用 Google 提供的各种工具来帮助您实现这一目标。

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

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

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

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

测量

您一直可以使用 Google Analytics 自定义指标,但还有 Google Analytics 中 有一些新功能 4 (GA4) 值得关注的内容。

虽然 Google Analytics 网络界面确实具有功能强大的分析工具, 使用查询访问原始事件数据的功能和灵活性是无与伦比的 可能已经掌握的语言。

如需开始使用 Google Analytics 4 和 BigQuery 衡量 Core Web Vitals,请执行以下操作: 您需要做三件事:

  1. 创建 Google Analytics 4 属性BigQuery 项目
  2. 启用 BigQuery Export Google Analytics 媒体资源配置,这样接收的所有数据都将 会自动填充到 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', 'INP', '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', '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
)

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

示例查询

接下来的几个部分将举例说明您可能会遇到的一些常见网页指标查询 。

整个网站的 75% 百分位 (p75) 的 LCP、INP 和 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', '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

所有单独的 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', '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

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

调试

之前的查询展示了如何查询网页指标数据,这有助于 来了解当前效果及其随时间变化的趋势。但是 如果效果低于预期,但您不确定,该怎么办? 为什么?

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

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

示例查询

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

影响 CLS 的主要元素

debug_target 是一个 CSS 选择器字符串,与 与指标值最相关的网页。

使用 CLS 时,debug_target 表示最大元素中最大的元素 造成 CLS 值的布局偏移。如果没有元素偏移,则 “debug_target”的值将为 null

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

影响 CLS 的主要元素的查询结果

了解网页上的哪些元素在发生变化后,就应该能够 找出问题的根本原因并加以解决

请注意,此处报告的元素可能 当您在本地调试网页时发现发生了偏移,这就是为什么 首先捕获这些数据非常重要很难修正问题 但却没有意识到的问题!

调试其他指标

上一个查询会显示 CLS 指标的结果,但完全相同 分析法可用于报告 LCP 和 INP 的调试目标。只是 将 where 子句替换为要调试的相关指标:

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

同样,您可以参阅 字段,了解有关如何收集和 发送每个 Core Web Vitals 指标的调试信息。

可视化

仅通过查看查询结果即可获得数据洞见可能比较困难 。例如,以下查询列出了 数据集的 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', '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

根据这些查询结果,很难仅通过 以及查看数据。

每日指标值查询结果

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

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

BigQuery 提供了一种通过数据快速直观呈现任何查询结果的方法 Studio。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', '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');

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

  • 数据结构已扁平化,更易于查询。
  • 它仅保留原始 GA4 数据集中的网页指标事件。
  • 会话 ID、用户类型(新用户与回访用户)和会话互动信息 直接显示在列中。
  • 表格为 分区依据 日期和聚类 按指标名称显示这通常会减少针对每个 API 处理的数据量 查询。
  • 由于您不需要使用通配符查询此表,因此查询结果可以 最长可缓存 24 小时。这样可以减少重复相同的 查询。
  • 如果您使用 BigQuery BI 引擎,则可以运行经过优化的 SQL 函数和 运算符 表格。

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

使用 Web Vitals 连接器

从零开始创建信息中心非常耗时,因此我们开发了 解决方案,可为您创建模板信息中心。首先确保 使用上一条查询将网页指标表具体化了。然后访问 使用以下链接的 Looker Studio 的 Web Vitals 连接器: goo.gle/web-vitals-connector

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

Web Vitals 连接器授权屏幕

提供具体化的 BigQuery 表 ID(即目标表)和您的 BigQuery 结算项目 ID。点击“连接”后,Looker Studio 会创建一个 新的模板化信息中心,并将您的数据与其相关联。您可以修改、修改 还可以根据需要共享信息中心信息中心只创建一次 除非您要创建多个产品 信息中心。

在浏览信息中心时,您可以看到“网页指标”报告 指标以及您网站的一些使用情况信息(如用户和会话) 摘要标签页。

在“用户分析”标签页中,您可以选择指标,然后获取细分数据 指标百分位数以及用户数(按不同的使用情况和业务划分) 指标。

“网页路径分析”标签可帮助您确定 网站。在这里,您可以选择一个指标以查看概览。但您也可以看到 所有网页路径的散点图,y 轴表示百分位值,并记录 x 轴上的计数。散点图有助于确定 高于预期的指标值使用散点图选择页面后 “网页路径”表格的图表,您可以按 Debug Target 表格。

收入分析标签页展示了如何监控业务 和效果指标此部分显示符合以下条件的所有会话: 用户进行了购买。您可以比较赚取的收入与用户体验 会非常有用 。

高级用法

随着对数据集越来越熟悉,您可以修改信息中心, 自己的图表,从而进行更丰富、更有针对性的分析。为了让信息中心更完整 您可以按以下步骤操作:

  • 在 BigQuery 中设置计划查询以获取更新的数据。具体化 仅会截取此时的数据快照。如果您 想用新数据及时更新信息中心,可以运行 每天运行一次的查询,并将新的 数据。
  • 联接第一方数据(例如客户关系管理)以获取业务数据洞见。在 您可以将 user_id 添加为单独的列。这样,您就可以加入 第一方数据如果您的第一方数据不在 BigQuery 中,您可以 加载数据或 使用联合数据 来源
  • 在发送给 Google 的数据中以参数形式报告您的网站或应用版本 Analytics 并将其作为一列添加到具体化表中。然后,您可以添加 将该版本数据作为一个维度显示在图表中,方便您轻松查看 版本更改会影响性能。
  • 如果您预计会直接以大量方式使用数据集, 查询或信息中心,您可以尝试使用付费版 BigQuery BI 引擎

摘要

这篇博文涵盖了有关如何使用 Google Analytics 4 和 BigQuery 进行 使用在现场收集的真实用户数据来衡量和调试性能。它 还介绍了如何使用 Looker Studio 构建自动化报告和信息中心 和网页指标连接器 直观呈现数据

这篇博文的一些要点总结如下:

  • 使用真实的用户数据来衡量性能对于理解这个指标至关重要, 如何调试和优化您的网站
  • 您可以更深入地洞悉您的效果指标和业务 指标是否在同一个系统中Google Analytics 和 BigQuery
  • 通过 BigQuery 导出 Google Analytics 原始数据, 使用您可能已经熟悉的查询语言进行深入的自定义分析。
  • Google 拥有多种 API 和 Looker Studio 等可视化工具, 您可以完全按照自己希望的方式随意创建报告 。