使用 table 的计算值填充二维网格的公式

Formula to fill a two dimensional grid with computed value from a table

这是一个要用 Google Sheets 公式解决的问题。 我有一个很大的 table(sheet “数据”,第一行有 headers),这些列:

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

这是一个带有 datagrid sheet 的示例传播sheet: https://docs.google.com/spreadsheets/d/1iA_kw4kKw99Qk69X4tST9U-QN2SeG2EN3KEeyG6AtHs/edit?usp=sharing

我已经制定了一个可以完成这项工作的公式,但在大型数据集上的表现很差:

=ARRAYFORMULA(
  IFNA(
    VLOOKUP(
      $B3:$B&"|"&C:,
      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
  )
)

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

=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))

答案的较短版本(不需要预先排序,因为 pivot 会自行排序):

=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))