如何减去s-s-rs矩阵中的相邻列
Posted
技术标签:
【中文标题】如何减去s-s-rs矩阵中的相邻列【英文标题】:how to subtract adjacent columns in an s-s-rs matrix 【发布时间】:2013-11-27 16:17:13 【问题描述】:我有一个 s-s-rs 矩阵,如下所示:
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
有没有办法可以删除带有垃圾值的列?
嘿山姆,我试过你的代码。现在我在整个列上有一个很大的空白区域。有没有办法也可以隐藏广阔的空间?
【问题讨论】:
嘿,我收到一条错误消息:在外部聚合中使用先前的函数。以前的函数不能指定为嵌套聚合。我的表达是这样的: =Sum(IIF(Fields!MONTH.Value=Fields!MONTH.Value,Fields!Products.Value,Nothing))- Sum(IIF(Fields!MONTH.Value=Previous(Fields!MONTH. Value),Fields!Products.Value,Nothing)) 垃圾值到底是什么?如果您按数据集中的列进行分组,那么该列必须与该数据相关?你检查过你的原始数据吗? 问题是,我实际上想隐藏垃圾列。因为它可能正在执行 June-May ,但 May 没有显示在我的报告中。因此,如果有任何方法,我想隐藏该列。我只想隐藏计算差异的第一列?问题清楚了吗? 如何在数据集中设置日期范围?你有用户选择的日期参数吗? 嗯..当然让我试试!谢谢 ! +1 并标记为答案 【参考方案1】:如果您按月对列进行分组,则不需要使用 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()
【讨论】:
嘿山姆!非常感谢你试图帮助我。当我使用以下表达式时,我收到错误消息“不支持在 Tablix 'xyz' 内的 TablixCell 中使用 Previous 聚合函数”我认为导致错误的原因是 Previous(Fields!MONTH.Value) = Nothing,0 嘿山姆!有了最新的补充,我想我们就快到了。但是你能告诉我如何在这里检查第一个月,因为第一个月没有前一个月? 您可以尝试将之前设置为初始值Public Shared previous as Integer = -666
,然后您可以检查该值,即。 =iif(Code.GetPrevious() = -666,0,Code.GetCurrent(Sum(Fields!Products.Value)) - Code.GetPrevious())
我没有测试过,但我不明白为什么它不起作用。
嘿,我尝试了上述解决方案,但我仍然看到输出包含一列不需要的值。我已经更新了我在问题中看到的内容。你能告诉我如何使用垃圾值来处理列吗?
你看到了什么输出?【参考方案2】:
我找到了一种方法,通过添加列分组名称,使用“previous”函数计算 Matrix 列之间的差异。
=Previous(Sum(Fields!AMOUNT.Value),"PeriodGroupName")
查看此处了解更多详细信息。 http://www.tricks-and-tips.nl/tips-and-tricks/sql/s-s-rs/s-s-rs-matrix-compare-column-values 这里是文档。 https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms156372(v=sql.105)
【讨论】:
如果您不确定,请作为评论再次询问或尝试找到更好的解决方案,以便 100% 确定。请阅读规则。 @dpap,对不起,我已经阅读了很多回复“你没有理解这个问题......”所以礼貌。以上是关于如何减去s-s-rs矩阵中的相邻列的主要内容,如果未能解决你的问题,请参考以下文章