我有一个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))
但它不起作用。我想看看如上所示的输出。请告诉我。
嘿山姆,
使用您提到的解决方案:
我看到这样的输出:
June Garbage July July-June Aug Aug-Jul
ABC 34 xx 34 0 23 11
DEF 33 xx 21 12 32 11
有没有办法我们可以用垃圾值删除列?
嘿Sam,我试过你的代码。现在我的整个栏目都有一个很大的空白区域。有没有办法可以隐藏宽阔的空间?
如果您按月对列进行分组,则不需要使用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()
我找到了一种方法,通过添加列分组名称,使用“上一个”功能计算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)