【问题标题】:How to calculate weighted average inside an ArrayFormula based on multiple row-criteria?如何根据多个行标准计算 ArrayFormula 内的加权平均值?
【发布时间】:2020-04-28 19:44:37
【问题描述】:

我一直在尝试解决一个问题,但我还没有弄清楚如何做到这一点。

基本上,我需要根据多个标准计算加权平均值。该条件将从ArrayFormula 中检索(这意味着我的列具有不同的条件值,我想使用ArrayFormula 根据该条件自动填充平均值)。

这是我在“主”表上的结构:Main Table Structure

这就是我正在“搜索”的表格:Search Table Structure

“搜索”表就像平衡用户所做的所有操作一样。它包含所有购买和销售,以及相应的价格和数量。

基本上,我需要用户和股票代码的购买价格加权平均值,其中价格是价值,数量是权重。以上述图像为例:“计算属于 example@example.com 的股票 ABEV3 的加权平均购买价格”。但这必须迭代到每一行,使用ArrayFormula.

在实现ArrayFormula之前,我已经成功地使用了查询,但是我发现WHERE子句上使用“数组”时QUERYArrayFormula不兼容。我也尝试使用SUMPRODUCT,将其与FILTER 配对,但它返回大小不匹配错误。

重要的是要提到: 在“主”表中,不同用户可以使用相同的代码,但同一用户的两次代码不同。它就像在数据库中的复合主键一样工作。

提前致谢!

我的工作表的副本是可用的here.

【问题讨论】:

  • 分享您的工作表副本
  • @player0 忘记在问题中包含它。这是here
  • 使用Apps Script 的解决方案适合您吗?
  • @albertovielma 当然,我想。

标签: google-sheets average google-sheets-formula array-formulas google-sheets-query


【解决方案1】:

尝试:

=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/)

【讨论】:

  • 在等待答案时,我设法解决了问题:我在同一张交易表上汇总了所有查询数据,按用户和股票代码分组。然后,我对该查询进行了 VLOOKUP。您的答案无法正常工作,因为如果我更改数量,它会给我一个错误的加权平均值,如 here. 所示
  • 如果您再次分享您的工作表,我可以为您解决问题
  • @GabrielSobral,如果您对解决方法感到满意,请考虑将其作为答案分享,以便其他人有同样疑问时可以看到答案。
  • @albertovielma 当然,我很快就会在这里发布它,它确实对我需要做的许多其他事情非常有用。
【解决方案2】:

所以,我设法做了一个解决方法。

我创建了另一个表格来保存所有总和和分组查询。

在该表上,我查询交易表两次,一次用于买入操作,另一次用于卖出操作,并按用户和股票代码对它们进行分组。结果类似于this

之后,一旦添加了事务,该工作表上的行就会自动更新,只需在该查询间隔内执行 VLOOKUP 即可。

为什么它对我有好处? 因为我需要总数用于其他目的,这可以满足这两个问题。

【讨论】:

    猜你喜欢
    • 2023-02-08
    • 1970-01-01
    • 2012-04-20
    • 2019-08-15
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2020-05-28
    • 2010-10-04
    相关资源
    最近更新 更多