SUM、FILTER、QUERY 和 IMPORTRANGE 并与数据匹配
SUM, FILTER, QUERY and IMPORTRANGE and match to data
在一个单独的电子表格中,我在第 2 列 (B2:B) 中有项目名称。在同一电子表格的第 10 列 (J2:J) 中,我在该项目上花费了时间(持续时间)。这些项目是重复的,并且在它们上面花费了额外的时间,所以它们在列表中出现了多次。像这样:
Project Name Time Spent
12-001 John 2:13:45
12-002 Sally 0:34:45
12-003 Tim 1:56:12
13-006 Bruce 3:34:12
12-001 John 3:45:09
12-003 Tim 0:38:56
12-001 John 1:00:00
在公式所在的父电子表格中,我在第 2 列 (B2:B) 中有一个所有项目的主列表。我想对另一个电子表格中的数据进行求和和过滤,并将其与正确的项目名称相匹配。所以像这样:
Project Name Time Spent
12-001 John 6:58:54
12-002 Sally 0:34:45
12-003 Tim 2:35:08
13-006 Bruce 3:34:12
我一直在努力:
=sum(filter(importrange("key","Timesheet!A2:J254"),importrange("key","Timesheet!B2")=B2,))
=sum(query(importrange("key","Timesheet!A2:J254"),"Select Col10 where Col2 ="&B2&")
这不起作用。
我确实有一个解决方法,就是对同一个公式中的三个 IMPORTRANGE 函数进行求和和过滤,但这意味着我必须 运行 IMPORTRANGE 数千次?效率不高:
=iferror(sum(filter(IMPORTRANGE("key","Timesheet!J2:J"),IMPORTRANGE("key","Timesheet!B2:B")=B2)),"")
可能不适合 OP,但传统的解决方案可能是一个支点 table:
Project Name
for Rows,总结方式:SUM Time Spent
for Values.
=ArrayFormula(IFERROR(VLOOKUP(B2:B,QUERY(QUERY(ImportRange("key","Timesheet!A2:J254"),"select Col2, hour(Col10)/24+minute(Col10)/1440+second(Col10)/86400"),"select Col1, sum(Col2) group by Col1"),2,0)))
QUERY 是使用 ImportRange 时的理想选择,因为它允许一次 ImportRange 调用 manipulation/aggregation 大量数据。
QUERY 无法在本地聚合时间值,因此需要使用 hour(Col10)/24+minute(Col10)/1440+second(Col10)/86400
复杂地转换为数值。如果持续时间超过一天,则还需要包括天 (Col10)。
嵌套的 QUERY 函数然后提供查找 table,VLOOKUP 使用它来执行项目名称主列表的 "array lookup"。同样,这允许使用一个 ImportRange 调用,而不必填写公式。
在一个单独的电子表格中,我在第 2 列 (B2:B) 中有项目名称。在同一电子表格的第 10 列 (J2:J) 中,我在该项目上花费了时间(持续时间)。这些项目是重复的,并且在它们上面花费了额外的时间,所以它们在列表中出现了多次。像这样:
Project Name Time Spent
12-001 John 2:13:45
12-002 Sally 0:34:45
12-003 Tim 1:56:12
13-006 Bruce 3:34:12
12-001 John 3:45:09
12-003 Tim 0:38:56
12-001 John 1:00:00
在公式所在的父电子表格中,我在第 2 列 (B2:B) 中有一个所有项目的主列表。我想对另一个电子表格中的数据进行求和和过滤,并将其与正确的项目名称相匹配。所以像这样:
Project Name Time Spent
12-001 John 6:58:54
12-002 Sally 0:34:45
12-003 Tim 2:35:08
13-006 Bruce 3:34:12
我一直在努力:
=sum(filter(importrange("key","Timesheet!A2:J254"),importrange("key","Timesheet!B2")=B2,))
=sum(query(importrange("key","Timesheet!A2:J254"),"Select Col10 where Col2 ="&B2&")
这不起作用。
我确实有一个解决方法,就是对同一个公式中的三个 IMPORTRANGE 函数进行求和和过滤,但这意味着我必须 运行 IMPORTRANGE 数千次?效率不高:
=iferror(sum(filter(IMPORTRANGE("key","Timesheet!J2:J"),IMPORTRANGE("key","Timesheet!B2:B")=B2)),"")
可能不适合 OP,但传统的解决方案可能是一个支点 table:
Project Name
for Rows,总结方式:SUM Time Spent
for Values.
=ArrayFormula(IFERROR(VLOOKUP(B2:B,QUERY(QUERY(ImportRange("key","Timesheet!A2:J254"),"select Col2, hour(Col10)/24+minute(Col10)/1440+second(Col10)/86400"),"select Col1, sum(Col2) group by Col1"),2,0)))
QUERY 是使用 ImportRange 时的理想选择,因为它允许一次 ImportRange 调用 manipulation/aggregation 大量数据。
QUERY 无法在本地聚合时间值,因此需要使用
hour(Col10)/24+minute(Col10)/1440+second(Col10)/86400
复杂地转换为数值。如果持续时间超过一天,则还需要包括天 (Col10)。嵌套的 QUERY 函数然后提供查找 table,VLOOKUP 使用它来执行项目名称主列表的 "array lookup"。同样,这允许使用一个 ImportRange 调用,而不必填写公式。