这似乎是一个我无法解决的简单问题。我有以下公式(工作正常)。
=MEDIAN(FILTER('Filtered-Data'!$D$4:$D,'Filtered-Data'!$C$4:$C=B3))
我想要的是使用 ArrayFormula 来获得范围 B3:B 的列结果,而不仅仅是 B3
这可以做到吗?
这似乎是一个我无法解决的简单问题。我有以下公式(工作正常)。
=MEDIAN(FILTER('Filtered-Data'!$D$4:$D,'Filtered-Data'!$C$4:$C=B3))
我想要的是使用 ArrayFormula 来获得范围 B3:B 的列结果,而不仅仅是 B3
这可以做到吗?
第一个想法是使用 Google QUERY 函数,但它不支持标准 SQLSELECT ... 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
东西对我们没有好处,因为我们总是想要某种行号。来了,它用好的“0”IFERROR
替换所有:
Google 电子表格从不计算从“0”开始的行(它从“1”开始,只有偏移量是从零开始的),所以这是非常安全的,除非您的数据包含“0” " - 而不是将其更改为对您的情况安全的任何其他内容。N\A
IFERROR(MATCH(col1,col2,0),0)
由于 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