如何根据多个行条件计算 ArrayFormula 内的加权平均值?
How to calculate weighted average inside an ArrayFormula based on multiple row-criteria?
我想解决一个问题已经很久了,但我还没有弄清楚该怎么做。
基本上,我需要根据多个条件计算加权平均值。该标准将从 ArrayFormula
中检索(这意味着我有具有不同标准值的列,我想使用 ArrayFormula
根据该标准自动填充平均值)。
这是我在 "main" table 上的结构:Main Table Structure
这就是我 "searching" 所在的 table:Search Table Structure
"search" table 与用户进行的所有操作之间的平衡。它包含所有买卖,以及相应的价格和数量。
基本上,我需要用户和代码的购买价格加权平均值,其中价格是价值,数量是权重。以上图为例:"Calculate the weighted average purchased price for ticker ABEV3 that belongs to example@example.com"。但这必须迭代到每一行,使用 ArrayFormula.
在实施 ArrayFormula
之前,我成功地使用了查询,但我发现 QUERY
和 ArrayFormula
在 [=16] 上使用 "Array" 时不兼容=] 子句。我也尝试使用 SUMPRODUCT
,将其与 FILTER
配对,但 returns 大小不匹配错误。
重要提示:
在 "main" table 上,不同用户可以使用相同的代码,但同一用户的代码不能相同两次。它像数据库中的复合主键一样工作。
提前致谢!
我的 sheet 的副本可用 here.
尝试:
=ARRAYFORMULA(IFNA(VLOOKUP(A2:A&B2:B; QUERY(FILTER({
'Transactions - Variable Income'!A2:A&'Transactions - Variable Income'!B2:B\
'Transactions - Variable Income'!D2:D*'Transactions - Variable Income'!E2:E};
'Transactions - Variable Income'!C2:C="buy");
"select Col1,avg(Col2) group by Col1"); 2; 0)))
(https://www.wallstreetmojo.com/average-vs-weighted-average/)
所以,我设法做了一个解决方法。
我创建了另一个 sheet 来保存所有总和和分组查询。
在那 sheet 上,我查询了交易 sheet 两次,一次用于买入操作,另一次用于卖出操作,按用户和代码对它们进行分组。结果类似于 this。
之后,sheet 上的行会在添加事务后自动更新,只需在该查询间隔执行 VLOOKUP
即可。
为什么它对我有好处?
因为我需要总计用于其他目的,而这同时满足了这两个问题。
我想解决一个问题已经很久了,但我还没有弄清楚该怎么做。
基本上,我需要根据多个条件计算加权平均值。该标准将从 ArrayFormula
中检索(这意味着我有具有不同标准值的列,我想使用 ArrayFormula
根据该标准自动填充平均值)。
这是我在 "main" table 上的结构:Main Table Structure
这就是我 "searching" 所在的 table:Search Table Structure
"search" table 与用户进行的所有操作之间的平衡。它包含所有买卖,以及相应的价格和数量。
基本上,我需要用户和代码的购买价格加权平均值,其中价格是价值,数量是权重。以上图为例:"Calculate the weighted average purchased price for ticker ABEV3 that belongs to example@example.com"。但这必须迭代到每一行,使用 ArrayFormula.
在实施 ArrayFormula
之前,我成功地使用了查询,但我发现 QUERY
和 ArrayFormula
在 [=16] 上使用 "Array" 时不兼容=] 子句。我也尝试使用 SUMPRODUCT
,将其与 FILTER
配对,但 returns 大小不匹配错误。
重要提示: 在 "main" table 上,不同用户可以使用相同的代码,但同一用户的代码不能相同两次。它像数据库中的复合主键一样工作。
提前致谢!
我的 sheet 的副本可用 here.
尝试:
=ARRAYFORMULA(IFNA(VLOOKUP(A2:A&B2:B; QUERY(FILTER({
'Transactions - Variable Income'!A2:A&'Transactions - Variable Income'!B2:B\
'Transactions - Variable Income'!D2:D*'Transactions - Variable Income'!E2:E};
'Transactions - Variable Income'!C2:C="buy");
"select Col1,avg(Col2) group by Col1"); 2; 0)))
(https://www.wallstreetmojo.com/average-vs-weighted-average/)
所以,我设法做了一个解决方法。
我创建了另一个 sheet 来保存所有总和和分组查询。
在那 sheet 上,我查询了交易 sheet 两次,一次用于买入操作,另一次用于卖出操作,按用户和代码对它们进行分组。结果类似于 this。
之后,sheet 上的行会在添加事务后自动更新,只需在该查询间隔执行 VLOOKUP
即可。
为什么它对我有好处? 因为我需要总计用于其他目的,而这同时满足了这两个问题。