在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将被重置并从零再次开始计数。
对正在发生的事情或如何解决此问题的任何帮助?谢谢!
答案 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. "")
它适用于所有地方并且不会重置,在您的情况下,您有一个区域,并且您的代码将在每个区域重置,因此如果您不改变您的方式,您将面对严格的问题。