在 Google Data Studio 中,如何将一列中的多个行值按另一列中的 ID 分组?

问题描述 投票:0回答:2

这是我在这里的第一篇文章。我很难想出一个解决方案来解决我在 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。

sql database concatenation data-analysis google-data-studio
2个回答
0
投票

要基于 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

但是,它只有在您有两个零件号时才有效,它只能返回两个零件。 The result of the above furmula

这里是 Google Data Studio 计算字段中支持的函数列表。例如,GROUP_CONCAT() 可以解决您的问题,但它不在列表中。

另一种解决方法是将其连接到您从中导入数据的源中。例如,如果您从 Google 表格中获取数据,您可以编写一个 Google Apps 脚本来连接字段或其他方式。


0
投票

遗憾的是,由于它对 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 环境。哦,好吧。

© www.soinside.com 2019 - 2024. All rights reserved.