使用 table 的计算值填充二维网格的公式
Formula to fill a two dimensional grid with computed value from a table
这是一个要用 Google Sheets 公式解决的问题。
我有一个很大的 table(sheet “数据”,第一行有 headers),这些列:
- A、产品参考
- 乙:客户
- C 到 F,KPI1 到 KPI4
在另一个 sheet 上,客户 (B1:1) 的产品参考 (A2:A) 网格。
现在我需要用 KPI 的串联填充网格中的每个单元格 (data!C24&"|"&data!D24&"|"&data!E24&"|"&data!F24
)
你能用一个单个公式来填充所有单元格吗?
这是一个带有 data
和 grid
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))
这是一个要用 Google Sheets 公式解决的问题。 我有一个很大的 table(sheet “数据”,第一行有 headers),这些列:
- A、产品参考
- 乙:客户
- C 到 F,KPI1 到 KPI4
在另一个 sheet 上,客户 (B1:1) 的产品参考 (A2:A) 网格。
现在我需要用 KPI 的串联填充网格中的每个单元格 (data!C24&"|"&data!D24&"|"&data!E24&"|"&data!F24
)
你能用一个单个公式来填充所有单元格吗?
这是一个带有 data
和 grid
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))
=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))