SSRS代码变量在新页面上重置

时间:2010-05-06 21:01:52

标签: reporting-services ssrs-2008

在SSRS 2008中,我尝试使用自定义代码在组上维护SUM的SUM。原因是我有一个数据表,分组并返回数据的SUM。我在组上有一个过滤器,用于删除组总和为零的行。一切正常,除了我遇到组总数的问题 - 它应该是对可见组总数求和,而是对整个数据集进行求和。有很多关于如何解决这个问题的文章,通常使用自定义代码。我已经制作了自定义函数和变量来维护一个计数器:

Public Dim GroupMedTotal as Integer
Public Dim GrandMedTotal as Integer

Public Function CalcMedTotal(ThisValue as Integer) as Integer
    GroupMedTotal = GroupMedTotal + ThisValue
    GrandMedTotal = GrandMedTotal + ThisValue
    Return ThisValue
End Function

Public Function ReturnMedSubtotal() as Integer
    Dim ThisValue as Integer = GroupMedTotal
    GroupMedTotal = 0
    Return ThisValue
End Function

基本上,CalcMedTotal以组的SUM形式提供,并保持该总和的运行总和。然后在组总线I中输出ReturnMedSubtotal,它应该给我累计的总数并将其重置为下一组。这实际上很有效,除了 - 它在每次分页时重置GroupMedTotal值。我没有明确设置分页符,它只是SSRS查看器中的自然中断。如果我将结果导出到Excel,一切正常并且看起来正确。

如果我在每个组行输出Code.GroupMedTotal,我看到它正确计数,然后如果一个组跨越下一页的多个页面,GroupMedTotal将被重置并从零再次开始计数。

对正在发生的事情或如何解决此问题的任何帮助?谢谢!

3 个答案:

答案 0 :(得分:20)

终于找到了解决方案。在这里,将Shared添加到变量声明:

Public Shared Dim GroupMedTotal as Integer
Public Shared Dim GrandMedTotal as Integer

答案 1 :(得分:5)

仅将变量更改为共享将无效。如果将它们设置为共享,则在导出到PDF / XLS / etc时它们将变为DOUBLED(因为它只是不断添加到现有的var中)。你必须做这样的事情:

Public Shared Dim grandTotal as Decimal
Public Shared Dim costCenterTotal as Decimal
Public Shared Dim workerTotal as Decimal

Public Shared Function Initialize() 
    grandTotal = 0
    costCenterTotal = 0
    workerTotal = 0
End Function

Public Function AddTotal(ByVal b AS Decimal) AS Decimal
    grandTotal = grandTotal + b
    costCenterTotal = costCenterTotal + b
    workerTotal = workerTotal  + b
    return b
End Function

Public Function GetWorkerTotal()
    Dim ret as Decimal = workerTotal
    workerTotal = 0
    return ret
End Function 

Public Function GetCostCenterTotal()
    Dim ret as Decimal = costCenterTotal 
    costCenterTotal = 0
    return ret
End Function 

Public Function GetGrandTotal()
    Dim ret as Decimal = grandTotal
    grandTotal= 0
    return ret
End Function 

答案 2 :(得分:-2)

我不知道你在哪里使用它。但在你的情况下,如果我是你,我只使用简单的表达式来检查SUM的可见性

例如,我使用Right Click On Sum Box \ Select Expression \ then use IIF(SUM <> 0, sum. "")

它适用于所有地方并且不会重置,在您的情况下,您有一个区域,并且您的代码将在每个区域重置,因此如果您不改变您的方式,您将面对严格的问题。