获取过滤后的加权平均值 table

Get a weighted average of a filtered table

我正在寻找一种解决方案,它可以根据动态过滤 table 为我提供加权平均值。这是我拥有的:

A 列:网址列表, B列:数字, C 列:百分比

/page                   100000  20%
/brochures.htm?en       27443   75,30%
/brochures.htm?fr       1656    67,33%
/brochures.htm?it       483     75,00%
/brochures.htm?fr-fr    6       0,00%

我想要的是一个公式,它给出以“/brochures/htm”开头的页面的加权百分比,在本例中为:74,83%。

我可以用中间 sheet 分两次完成,我用 table 过滤 table =FILTER(A1:C5;REGEXMATCH(A1:A5;"/brochures.html*")) 然后在第三个 sheet 中通过计算加权平均值 =SUMPRODUCT(C1:C5;B1:B5)/SUM(B1:B5) ,但正如您所想,这不是满足我需求的好解决方案。

有人可以帮忙吗?我创建了一个 google sheet,因此您可以轻松理解我是如何达到 74.83% 的。 -> https://docs.google.com/spreadsheets/d/1Q-ydRSOdoGN2wVj7Z4XWglz-0U7pL3_xMeyGdRB2K84/edit?usp=sharing

对于Excel。您可以使用数组公式来实现此目的。确保在输入公式后使用 Ctrl + Shift + Enter 而不是 Enter

=SUMPRODUCT(IF(LEFT(A1:A5,14)="/brochures.htm",B1:B5,0),C1:C5)/SUM(IF(LEFT(A1:A5,14)="/brochures.htm",B1:B5,0))

我在 Excel 中使用您上面的示例数据对此进行了测试,结果为 74.83%。希望对您有所帮助

对于 Google 张 这将起作用: =ArrayFormula(SUMPRODUCT(IF(LEFT(A1:A5,14)="/brochures.htm",B1:B5,0),C1:C5)/SUM(IF(LEFT(A1:A5,14)="/brochures.htm",B1:B5,0)))

或使用分号 ; 代替逗号 , 如果您的本地设置与美国不同。

我相信,这个公式会有所帮助(Google 仅限表格):

=QUERY(QUERY(QUERY({A3:C8};"select 'avg', Col2*Col3, Col2 where Col1 like '/brochures.htm%'");"select Col1, sum(Col2)/sum(Col3) group by Col1");"select Col2 Label Col2 ''")

第一次查询满足条件时选择Col2*Col3, Col2Col1 like '/brochures.htm%'

第二次查询 找到过滤后的 table

的加权平均值

第三次查询 仅获取第二个查询的结果数字

在您的示例中: https://docs.google.com/spreadsheets/d/1Q-ydRSOdoGN2wVj7Z4XWglz-0U7pL3_xMeyGdRB2K84/edit#gid=1380706652


使用这个公式的好处是你只需要引用一次数据,而且你有更多的setting tools with query公式。