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

Reporting services 在新页面上重置SSRS代码变量,reporting-services,ssrs-2008,Reporting Services,Ssrs 2008,在SSR2008中,我试图使用自定义代码维护组的总和。原因是我有一个数据表,分组并返回数据的总和。我在组上有一个过滤器,用于删除组和为零的行。一切正常,除了我遇到了组总数的问题-它应该是对可见的组总数求和,而是对整个数据集求和。有很多关于如何解决这个问题的文章,通常使用自定义代码。我制作了自定义函数和变量来维护计数器: Public Dim GroupMedTotal as Integer Public Dim GrandMedTotal as Integer Public Function

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

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是一组的总和,并保持该总和的运行总数。然后在group total行中,我输出ReturnMedSubtotal,它应该给我累计总数,并为下一组重置它。这实际上非常有效,除了在每个分页符上重置GroupMedTotal值。我没有明确设置分页符,这只是SSRS查看器中的自然分页符。如果我将结果导出到Excel,则所有内容都会正常工作并看起来正确

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


在发生什么或者如何解决这个问题上有什么帮助吗?谢谢

我不知道你在哪里用这个。但在你们的例子中,若我是你们,我只是用简单的表达式来检查和的可见性

例如,我会使用
右键单击Sum框\选择表达式\然后使用IIF(Sum 0,Sum。“”)


它在任何地方都有效,不会重置,在你的情况下,你有一个区域,你的代码将在每个区域重置,因此如果你不改变你的方式,你将面临严重的问题。

最终我自己找到了解决方案。在这里,将Shared添加到变量声明中:

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

仅仅将变量更改为共享是行不通的。如果您将它们设置为shared,那么当您导出到PDF/XLS/etc时,它们将加倍(因为它只是不断地添加到现有的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 

我也有同样的问题。微软又做得很好。这应该被标记为解决方案,因为它可以工作。由于某些原因,即使在每个新页面上使用共享/静态变量和方法,也会重置引用的DLL。但是,内联代码块不是。因此,如果没有其他内容,您可以设置共享变量以逐页保存总计,并让所有其他功能保留在DLL中。这个答案不正确。尝试运行报告,然后导出为PDF。你会看到GrandMedTotal实际上翻了一倍,这是错误的。共享变量会随着每次调用而增加。我尝试在页面之间切换了几次,每次共享变量的值都会翻倍。这一次对我来说很有效。仅仅使用共享原因就可以解决上面讨论的加倍问题。注意在Initialize函数中使用了Shared,这样它只会被调用一次。如何以及何时调用Initialize()?我在GetGrandTotal()函数中调用Initialize,这对我来说就是如何初始化?地点、时间、方式?请告知!