You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSRS按双字段分组实现去重求和问题求助

解决SSRS中分组后重复统计Seats的问题

这个问题的核心是同一个客户订单(customer_no+order_no)的seats值在多个zone行里重复存储,直接用Sum(Fields!seats.Value)会把每个zone对应的seats都加一遍,自然就出现了重复统计的问题。下面给你两个实用的解决方案:

方法一:利用分组层级取唯一值求和

如果你已经在报表里创建了按customer_no和order_no组合的分组(假设这个组的名称是Group_CustomerOrder),可以直接在总计行使用以下表达式:

=Sum(First(Fields!seats.Value, "Group_CustomerOrder"))

原理是:在Group_CustomerOrder这个分组层级里,每个唯一的客户订单只会返回第一个seats值(因为同一订单的seats都是相同的),然后对这些唯一值求和,就不会重复计算了。

对应你的示例数据:

  • 客户1的订单1取到seats=2,客户4的订单4取到seats=1
  • 最终总和是2+3+2+1=8,正好符合你的期望。

方法二:用LookupSet实现去重求和(不依赖分组)

如果不想依赖报表分组,也可以用LookupSet函数直接在数据集层面去重,表达式如下:

=Sum(CInt(LookupSet(Fields!customer_no.Value & "|" & Fields!order_no.Value, Fields!customer_no.Value & "|" & Fields!order_no.Value, Fields!seats.Value, "DataSet1")(0)))

说明:

  1. 用customer_no|order_no拼接成唯一标识,确保每个订单只被识别一次
  2. LookupSet会返回每个唯一订单对应的seats数组,取数组的第一个元素((0))就是该订单的seats值
  3. 转成整数(CInt)后再求和,避免类型问题
  4. 把DataSet1替换成你实际的数据集名称就行

这样处理后,同样能得到正确的总计结果8。

注意事项

确保customer_no+order_no的组合是每个订单的唯一标识,并且同一订单下的seats值是一致的,这两个方法才能生效哦~

内容的提问来源于stack exchange,提问作者Elizabeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:37:23