如何减去ssrs矩阵中的相邻列

时间:2013-11-27 16:17:13

标签: sql-server reporting-services ssrs-2008 reportingservices-2005

My SSRS Matrix我有一个ssrs矩阵,如下所示:

               Month(Columns)
   Product(Rows)  Sales(Data)

输出看起来像这样:

                       June  July  August  Sept  Oct  
          ABC          34     34     23     22    67
          DEF          33     21     32     22    14

我想要一个如下所示的输出:

                       June  July  June-July  Aug  July-Aug  Sept  Aug-Sept  Oct  Sept-Oct
              ABC        34   34      0        23     11      22      1       67     45
              DEF        33   21      12       32     11      22      10      14     8

我尝试过这样的事情:

                Month(Columns) Change
   Product(Rows)  Sales(Data)   Expression

表达式如下所示:

=Sum(IIF(Fields!MONTH.Value=Fields!MONTH.Value,Fields!Products.Value,Nothing))-
Sum(IIF(Fields!MONTH.Value=Fields!MONTH.Value - 1,Fields!Products.Value,Nothing))

但它不起作用。我想看看如上所示的输出。请告诉我。



嘿Sam,

使用您提到的解决方案:

我看到这样的输出:

                       June   Garbage    July  July-June  Aug  Aug-Jul  
              ABC        34     xx        34      0        23     11    
              DEF        33     xx        21      12       32     11    

我们是否可以使用垃圾值删除列?

嘿山姆,我尝试了你的代码。现在我的整个栏目都有一个很大的空白区域。有没有办法可以隐藏宽阔的空间? enter image description here

2 个答案:

答案 0 :(得分:2)

如果您按月对列进行分组,则无需使用SumIif

您可以使用=Sum(Fields!Products.Value)等表达式来获取该特定月份内所有产品的总和。如果您想查看当月和上个月之间的差异,那么如果您在月份列组中的单元格中输入以下表达式...

=Iif(Previous(Fields!MONTH.Value) = Nothing, 0, 
Sum(Fields!Products.Value) - Previous(Sum(Fields!Products.Value)))

您需要在此实例中进行空检查,因为第一个月将不会为之前的任何内容返回任何内容。

如果您有重叠的行和列行组(我相信您这样做),那么您将无法使用Previous,因为它不受支持: - (


我认为唯一的解决方案是使用一些自定义代码。

有一个链接here

Public Shared previous as Integer
Public Shared current as Integer
  Public Shared Function GetCurrent(Item as Integer) as Integer
     previous=current
     current=Item
     return current
  End Function

  Public Shared Function GetPrevious()
     return previous
  End Function

然后你的用法就像是

=Code.GetCurrent(Sum(Fields!Products.Value)) - Code.GetPrevious()

答案 1 :(得分:0)

我找到了一种通过添加列分组名称来使用“上一个”函数来计算Matrix列之间差异的方法。

=Previous(Sum(Fields!AMOUNT.Value),"PeriodGroupName")

请在此处查看更多详细信息。 http://www.tricks-and-tips.nl/tips-and-tricks/sql/ssrs/ssrs-matrix-compare-column-values 这里是文档。 https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms156372(v=sql.105)