在SSRS中使用反向日期排序数据中的Previous()函数?

时间:2011-09-06 09:41:05

标签: sql-server-2008 vba reporting-services

我正在尝试在报表指示器中使用Previous()函数来显示向上或向下箭头,具体取决于去年是否有增加或减少。当数据以升序显示时,此方法正常工作,但当按升序显示Previous()函数不再有效时,它只将顶行视为最旧的一行。我已经创建了一个自定义code.PercentDifference(Num,PrevNum)来获取差异。为了说明,这是SSRS中的表,Year Change是使用表达式的计算列:

Financial Year         Value     (Year Change) 
Apr 2007 - Mar 2008    30,000          0
Apr 2008 - Mar 2009    37,000        7,000
Apr 2009 - Mar 2010    42,000        5,000
Apr 2010 - Mar 2011    38,000       (4,000)

这样可行,因为第2行'看到'当前 - 上一个为37000-30000。但是,当按日期降序显示时,我得到了这个:

Financial Year         Value     (Year Change) 
Apr 2010 - Mar 2011    38,000          0
Apr 2009 - Mar 2010    42,000        4,000
Apr 2008 - Mar 2009    37,000       (5,000)
Apr 2007 - Mar 2008    30,000       (7,000)

因为第2行将Current-Previous视为42000-38000,而第1行没有第2行的概念?!

它需要看起来像这样:

Financial Year         Value     (Year Change) 
Apr 2010 - Mar 2011    38,000       (4,000)
Apr 2009 - Mar 2010    42,000       (5,000)
Apr 2008 - Mar 2009    37,000        7,000 
Apr 2007 - Mar 2008    30,000          0

我认为我不能在原始数据集查询中执行此操作,因为这只会针对各个日期提取大量值,然后将一些计算列作为例如计算财务年度,月份等。上表是按年度分组的报告金额。

我有什么想法可以产生这个?

非常感谢,

2 个答案:

答案 0 :(得分:1)

我之前以“反向”的方式使用过:

在我的例子中,我使用了上一个函数用于period和valuesale数据,以及以前数据的正常值。

我也隐藏了第一行(没有显示的意思),并在页脚显示最后一个句号

要控制第一行的可见性,请使用:=Previous(Fields!fiscalmonth.Value) is Nothing

enter image description here

enter image description here

答案 1 :(得分:0)

当您按降序按日期排序时,似乎而不是之前的值,您需要下一个值。 与Crystal不同,SSRS不提供任何下一个功能。

您可以尝试创建一个查询参数,该参数取字段“Value”的值并编写如下表达式:

参数!Value.Value((RowNumber(nothing)) - 参数!Value.Value((RowNumber(nothing)+1)

主要思想是你可以将值作为索引数组获取,例如参数!Value.Value(i)将为你提供“值”字段的第i条记录。

并且您需要函数RowNumber来获取行的运行计数。

enter image description here