GA4区分自动收集、增强型衡量、推荐事件和自定义事件。各类实施要求不同,事件名称本身不能证明业务动作成功。
定义可观测的动作
新建前先检查已有或推荐事件。记录触发、参数、计数单位及局限。点击表单并不等于请求已被接收。避免在名称、URL和发送的参数中包含个人信息。
区分收集与业务重要性
GA4事件可以标记为关键事件。这表达选定的分析重要性,并不证明销售或盈利。阅读报告前检查重复、数值与覆盖范围;增强型衡量和自动收集是不同类别。
| 类别 | 示例 | 条件 |
|---|---|---|
| 自动收集 | first_visit, session_start | 基础配置提供的收集 |
| 增强型衡量 | scroll, file_download | 功能已启用且互动受支持 |
| 推荐 | add_to_cart, purchase | 实现文档规定的名称和参数 |
| 自定义 | 产品专属动作 | 其他类别不适用时定义 |
来源与核验
- Google Analytics — Set up events
- Google Analytics — About key events
- Google Analytics — Avoid sending personally identifiable information
自定义事件应描述业务事实
自定义 GA4 事件应代表可观察的操作并支持决策。清晰的名称无法弥补触发器的不精确性:提交表单并不代表服务器已接受请求。
- 在事件字典中对触发器、参数、类型和排除情况进行版本控制。
- 在 DebugView 或等效工具中测试成功、错误、返回导航和重新加载。
- 将接收到的事件与已知操作进行核对,并记录差异。
一手资料:Google Analytics — Set up events. 相关方法:阅读实用指南.
数据连接完整性
连接可能增加行数并扭曲总计。
- 订单表的一行代表一笔订单,明细表的一行代表该订单中的一项商品。合并前检查重复键与空键。
- 按订单键汇总明细,再将结果关联到订单,避免每项商品都重复订单金额。与原订单表的合计核对。
- LEFT JOIN保留没有明细的订单,但针对右表的WHERE条件可能再次排除这些订单。未匹配不等于金额为零。
可复现的验收案例
虚构示例:数据不代表客户或实际观察结果。
查看案例输入
{
"orders": [
{
"id": 1,
"total": 100
},
{
"id": 2,
"total": 200
}
],
"line_order_ids": [
1,
1,
2
],
"sum_before": 300,
"sum_after_raw_join": 400
}预期判断
400重复计算了一笔订单。先按订单汇总明细,恢复总额300。 另测两笔各100的虚构订单:总额应为200。SUM(DISTINCT total)会返回100,删掉一个合法值。应核查标识符与连接基数,而非对金额去重。
可复现的SQL查询
虚构示例:两笔订单金额为100和200,三条明细关联到1、1、2。查询只使用VALUES,请在测试环境执行。
WITH orders(id, total) AS (VALUES (1, 100), (2, 200)),
lines(order_id) AS (VALUES (1), (1), (2))
SELECT COUNT(*) AS rows, SUM(o.total) AS total
FROM orders o JOIN lines l ON l.order_id = o.id;WITH orders(id, total) AS (VALUES (1, 100), (2, 200)),
lines(order_id) AS (VALUES (1), (1), (2)),
per_order AS (
SELECT order_id, COUNT(*) AS line_count
FROM lines GROUP BY order_id
)
SELECT COUNT(*) AS orders, SUM(o.total) AS total
FROM orders o LEFT JOIN per_order l ON l.order_id = o.id;直接关联得到三行、总额400;先汇总可恢复两笔订单、总额300。
WITH orders(id, total) AS (VALUES (1, 100), (2, 100))
SELECT SUM(total) AS correct_total,
SUM(DISTINCT total) AS distinct_total
FROM orders;金额为100和100时,正确合计为200,而SUM(DISTINCT total)返回100。
验证步骤
- 定义订单和明细的粒度。
- 连接含两条明细的订单。
- 保留键、行数及核对后的总额。
SUM(DISTINCT total)能解决问题吗?
不能。两笔金额100的订单合计为200,而SUM(DISTINCT total)只返回100。应修正键的关联关系,而非按金额去重。
一手资料:PostgreSQL — Table expressions and joins. 相关方法:阅读实用指南.
连接基数、NULL与聚合
此语言版本的详细参考说明以英语提供。
Read the cardinality behind a published number
When a result combines sources, ask what one row represents and how keys were matched. An apparently correct sum can conceal two offsetting errors. Pair counts and identifier coverage provide additional evidence.
- Document population before and after joining.
- Do not infer causation from the total alone.
- Connect the metric definition to actual retained rows.
Inspect pairs and aggregates in the workshop →
PostgreSQL 18 · Table expressions · PostgreSQL 18 · documentation reviewed 2026-10-23
PostgreSQL 18 · Aggregate functions · PostgreSQL 18 · documentation reviewed 2026-10-23
PostgreSQL 18 · Comparison functions · PostgreSQL 18 · documentation reviewed 2026-10-23
