0

这似乎是一个我无法解决的简单问题。我有以下公式(工作正常)。

=MEDIAN(FILTER('Filtered-Data'!$D$4:$D,'Filtered-Data'!$C$4:$C=B3))

我想要的是使用 ArrayFormula 来获得范围 B3:B 的列结果,而不仅仅是 B3

这可以做到吗?

4

1 回答 1

0

第一个想法是使用 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)))) 

解释:

  1. ARRAYFORMULA(MATCH(col1,col2,0))在包含值匹配条件的数组第一行中查找,0/1 确定匹配是从顶部开始还是从底部开始。对于独立使用,MATCH在产生第一个结果后停止。应用ARRAYFORMULAMATCH我们接近我们想要的——它会产生一系列结果。但是,如果项目不匹配,则会返回错误,因此您会在列中得到如下所示的内容:

    N/A 
    2
    3
    1
    3
    2
    N/A
    N/A
    N/A
    1
    3
    
  2. 这些N/A东西对我们没有好处,因为我们总是想要某种行号。来了,它用好的“0”IFERROR替换所有: Google 电子表格从不计算从“0”开始的行(它从“1”开始,只有偏移量是从零开始的),所以这是非常安全的,除非您的数据包含“0” " - 而不是将其更改为对您的情况安全的任何其他内容。N\AIFERROR(MATCH(col1,col2,0),0)

  3. 由于 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)

  4. 现在在这些东西上重新应用 ARRAYFORMULA,以处理数组并渲染数组结果而不是单个结果:ARRAYFORMULA(IF(IFERROR(MATCH(col1,col2,0)>0,TRUE,FALSE))并将它放在里面FILTER......瞧,它可以工作。

如需参考,请参阅:http ://productforums.google.com/forum/#!topic/docs/PpnZinkLzQs

于 2013-09-25T15:23:36.993 回答