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

如何在DataStudio中对BigQuery生成的array_agg聚合数组内元素进行过滤

解决方案

方案一:调整BigQuery数据源(优先推荐)

该方式性能最优、适配性最强,可规避DataStudio对数组类型处理的原生限制。
你的数据本身由BigQuery产出,直接调整数据源查询逻辑即可:

  • 若无必须保留数组结构的需求,直接放弃array_agg()聚合,输出扁平化数据即可,查询逻辑如下:
SELECT 
  Date,
  keyword,
  product,
  sales
FROM 你的原始业务表

把上述自定义查询作为DataStudio的数据源后,可直接将日期、keyword、product设为过滤维度,对sales字段做求和聚合,就能直接得到你示例中$250的结果,不需要额外做数组处理。

  • 若必须保留数组结构,可配合DataStudio参数实现数组元素过滤,查询逻辑如下:
WITH agg_data AS (
  -- 此处替换为你原本生成array_agg聚合结果的查询逻辑
  SELECT 
    Date,
    keyword,
    ARRAY_AGG(product) AS product_array,
    ARRAY_AGG(sales) AS sales_array
  FROM 你的原始业务表
  GROUP BY Date, keyword
)
SELECT
  Date,
  keyword,
  -- 过滤匹配指定产品的数组元素
  ARRAY(
    SELECT product FROM UNNEST(product_array) product WITH OFFSET idx
    WHERE product = @selected_product
  ) AS filtered_product,
  -- 提取匹配产品对应的销售额
  ARRAY(
    SELECT sales FROM UNNEST(sales_array) sales WITH OFFSET idx
    WHERE (SELECT product FROM UNNEST(product_array) WITH OFFSET idx2 WHERE idx2 = idx) = @selected_product
  ) AS filtered_sales
FROM agg_data

之后在DataStudio中创建名为selected_product的文本参数,作为产品筛选控件即可实现需求。

方案二:DataStudio层面直接处理(无需修改数据源)

如果不方便调整BigQuery查询逻辑,可通过创建DataStudio计算字段实现过滤:

  1. 先创建产品筛选参数,参数类型设为文本,可配置为用户输入或下拉选择产品列表
  2. 创建「匹配产品」计算字段:
REGEXP_EXTRACT(ARRAY_TO_STRING(product_array, ","), CONCAT("(", @selected_product, ")"))
  1. 创建「匹配产品销售额」计算字段:
SPLIT(sales_array, ",")[SAFE_OFFSET(
  ARRAY_LENGTH(SPLIT(REGEXP_EXTRACT(ARRAY_TO_STRING(product_array, ","), CONCAT("^(.*)", @selected_product)), ",")) - 1
)]
  1. 最后将日期、keyword设为过滤维度,对「匹配产品销售额」字段求和即可得到目标结果。

注意:方案二仅适用于单条数据的product_array无重复产品、数组格式统一的场景,数据复杂度较高时仍推荐使用方案一。

内容的提问来源于stack exchange,提问作者Kit Lactuan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:36:04