You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Data Studio中用CASE表达式匹配BigQuery数据集多行

解决BigQuery中按分隔符分割的类别分组问题

针对你在Google Data Studio中连接BigQuery表,需要按Categories列里的分隔类别分组的需求,这里提供两种可行的方案,其中包含你提到的CASE表达式用法:

方案1:先拆分类别为多行再分组(更直观高效)

你的Categories列格式带前后/和空格,第一步需要清洗字符串并拆分成单个类别,再通过UNNEST展开成独立行,之后就能轻松分组统计了。修改你的SQL如下:

#standardSQL
WITH cleaned_categories AS (
  SELECT
    ID,
    Location,
    Calories,
    -- 清洗字符串:去掉首尾的/和空格,再按" / "拆分
    TRIM(Categories, '/ ') AS cleaned_cat,
  FROM table_name
),
split_categories AS (
  SELECT
    ID,
    Location,
    Calories,
    -- 拆分并展开成单个类别行
    category
  FROM cleaned_categories,
       UNNEST(SPLIT(cleaned_cat, ' / ')) AS category
)
-- 这里可以根据你的需求分组统计,比如按category计数或者求和Calories
SELECT
  category,
  COUNT(DISTINCT ID) AS item_count,
  SUM(CAST(Calories AS INT64)) AS total_calories
FROM split_categories
GROUP BY category
ORDER BY item_count DESC;

这个方案的好处是把每个类别拆成独立行,后续不管是在Data Studio里做图表还是统计都非常灵活。

方案2:使用CASE表达式标记每个类别(适合固定类别场景)

如果你的类别是相对固定的,不想拆分行,而是用CASE表达式为每个类别创建标记列,之后再分组聚合,可以这样写:

#standardSQL
SELECT
  -- 按Location分组,或者你需要的其他维度
  Location,
  -- 匹配每个类别,存在则计数1,否则0
  SUM(CASE WHEN Categories LIKE '% / brown / %' THEN 1 ELSE 0 END) AS brown_count,
  SUM(CASE WHEN Categories LIKE '% / nutty / %' THEN 1 ELSE 0 END) AS nutty_count,
  SUM(CASE WHEN Categories LIKE '% / salty / %' THEN 1 ELSE 0 END) AS salty_count,
  SUM(CASE WHEN Categories LIKE '% / roasted / %' THEN 1 ELSE 0 END) AS roasted_count
FROM table_name
GROUP BY Location;

注意事项

  • 匹配类别时用% / brown / %而非%brown%,是为了避免类似brownie这类包含目标子串的无关值被误匹配,通过前后的/作为边界能保证匹配准确性。
  • 你的Calories列是字符串类型,做聚合计算前记得用CAST(Calories AS INT64)转换为数值类型,否则会报错或得到错误结果。
  • 在Data Studio中直接替换原有SQL即可,之后就能基于生成的类别字段创建饼图、条形图等可视化报表。

内容的提问来源于stack exchange,提问作者J. Ayo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:26:10