EP04. “计算字段(Calculated field)与混合数据(Blend)”
🔒 登录后可标记已读- 资料里只有「数量」和「单价」,要看营业额?GA4 的流量来源太细,想合并成「社交媒体 / 搜索 / 直接」几大类?用计算字段自己算、自己分组
- 计算字段的写法像 Google Sheets 公式,最常用的是四则运算、
CASE WHEN分组、SUM这类汇总函数 - 混合数据(Blend)把两个数据源按共同栏位接起来,例如 Google Ads 的花费 + Sheets 里的营业额 = 广告投报率(ROAS)
- 一个混合最多 5 个表,默认用 Left outer join;选错连接方式,数字会少算或重复
重点内容
计算字段放在哪里
| 位置 | 做法 | 适合 |
|---|---|---|
| 数据源层级 | Resource → Manage added data sources → Edit → Add a field | 很多图表、很多报表都要用的字段 |
| 图表层级 | 图表 Setup 的 Dimension 或 Metric 下方 Add dimension / Add metric → Add calculated field | 只有这一个图表需要 |
💡 常用的字段放在数据源层级,每份报表都能直接用,也只要维护一个地方。
常用写法
四则运算:
Qty * Unit Price
比率(用 SUM 先汇总再相除):
SUM(Conversions) / SUM(Sessions)
然后把字段 Type 设成 Percent。
分组(CASE WHEN):
CASE
WHEN REGEXP_MATCH(Session source, "(?i).*(facebook|instagram|tiktok|xiaohongshu).*") THEN "社交媒体"
WHEN Session medium = "organic" THEN "自然搜索"
WHEN Session medium = "cpc" THEN "付费广告"
WHEN Session source = "(direct)" THEN "直接访问"
ELSE "其他"
END
州属名称统一:
CASE
WHEN State IN ("KL", "Kuala Lumpur", "W.P. Kuala Lumpur") THEN "Kuala Lumpur"
WHEN State IN ("Penang", "Pulau Pinang") THEN "Penang"
ELSE State
END
常用函数
| 类型 | 函数 | 例子 |
|---|---|---|
| 汇总 | SUM、AVG、COUNT、COUNT_DISTINCT、MAX、MIN | COUNT_DISTINCT(Order ID) |
| 条件 | CASE WHEN … THEN … ELSE … END、IF | 见上面 |
| 文字 | CONCAT、LOWER、UPPER、TRIM、REPLACE、REGEXP_MATCH、REGEXP_EXTRACT | LOWER(Page path) |
| 日期 | YEAR、MONTH、WEEKDAY、DATE_DIFF、TODAY | DATE_DIFF(TODAY(), Order Date) |
| 数学 | ROUND、ABS、SAFE_DIVIDE | ROUND(Revenue / Orders, 2) |
📌 REGEXP_MATCH 要整串符合才算,所以前后常加 .*;(?i) 代表不分大小写。
⚠️ 比率一定要先汇总再相除:SUM(Revenue) / SUM(Orders) 才对;写成 Revenue / Orders 会先逐行相除再加总,得到的「平均订单金额」是错的。
混合数据(Blend)
什么时候需要:
- Google Ads 花费(Ads 数据源)+ 营业额(Sheets 数据源)→ 算 ROAS
- GA4 的页面流量 + Search Console 的曝光点击 → 同一张表比较
- 每月目标(Sheets)+ 实际业绩(GA4 / 销售表)→ 达成率
建立混合:
- 方法一:选取两个使用不同数据源的图表 → 右键 → Blend data
- 方法二:Resource → Manage blends → Add a blend
- 左边第一个表是左表,按 Join another table 加入其他表(最多 5 个)
- 设定 Join configuration:连接方式 + Join conditions(共同栏位,例如
Date、Campaign) - 选好每个表要用的维度、指标 → Save
连接方式(Join)
flowchart LR
subgraph L["Left outer(默认)"]
L1["左表全部<br/>+ 右表对得上的"]
end
subgraph I["Inner"]
I1["只保留两边<br/>都对得上的"]
end
subgraph F["Full outer"]
F1["两边全部保留"]
end
| 连接方式 | 结果 | 例子 |
|---|---|---|
| Left outer(默认) | 左表全部 + 右表对得上的 | 以 GA4 日期为主,补上当天的广告花费 |
| Right outer | 右表全部 + 左表对得上的 | 反过来 |
| Inner | 只留两边都有的 | 只看有广告、也有营业额的日子 |
| Full outer | 两边全部保留 | 目标表有、实际还没发生的月份也要显示 |
| Cross | 每一行跟每一行配对 | 很少用,资料量会暴增 |
实操示例:广告投报率(ROAS)
- 数据源 A:Google Ads(维度
Day,指标Cost) - 数据源 B:Google Sheets 销售表(维度
Date,指标Revenue) - 两个日期栏位都设成 Date (YYYYMMDD) 同样格式
- Blend:左表 Ads、右表 Sheets,Left outer,Join condition:
Day=Date - 在混合后的图表加计算字段:
SUM(Revenue) / SUM(Cost)
- 设成 Number,命名
ROAS;ROAS 3 代表花 RM1 广告带来 RM3 营业额
⚠️ 两边的日期格式、大小写、空格要完全一样才对得上。Selangor 和 selangor 会被当成两个不同的值,先用计算字段 TRIM / LOWER 统一。
学完你会
- ✅ 在数据源或图表层级建立计算字段
- ✅ 用
CASE WHEN做分组、用SUM()/SUM()算比率 - ✅ 用 Blend 把两个数据源接起来
- ✅ 分得清 Left outer、Inner、Full outer
常见错误
- ❌ 比率写成
Revenue / Orders:先逐行相除再加总,结果错误,要SUM(Revenue) / SUM(Orders)。 - ❌ Blend 的共同栏位格式不同:日期一边是 Text、一边是 Date,完全对不上,数字变空白。
- ❌ 用 Inner join 结果少了很多天:没有广告的日子被排除,要保留全部就用 Left outer。
- ❌
REGEXP_MATCH没加.*:只有完全相同的字串才符合,大部分都没分到类。 - ❌ 同一个计算字段在十个图表各写一次:放到数据源层级,只维护一份。
Sources
官方文档:
- About calculated fields - Google Cloud Documentation
- Use functions in calculated fields - Google Cloud Documentation
- Tutorial: Create calculated fields in Data Studio - Google Cloud Documentation
- How blends work in Data Studio - Google Cloud Documentation
- Create, edit, and manage blends - Google Cloud Documentation
- Blending tips and advanced concepts - Google Cloud Documentation