这似乎是一个我无法解决的简单问题。我有以下公式(工作正常)。
=MEDIAN(FILTER('Filtered-Data'!$D$4:$D,'Filtered-Data'!$C$4:$C=B3))
我想要的是使用ArrayFormula获取范围B3:B的列式结果,而不仅仅是B3
可以这样做吗?
答案 0 :(得分:0)
第一个想法是使用Google QUERY函数,但它不支持标准SQL SELECT ... WHERE... IN (valA,valB...)
子句。但是你需要的东西是ARRAYFORMULA
可以实现的。诀窍是适当匹配两列,处理错误,并应用适当的过滤(多线条以便于阅读):
=MEDIAN(FILTER(Filtered-Data'!$D$4:$D,
ARRAYFORMULA(IF(IFERROR(MATCH
(Filtered-Data'!$D$4:$D,'Filtered-Data'!$C$4:$C=B3:B,0),0)>0,TRUE,FALSE))))
说明:
ARRAYFORMULA(MATCH(col1,col2,0))
在包含值匹配条件的数组第一行中找到,0/1确定匹配是从顶部还是从底部开始。对于独立使用,MATCH
在产生第一个结果后停止。在ARRAYFORMULA
上应用MATCH
会让我们接近我们想要的结果 - 它会产生一系列结果。但是,如果项目不匹配,则返回错误,因此您可以在列中获得如下所示的内容:
N/A
2
3
1
3
2
N/A
N/A
N/A
1
3
这些N/A
内容对我们没有好处,因为我们总是想要某种行号。这里有IFERROR
,用“ol”替换所有N\A
“0”:IFERROR(MATCH(col1,col2,0),0)
Google Spreadsheet永远不会计算“0”的行数(它从“1”开始,只有偏移量从零开始),所以除非您的数据包含“0”,否则这是非常安全的 - 而不是将其更改为其他任何安全的情况。< / p>
由于FILTER希望在filtering_criteria中使用布尔值的单列数组或计算为布尔数组(https://support.google.com/drive/table/25273?hl=en)的表达式,我们需要确保ARRAYFORMULA
生成这样的布尔数组。 IF
派上用场 - 总是生成TRUE或FALSE:IF(IFERROR(MATCH(col1,col2,0)>0,TRUE,FALSE)
现在重新对这些东西应用ARRAYFORMULA,以便在阵列上工作渲染数组结果而不是单个结果:ARRAYFORMULA(IF(IFERROR(MATCH(col1,col2,0)>0,TRUE,FALSE))
并将其放在FILTER
内...瞧,它有效。
参考:http://productforums.google.com/forum/#!topic/docs/PpnZinkLzQs