用表中的计算值填充二维网格的公式

时间:2019-08-22 21:44:19

标签: google-sheets pivot google-sheets-formula array-formulas google-sheets-query

这是使用Google表格公式解决的问题。 我有一个大表(表的“数据”的第一行带有标题),其中包含这些列:

  • A,产品参考
  • B:客户
  • C到F,KPI1到KPI4

在另一页上,按客户(B1:1)排列的产品参考(A2:A)网格。 现在,我需要使用KPI(data!C24&"|"&data!D24&"|"&data!E24&"|"&data!F24)的串联来填充网格中的每个单元格。 您可以锻炼单个公式来填充所有单元格吗?

这是一个带有datagrid工作表的示例电子表格: https://docs.google.com/spreadsheets/d/1iA_kw4kKw99Qk69X4tST9U-QN2SeG2EN3KEeyG6AtHs/edit?usp=sharing

尽管在大型数据集上的性能非常差,但我已经制定了一个可以完成此任务的公式:

=ARRAYFORMULA(
  IFNA(
    VLOOKUP(
      $B3:$B&"|"&C$2:$2,
      ARRAYFORMULA(
        {data!A2:A&"|"&data!B2:B,data!C2:C&"|"&data!D2:D&"|"&data!E2:E&"|"&data!F2:F}
      ),2,0
    ),""
  )
)

解决方案

在带有数据透视的查询上使用ArrayFormula:

=ARRAYFORMULA(
  QUERY(
    {data!A2:A, data!B2:B, data!C2:C&"|"&data!D2:D&"|"&data!E2:E&"|"&data!F2:F},
    "select Col1,max(Col3) where Col1 is not null group by Col1 pivot Col2",0
  )
)

2 个答案:

答案 0 :(得分:2)

在网格的第一个单元格上尝试一下:

=ArrayFormula(query(sort({data!A:A,data!B:B,transpose(substitute(query(transpose(data!C:F),,4)," ","|"))},1,true,2,true),"select Col1, max(Col3) where Col1 is not null group by Col1 pivot Col2",0))

答案 1 :(得分:2)

previous答案的简短版本(无需预先排序coz数据透视表,即可对其进行单独排序):

=ARRAYFORMULA(QUERY(
 {data!A2:A, data!B2:B, data!C2:C&"|"&data!D2:D&"|"&data!E2:E&"|"&data!F2:F},
 "select Col1,max(Col3) where Col1 is not null group by Col1 pivot Col2", 0))

0