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)))
说明:
- 用
customer_no|order_no拼接成唯一标识,确保每个订单只被识别一次 LookupSet会返回每个唯一订单对应的seats数组,取数组的第一个元素((0))就是该订单的seats值- 转成整数(
CInt)后再求和,避免类型问题 - 把
DataSet1替换成你实际的数据集名称就行
这样处理后,同样能得到正确的总计结果8。
注意事项
确保customer_no+order_no的组合是每个订单的唯一标识,并且同一订单下的seats值是一致的,这两个方法才能生效哦~
内容的提问来源于stack exchange,提问作者Elizabeth
相关产品推荐
相关产品推荐

