如何在Looker Studio中按订单号分组拼接多行零件号?
在Looker Studio中实现产品捆绑分析的解决方案
方案1:数据源层面自定义SQL(推荐)
由于Looker Studio原生计算字段不支持GROUP_CONCAT/STRING_AGG这类多行值聚合拼接的函数,最直接的解决方式是在数据源层面提前处理数据,将聚合后的结果导入Looker Studio。以下是针对不同数据库的示例SQL:
适用于BigQuery
SELECT Order_Number, -- 按零件号排序拼接,确保组合唯一(避免abc, def和def, abc被视为不同组合) STRING_AGG(Part_Number, ', ' ORDER BY Part_Number) AS Part_Number_concat, SUM(Quantity_Sold) AS Quantity_Sold, -- 计算该捆绑组合在2022年的出现频率 COUNT(*) OVER (PARTITION BY STRING_AGG(Part_Number, ', ' ORDER BY Part_Number)) AS Bundle_Frequency_2022 FROM `your-project.your-dataset.your-sales-table` -- 筛选2022年的订单(需确保表中有Order_Date字段) WHERE EXTRACT(YEAR FROM Order_Date) = 2022 GROUP BY Order_Number -- 仅保留包含多个零件的订单(排除单个零件的订单) HAVING COUNT(DISTINCT Part_Number) >= 2
适用于MySQL
SELECT Order_Number, GROUP_CONCAT(Part_Number ORDER BY Part_Number SEPARATOR ', ') AS Part_Number_concat, SUM(Quantity_Sold) AS Quantity_Sold, (SELECT COUNT(*) FROM your_sales_table t2 WHERE GROUP_CONCAT(t2.Part_Number ORDER BY t2.Part_Number SEPARATOR ', ') = GROUP_CONCAT(t1.Part_Number ORDER BY t1.Part_Number SEPARATOR ', ') AND YEAR(t2.Order_Date) = 2022) AS Bundle_Frequency_2022 FROM your_sales_table t1 WHERE YEAR(Order_Date) = 2022 GROUP BY Order_Number HAVING COUNT(DISTINCT Part_Number) >= 2
将上述SQL作为Looker Studio的自定义数据源,即可直接得到你需要的聚合结果,后续可在Looker Studio中基于该结果做排序、可视化等操作。
方案2:Looker Studio内数据混合方案(仅适用于零件数较少的场景)
如果无法修改数据源,只能在Looker Studio内操作,可通过多次自连接数据混合实现,但仅适合订单内零件数固定(如最多2-3个)的场景,步骤如下:
- 创建数据混合:添加两个相同的销售表(命名为表A、表B),关联条件设置为
表A.Order_Number = 表B.Order_Number且表A.Part_Number < 表B.Part_Number(避免生成重复组合)。 - 创建计算字段:
Part_Pair = CONCAT(表A.Part_Number, ', ', 表B.Part_Number) - 聚合计算:
- 对
Order_Number做维度聚合,Quantity_Sold用SUM函数计算总和 - 创建计算字段
Bundle_Frequency_2022:COUNT(Part_Pair) OVER (PARTITION BY Part_Pair)
- 对
- 处理多零件订单:如果存在3个及以上零件的订单,需要重复上述步骤添加更多表连接,该方式会非常繁琐,仅作为临时替代方案。
注意事项
- 无论哪种方案,都需要对零件号进行排序后再拼接,否则相同零件组合会因顺序不同被视为不同捆绑,导致频率计算错误。
- Looker Studio目前确实未原生支持多行值聚合拼接的函数,自定义SQL是当前最高效的解决方案。
内容的提问来源于stack exchange,提问作者Blake
相关产品推荐
相关产品推荐

