Google sheets 在Google Sheets中,不使用查询从数组中获取前n个结果
我有一张桌子:Google sheets 在Google Sheets中,不使用查询从数组中获取前n个结果,google-sheets,statistics,google-sheets-query,Google Sheets,Statistics,Google Sheets Query,我有一张桌子: W.Avg中的公式。“小”尺寸的每点值为: 我还尝试使用SORTN()。但这不起作用的原因有很多 =ARRAYFORMULA(SORTN(FILTER( INDEX(INDIRECT("recent_sdcalcs_size"),0,2), INDEX(INDIRECT("recent_listings"),0,3) = H15, INDEX(INDIRECT("recent_sdcalcs_size"),0,2)<>"" ),TRANSPOSE($C4
W.Avg中的公式。“小”尺寸的每点值为:
我还尝试使用SORTN()。但这不起作用的原因有很多
=ARRAYFORMULA(SORTN(FILTER(
INDEX(INDIRECT("recent_sdcalcs_size"),0,2),
INDEX(INDIRECT("recent_listings"),0,3) = H15,
INDEX(INDIRECT("recent_sdcalcs_size"),0,2)<>""
),TRANSPOSE($C46:$L46)))
=数组公式(排序)(过滤器(
指数(间接(“最近的SDC大小”),0,2),
指数(间接(“最近上市”),0,3)=H15,
索引(间接(“最近的SDC大小”),0,2“
),转置($C46:$L46)))
关于间接():处理工作表中的已知错误。当通过应用程序脚本调整命名范围的大小时,google会将所有对这些命名范围的引用更改为#REF代码>打破公式。而且(因为从中提取数据的工作表上的行数不是静态的),我有一个脚本,它每隔一段时间调整该工作表和其上的命名范围的大小,以避免有数百个空白行减慢我的公式。至于QUERY():它几乎可以工作。需要更多的调整才能得到我想要的。但是,正如我所说的,如果电子表格的任何单元格中都包含QUERY()函数,那么与该电子表格关联的应用程序脚本突然需要20倍的时间才能运行。即使应用程序脚本没有访问该单元格或受其影响的任何单元格。这似乎是谷歌表单中的另一个错误。我可以再次检查。。。在ARRAYFORMULA()
中包装QUERY()
基本上应该为数组H27:H36和C46:L46中的每个项运行一次查询(总共10倍,将其视为for..in循环)。但是我认为QUERY()
是否有效并不重要。。。由于其他问题,我无法使用QUERY()
进行此操作。不幸的是,ARRAY\u constraint()
是我不能与ARRAFORMULA()
一起使用的少数函数之一。经验法则是,如果函数以数组作为输入(并且它不是查找函数),它就不能与ARRAYFORMULA()
一起使用。很显然,@I'-'I是正确的,QUERY()
也不能与ARRAYFORMULA()
一起使用。。。另一个原因是我不能使用它。我确信当上面的QUERY()
在W.Avg下的任何单元格的工作表中时,总是会发生这种情况。每个点的值
,中值
,或保留的数据点
列。我所看到的是,我的应用程序脚本中的所有getNamedRange()调用都从一秒的零头变为超过5秒。这包括getNamedRage()
调用既不被相关单元格引用也不受其影响的范围。而受影响的函数需要>20倍的时间才能完全执行。我确信当电子表格中没有QUERY()
函数时,这种情况不会发生。
=AVERAGE.WEIGHTED(
FILTER(
ARRAYFORMULA(QUERY(
INDIRECT("recent_data"),
"select ( E * F ) where (
D = '"&$H$27:$H$36&"' and
C = '"&$H15&"' and
V > 0
) limit "&$C46:$L46
)),
ISNUMBER(ARRAYFORMULA(QUERY(
INDIRECT("recent_data"),
"select ( E * F ) where (
D = '"&$H$27:$H$36&"' and
C = '"&$H15&"' and
V > 0
) limit "&$C46:$L46
)))
),
FILTER(
ARRAYFORMULA(QUERY(
INDIRECT("recent_data"),
"select F where (
D = '"&$H$27:$H$36&"' and
C = '"&$H15&"' and
V > 0
) limit "&$C46:$L46
)),
ISNUMBER(ARRAYFORMULA(QUERY(
INDIRECT("recent_data"),
"select F where (
D = '"&$H$27:$H$36&"' and
C = '"&$H15&"' and
V > 0
) limit "&$C46:$L46
)))
)
)
=ARRAYFORMULA(SORTN(FILTER(
INDEX(INDIRECT("recent_sdcalcs_size"),0,2),
INDEX(INDIRECT("recent_listings"),0,3) = H15,
INDEX(INDIRECT("recent_sdcalcs_size"),0,2)<>""
),TRANSPOSE($C46:$L46)))