如何在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计算字段实现过滤:
- 先创建产品筛选参数,参数类型设为文本,可配置为用户输入或下拉选择产品列表
- 创建「匹配产品」计算字段:
REGEXP_EXTRACT(ARRAY_TO_STRING(product_array, ","), CONCAT("(", @selected_product, ")"))
- 创建「匹配产品销售额」计算字段:
SPLIT(sales_array, ",")[SAFE_OFFSET( ARRAY_LENGTH(SPLIT(REGEXP_EXTRACT(ARRAY_TO_STRING(product_array, ","), CONCAT("^(.*)", @selected_product)), ",")) - 1 )]
- 最后将日期、keyword设为过滤维度,对「匹配产品销售额」字段求和即可得到目标结果。
注意:方案二仅适用于单条数据的product_array无重复产品、数组格式统一的场景,数据复杂度较高时仍推荐使用方案一。
内容的提问来源于stack exchange,提问作者Kit Lactuan
相关产品推荐
相关产品推荐

