SSRS使用基于多个程序条件的总和?

时间:2011-09-23 15:11:26

标签: sql-server-2008 ssrs-2008 reporting-services ssrs-grouping

我正在创建一个报告并试图获得一个Sum来组合来自多个表的值,并且无法弄明白并开始怀疑它是否可能?

我有2个存储过程以不同的时间帧返回相同的数据。一个存储过程是在过去12个月内根据金额返回数据。另一个程序是返还所有金额的总和超过13个月。我得到的总和为1年,总计为1年+。我希望将这些总数结合起来以获得所有年份的总数。我面临的问题是总数按分类和名称分组。

我有以下示例数据:

Date        Class  Name  Earned Count  Earned Amount  Collected Count  Collected Amount
Sept-11     Red    Jack      5         10.50           2                54.20                  
Sept-11     Red    Bill      2         22.75           4                120.58
Sept-11     Blue   Jill      9         43.23           25               443.32  
Sept-11     Green  Bob       84        45846.33        62               4843.22
Sept-11     Green  Pam       2         13.55           1                23.23
Sept-11     Green  Tammy     32        2332.22         443              33232.33

Aug-11      Red    Jack      1         23.50           2                33.20                  
Aug-11      Red    Bill      2         52.75           4                323.22
Aug-11      Blue   Jill      3         43.23           23               33.32  
Aug-11      Green  Bob       4         46.33           22               653.22
Aug-11      Green  Pam       5         13.55           1                46.23
Aug-11      Green  Tammy     6         1132.22         111              89.33

总计看起来如下:

Date      Class  Name  Earned Count  Earned Amount  Collected Count  Collected Amount   
Sub-Total Red    Jack   33           ##.##          ##               ##.##      
                 Bill   ##           ##.##          ##               ##.## 
          Blue   Jill   ##           ##.##          ##               ##.## 
          Green  Bob    ##           ##.##          ##               ##.## 
                 Pam    ##           ##.##          ##               ##.## 
                 Tammy  ##           ##.##          ##               ##.##   

Year+     Red    Jack   4344         ##.##          ##               ##.##      
                 Bill   ##           ##.##          ##               ##.## 
          Blue   Jill   ##           ##.##          ##               ##.## 
          Green  Bob    ##           ##.##          ##               ##.## 
                 Pam    ##           ##.##          ##               ##.## 
                 Tammy  ##           ##.##          ##               ##.##    

因此,我希望将每个班级和名称的年份+总数与年份总和相结合。例如,我想找一年一年的Jack's Earned Count +所以它会是33 + 4344,除了在现实中我想为所有人列出的所有值都这样做。

在SSRS中,我按类和名称进行分组,并且总计为年+,我试图从年份中添加总和,但它只获得每个人的总数,而不仅仅是一个人和他们的班级。我在一个字段中使用以下表达式:

=Fields!EarnedCount.Value + Sum(Fields!EarnedCount.Value, "MyEmployeeRpt")

有没有办法根据一个值得到一笔金额,比如只有当Name = Bill和Class = Red时得到Sum。我面临的另一个问题是我不知道我可能有多少名字或类别。有什么想法吗?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

SSRS 2008 R2

首先,如果您使用的是SSRS 2008 R2,LOOKUP功能非常值得一看:

Lookup(source_expression, destination_expression, result_expression, dataset)

SSRS 2008

如果您是SSRS 2008,则有两种解决方案:

重写SQL查询

可以从存储过程中提取SQL,然后加入查询,扩展时间范围以跨越两者并更新报告以过滤到所需的时间范围,这意味着您可以使用整个数据集的总和来实现要求的结果。

由于存储过程的性质,这可能无法实现。

使用子报告

此解决方案要求您创建一个子报表,您将其传递给Class,Name和Earned Count,然后子报表将返回合并后的值。

  1. 使用Class,Name和Earned Count参数创建新的子报告
  2. 使用SQL添加新的Tablix以返回Year +
  3. 更新SQL以过滤参数(由于它是存储过程,这可能无法实现)示例:

    ...
    Where [Class] = @Class and [Name] = @Name
    

    或者使用Tablix上的过滤器,按类别和名称进行过滤,它们与相应的参数相等

  4. 除了一个字段外,删除Tablix的所有列和行,添加以下表达式以返回参数传递的已获计数总和+值

    =Sum(Fields!EarnedCount.Value)+Parameters!EarnedCount.Value
    
  5. 将报告大小调整为与tablix相同的大小
  6. 删除边框格式(否则以双边框结束)
  7. 返回原始报告将子报告添加为Tablix中您要查看合并总传递参数Class,Name和EarnedCount的字段
  8. 将边框添加到子报告