Pet*_*ell 8 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
Run Code Online (Sandbox Code Playgroud)
基本上,CalcMedTotal以组的SUM形式提供,并保持该总和的运行总和.然后在组总线I中输出ReturnMedSubtotal,它应该给我累计的总数并将其重置为下一组.这实际上很有效,除了 - 它在每次分页时重置GroupMedTotal值.我没有明确设置分页符,它只是SSRS查看器中的自然中断.如果我将结果导出到Excel,一切正常并且看起来正确.
如果我在每个组行输出Code.GroupMedTotal,我看到它正确计数,然后如果一个组跨越下一页的多个页面,GroupMedTotal将被重置并再次从零开始计数.
任何有关正在发生的事情或如何解决这个问题的帮助?谢谢!
Joh*_*ler 20
终于找到了解决方案.在这里,将Shared添加到变量声明:
Public Shared Dim GroupMedTotal as Integer
Public Shared Dim GrandMedTotal as Integer
Run Code Online (Sandbox Code Playgroud)
只是将变量更改为共享将无效.如果将它们设置为共享,则在导出到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
Run Code Online (Sandbox Code Playgroud)