簡體   English   中英

Reporting Services使用自定義代碼發布來計算小計

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM