仅选择该列中的特定总和时获取列的累积总和

Taking the Cumulative sum of a Column while Selecting only a Specific Sum within that column

我有一个 table,它有一个符号列和一个对应的数字。比方说,在这种情况下,我只想要特定符号(例如 ABC 和 DEF)的累计和,我如何构建一个公式,只计算 ABC 和 DEF 以及我想在必要时隔离的其他符号的累计和而不是比给定日期所有交易品种的累计总和。下面是一个 table 的示例,其中仅 ABC 和 DEF 的累积总和的答案在特定日期的黄色单元格中突出显示。我也希望公式能够选择任何指定的日期。

您可以使用 FILTER 从您的 table 中获取符合条件的值列表,然后 SUM 那。

=SUM(FILTER(NameOfTable[stat 1], <Criteria>))

诀窍是指定过滤条件。您要求提供日期范围和符合条件的符号列表。

约会很简单

(NameOfTable[Date]>=G2)*(NameOfTable[Date]<=G3)

限定符号列表有点困难。使用新函数 BYROW 可以完成(在撰写本文时仅供内部人员使用)

(BYROW(--(NameOfTable[Sym]=TRANSPOSE(FILTER(I:I,I:I<>""))),LAMBDA(array,SUM(array))))

整个函数:

=SUM(FILTER(NameOfTable[stat 1],
  (NameOfTable[Date]>=G2)*
  (NameOfTable[Date]<=G3)*
  (BYROW(--(NameOfTable[Sym]=TRANSPOSE(FILTER(I:I,I:I<>""))), LAMBDA(array, SUM(array))))
))

替代方案,不使用 BYROWS

MMULT(--(NameOfTable[Sym]=TRANSPOSE(FILTER(I:I,I:I<>""))),1-N(FILTER(I:I,I:I<>"")))

所以整个公式是

=SUM(FILTER(NameOfTable[stat 1],
  (NameOfTable[Date]>=G2)*
  (NameOfTable[Date]<=G3)*
  MMULT(--(NameOfTable[Sym]=TRANSPOSE(FILTER(I:I,I:I<>""))),1-N(FILTER(I:I,I:I<>"")))
))

NameOftable 更改为您实际的 table 姓名

您可以将带有“*”(表示“和”)和“+”(表示“或”)的语句与 FILTER 函数串在一起以根据多个条件进行过滤。

如果您想要特定日期和特定符号,请使用类似

的内容
=SUM(FILTER(sum_range, 
((date_range=date)*
((symbol_range=symbol1)+(symbol_range=symbol2)+...))))

例如:

=SUM(FILTER($C:$C,
(($B:$B=E3)*
(($A:$A=E4)+($A:$A=E5)))))

如果你只想要特定单个日期的总和,那么使用它

=SUMPRODUCT((--(A2:A10=E1)+--(A2:A10=F1))*IF(G1="",1,(B2:B10=G1)),C2:C10)

如果你想要任何日期之前的总和然后使用它

=SUMPRODUCT((--(A2:A10=E1)+--(A2:A10=F1))*IF(G1="",1,(B2:B10<=G1)),C2:C10)

如果你想要两个给定日期之间的总和那么

=SUMPRODUCT((--(A2:A10=E1)+--(A2:A10=F1))*IF(G1="",1,(B2:B10<=G1))*IF(H1="",1,(B2:B10>=H1)),C2:C10)