这是我在这里的第一篇文章。我很难想出一个解决方案来解决我在 Google Data Studio 上创建产品包分析时遇到的问题。我知道我的问题可以使用普通的 SQL 语法轻松解决,例如 GROUP_CONCAT,但是由于 GDS 在计算字段时很时髦,所以我找不到将列中的多个值连接成逗号分隔的单个字符串的方法值。 GDS 是我们在我公司用于执行分析决策的工具,所以我真的不能在其他任何地方这样做。
我的数据源是一个销售表,其中包含“Order_Number”列、“Part_Number”列和“Quantity_Sold”列。每行包含一个单独的零件号,构成每个唯一的订单号。这意味着在“Order_Number”列中将有多个相同订单号的实例,以逐行显示构成订单的零件及其各自的销售数量。这是一个视觉效果:
订单号 | Part_Number | 数量_已售出 |
---|---|---|
123 | abc | 2 |
123 | def | 1 |
123 | ghi | 3 |
456 | abc | 6 |
789 | abc | 1 |
789 | def | 2 |
我的主要目标是生产:
订单号 | Part_Number_concat | 数量_已售出 | Bundle_Frequency_2022 |
---|---|---|---|
123 | abc, def, ghi | 6 | 50 |
789 | abc, def | 3 | 20 |
我们想找出哪些产品通常在同一订单中一起购买,我们想排序以显示哪些“捆绑包”最频繁(基本上是一个计数)。
我使用自连接混合尝试了以下计算字段公式,但这只连接了两个部分并创建了大量重复项。我尝试了许多其他公式和解决方法,但这是让我走得最远的。
case
when (Order_Number1 = Order_Number2) and (Part1 != Part2)
then CONCAT(Part2, ", ", Part2)
else ""
end
在此方面的任何帮助将不胜感激。我只是希望 GDS/looker studio 能加强它并完全集成 SQL。
要基于 Order_Number 连接 Quantity_Sold,您可以在计算字段中使用此公式:
CONCAT(Order_Number)
但你可能已经知道了。
为了连接 Part_Number,我找到的最接近的解决方法是:
CASE
WHEN COUNT(DISTINCT Part_Number) = 1
THEN MAX(Part_Number)
ELSE CONCAT(MAX(Part_Number), ", ", MIN(Part_Number))
END
这里是 Google Data Studio 计算字段中支持的函数列表。例如,GROUP_CONCAT() 可以解决您的问题,但它不在列表中。
另一种解决方法是将其连接到您从中导入数据的源中。例如,如果您从 Google 表格中获取数据,您可以编写一个 Google Apps 脚本来连接字段或其他方式。
遗憾的是,由于它对 SQL 的限制,我无法在 Google Data Studio 中找到解决方案,但是由于我从 Big Query 上的表中提取源数据,我能够使用表查询功能来制定我的数据由 GDS 使用。
对于遇到与我相同问题的任何人,如果您使用的是 Big Query 或其他可以直接转换表数据的数据源,请使用:
SELECT
Order_Number,
array_to_string(array_agg(Part_Number), ', ') as parts,
sum(Quantity_Sold) as total_quantity_sold
FROM `SalesTable`
group by Order_Number;
令我感到沮丧的是,这样一个简单的公式可以用于除 GDS 之外的任何其他 SQL 环境。哦,好吧。