使用DSUM函数求和时累加历史行数据的问题排查
DSUM函数未按订单ID筛选反而累加的原因及解决方法
问题根源
你使用的条件区域$A$1:A2(下拉后变为$A$1:A3)包含了多行条件值,DSUM对多行条件的处理逻辑是逻辑或(OR)——只要满足条件区域中任意一行的记录,都会被纳入求和范围:
- 计算OId=1的行时,条件区域仅包含
OId=1的条件,结果正确为30; - 计算OId=2的行时,下拉后的条件区域包含
OId=1和OId=2两个条件,DSUM会把Line Items表中所有OId为1或2的记录求和,即30+22=52,因此出现累加历史数据的情况。
解决方法
要实现按当前行OId单独筛选求和,需让条件区域始终只包含当前行的OId条件,可采用两种方式:
辅助列固定单行条件
在Orders表新增辅助列(如C列),C1输入标题OId,C2输入=A2,然后在B2输入公式:=DSUM('Line items'!A:B, "Total", $C$1:C2)下拉时,辅助列会自动匹配当前行OId,条件区域始终仅包含标题和当前行的OId,确保每次只筛选对应订单的记录。
数组条件直接指定
用数组替代区域引用,明确指定当前行OId为筛选条件,公式改为:=DSUM('Line items'!A:B, "Total", {"OId"; A2})该数组仅包含标题和当前行OId,每次计算只会匹配对应订单的Line Items记录。
内容的提问来源于stack exchange,提问作者user1016976
相关产品推荐
相关产品推荐

