如何在SSRS中对重复claimnumber统计唯一数量并求和金额?
搞定SSRS里的唯一索赔号统计报表
嘿,我来帮你实现这个需求!你要的是统计唯一索赔号数量,以及对应总金额的报表,在SSRS里有两种简单的方法可以做到,我给你详细拆解:
方法一:先在SQL里处理数据(最省心)
我个人推荐这种方式,因为在数据源层面把数据整理好,报表设计就不用费脑子了。你只需要修改报表的数据集查询,用SQL先把聚合结果算出来:
SELECT COUNT(DISTINCT claimnumber) AS TotalCount, SUM(DISTINCT amount) AS TotalAmount FROM 你的表名;
针对你的示例数据,这个查询会直接返回TotalCount=2和TotalAmount=20,完美匹配你的需求。要是以后同一个索赔号有不同金额(比如123既有10又有20),你想算每个索赔号的总金额再求和,就改成下面的子查询写法:
SELECT COUNT(DISTINCT claimnumber) AS TotalCount, SUM(ClaimTotal) AS TotalAmount FROM ( SELECT claimnumber, SUM(amount) AS ClaimTotal FROM 你的表名 GROUP BY claimnumber ) AS SubQuery;
把这个查询作为报表的数据集,之后直接把TotalCount和TotalAmount拖进表格,设置好表头就搞定了。
方法二:在SSRS报表里直接用表达式计算
如果不想改SQL,也能在报表设计器里直接算:
- 先拖一个表格到报表里,只留一行数据用来放统计结果。
- 算唯一索赔号数量:在第一个单元格里输入表达式:
这个函数会自动数出=CountDistinct(Fields!claimnumber.Value)claimnumber里有多少个唯一值,就是你要的Total Count。 - 算总金额:第二个单元格用这个表达式(适合每个索赔号金额固定的情况):
简单说,=Sum(CInt(LookupSet(Fields!claimnumber.Value, Fields!claimnumber.Value, Fields!amount.Value, "你的数据集名称")))LookupSet会把每个唯一索赔号对应的金额挑出来,再用Sum加起来,正好得到20。要是同一个索赔号有不同金额,需要先按索赔号分组,再在分组里算总和后相加,表达式可以写成:=Sum(First(Fields!amount.Value, "claimnumber分组名称")) - 最后把表头改成
Total Count和Total Amount,调整下边框样式,就和你要的报表一模一样了。
两种方法都能得到你想要的结果:
Total Count -- Total Amount ----------- ------------ 2 -- 20
内容的提问来源于stack exchange,提问作者Nag
相关产品推荐
相关产品推荐

