在Google表格中,在不使用查询的情况下从数组中获得前n个结果

时间:2018-06-18 20:27:09

标签: google-sheets statistics google-sheets-query

我有一张桌子:

enter image description here

W.Avg. Value per Point中的公式尺寸"小"是这样的:

=AVERAGE.WEIGHTED(
  FILTER(
    INDEX(INDIRECT("recent_sdcalcs_size"),0,2),
    INDEX(INDIRECT("recent_listings"),0,3) = H15,
    INDEX(INDIRECT("recent_sdcalcs_size"),0,2)<>""
  ),
  FILTER(
    INDEX(INDIRECT("recent_listings"),0,5),
    INDEX(INDIRECT("recent_listings"),0,3) = H15,
    INDEX(INDIRECT("recent_sdcalcs_size"),0,2)<>""
  )
)

H15 =&#34;小&#34;。

此公式有效...它将查找&#34; Small&#34;的所有定义值和权重。在另一张表上列出并给出这些值的加权平均值。问题是两个FILTER()函数返回的值和权重的样本数组不能代表 glows 的总体。

我知道发光的人口分布(% Chance下的Glows)。由此我创建了下表:

enter image description here

这给了我相对于每个尺寸的每个发光的代表性计数(反之亦然)。而且,到目前为止,一切都很好。

但最后一步是我挣扎的地方。当我查找尺寸&#34;小&#34;上面的FILTER()函数中的值我需要将返回到AVERAGE.WEIGHTED()的结果限制为(在此示例中)62 none,31 Dusky,15 Lucent,7 Bright,3 Brilliant,1 Radiant,没有令人眼花缭乱, StarLike,Crown Jewel或Titanic。根据&#34; Small&#34;在第二张图片中排。

电子表格全部来自here

我实际上已经使用QUERY()&#34;&#34;限制&#34;特征。不幸的是,在电子表格中的任何地方使用QUERY()会使(不相关的)Google Apps脚本从执行约10秒钟到执行需要约200秒。这使得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
    )))
  )
)

我也试过使用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)))

0 个答案:

没有答案