在 Google 工作表中 collate/aggregate 特定数据的有效方法

Efficient way to collate/aggregate specific data in Google Sheets

我正在寻找一种有效的方法来收集和汇总 Google 表格中的一些日期。我一直在查看查询函数、pivot tables 和 Index + Match 公式,但到目前为止,我还没有找到一种方法来获得我正在寻找的结果。我有一组数据,大致如下所示。

带 X 的字段代表不相关的数据,我不想在最终结果中显示这些数据。它们仅用于说明在我想要的数据列之间有我不想要的数据列。这些列中的数据具有不同的类型并且每种类型具有不同的值,它们实际上并不是其中带有“X”的字段。只有带有数字的字段以及这些字段顶部和左侧的相关名称才是感兴趣的。目的是创建一个看起来或多或少像这样的列表。

我突出显示了那些黄色字段,因为该数据已汇总。例如,在原始文件中字段 D3 显示 Laura 和 Pete 之间的关系,编号为 1,字段 L3 也显示 Laura 和 Pete 之间的关系,因此该字段中的数字将添加到其他字段中的数字导致该特定组合的总计为 2。

如果有任何建议可以帮助我找到一个优雅高效的解决方案,我将不胜感激。我能想出的唯一解决方案是涉及多个“中间”工作表,而且必须有更好的方法。

更新:

通过应用 player0 的答案中的解决方案解决。我只需要切换公式中 Col1 和 Col2 的顺序,就可以让 table 按照我需要的方式排序。公式现在如下所示。非常感谢 player0 和 Erik Tyler 的努力。

=INDEX(QUERY(SPLIT(FLATTEN(A2:A&"×"&D1:N1&"×"&D2:N), "×"), 
 "select Col2,Col1,sum(Col3)
  where Col2 is not null 
    and Col3 is not null
  group by Col2,Col1
  label sum(Col3)''", ))

尝试:

=INDEX(QUERY(SPLIT(FLATTEN(A2:A&"×"&D1:N1&"×"&D2:N), "×"), 
 "where Col3 is not null and Col2 is not null", ))


更新:

=INDEX(QUERY(SPLIT(FLATTEN(A2:A&"×"&D1:N1&"×"&D2:N), "×"), 
 "select Col1,Col2,sum(Col3)
  where Col3 is not null 
    and Col2 is not null
  group by Col1,Col2
  label sum(Col3)''", ))

给定您当前的数据集(似乎只扩展到第 N 列),将以下内容放在第 N 列右侧的某处:

=ArrayFormula(SPLIT(TRANSPOSE(QUERY(TRANSPOSE(QUERY(SPLIT(QUERY(FLATTEN(FILTER(IF(NOT(ISNUMBER(D2:N)),,D1:N1&"~ "&A2:A&"|"&D2:N),A2:A<>"")),"Select * WHERE Col1 Is Not Null"),"|"),"Select Col1, SUM(Col2) GROUP BY Col1 LABEL SUM(Col2) ''")&"~ "),,2)),"~ ",0,1))

如果将其放在与原始数据不同的 sheet 中会更好。假设您的原始数据 sheet 名为 Sheet1,将上述公式的以下版本放入新的 sheet:

=ArrayFormula(SPLIT(TRANSPOSE(QUERY(TRANSPOSE(QUERY(SPLIT(QUERY(FLATTEN(FILTER(IF(NOT(ISNUMBER(INDIRECT("Sheet1!D2:"&ROWS(Sheet1!A:A)))),,Sheet1!D1:1&"~ "&Sheet1!A2:A&"|"&INDIRECT("Sheet1!D2:"&ROWS(Sheet1!A2:A))),Sheet1!A2:A<>"")),"Select * WHERE Col1 Is Not Null"),"|"),"Select Col1, SUM(Col2) GROUP BY Col1 LABEL SUM(Col2) ''")&"~ "),,2)),"~ ",0,1))

这种单独的 sheet 方法和公式允许原始数据无限期地扩展到 Col N 之后。