我有一个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
我们是否可以使用垃圾值删除列?
嘿山姆,我尝试了你的代码。现在我的整个栏目都有一个很大的空白区域。有没有办法可以隐藏宽阔的空间?答案 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)