[英]Reporting Services calculating sub totals using custom code issue
我正在使用自定義代碼來計算小計。 小計正在向下移動。
如果我運行報告1次,下面的自定義代碼將非常有用。
自定義代碼
Public Shared Dim SortCodeTotal as Decimal
Public Shared Function Initialize()
SortCodeTotal = 0
End Function
Public Function AddTotal(ByVal b as Decimal) as Decimal
SortCodeTotal = SortCodeTotal + b
return b
End Function
Public Function DisplayTotal(ByVal b as Decimal) as Decimal
Dim ret as Decimal = 0
ret = SortCodeTotal + b
SortCodeTotal = ret
return ret
End Function
明細行包含此表達式
=Code.AddTotal(Sum(Fields!Activity_Amt.Value))
摘要總計包含此表達式
=Code.DisplayTotal(0)
該報告使用矩陣。 超過1個周期運行時,自定義代碼不正確。 如何更改自定義代碼以在矩陣的所有周期中工作。
小計的工作方式類似於累計。
例
Detail 1 $50
Detail 1 $50
Sub Total **$100**
Detail 2 $40
Detail 2 $40
Sub Total **$180**
Detail 3 -$50
Detail 3 $50
Sub Total **$180**
Detail 4 $20
Detail 4 $50
Sub Total **$250**
總計發生在上一個子總計 + 下一個明細行上
看來您的問題與SSRS處理矩陣的方式有關。 每整行都要經過評估,然后再傳遞到下一行,因此您的累計總數是水平計算的,而每列都需要垂直累計。
下面的自定義函數使用Collection
來存儲每一行的每個期間的總計。
Public Shared dict As New Collection
Public Function AddTotal(ByVal value as Double, ByVal period As String) As Object
Dim subtotal As Double
If not dict.Contains(period) Then
dict.Add(value, period)
subtotal = dict.Item(period)
Return subtotal
End If
subtotal = dict.Item(period) + value
dict.Remove(period)
dict.Add(subtotal,period)
Return dict.Item(period)
End Function
要調用此函數,請使用:
=Code.AddTotal(sum(Fields!Activity_Amount.Value),Cstr(Fields!Period.Value))
我認為不需要其他功能,因為只要您在正確的范圍內,期間組內,明細組外和Sort Code
組內使用正確的范圍,它就會返回每次評估中的累計總數。
它產生:
在我的數據集中, Period
字段的值為1和2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.