2013-05-15 19 views
2

我有一份報告,需要處理它在顯示之前從SQL獲得的數據。 爲此,我有一個自定義代碼和一個字典,我推送所有處理的數據。 我的問題是,如果我將報告導出到Word時,將該字典保存在報告變量中,該變量似乎已被清除。 報告變量的生命週期是什麼?在報告生活中保存對象最方便的方式是什麼?SSRS自定義代碼和變量生命

謝謝!

+0

您到目前爲止進行了哪些研究和發現?哪些博客文章,文檔等等對此有所說明? – Jeroen

+0

我已經搜索了很多關於這個。一種可能的解決方案是在自定義代碼中創建一個HashTable 作爲共享變量。該哈希可以包含報告所有執行的所有數據,並使用密鑰來標識哪些實例處於活動狀態。我不太喜歡這種方法。讀一些博客,我認爲這個問題可能是SSRS 2008的「按需過程」方法。每次導出時都會呈現報告。問題是,我無法承認或找到一個準確的變量循環生活解釋,以及爲什麼它失去了價值。非常感謝你! – crgarcia

回答

2

我一直在玩大約6周的自定義代碼,所以我可以回答SSRS 2008 R2中變量生命週期問題的一些部分。

我有使用字典存儲總計的報告,允許我提供一些財務資料的專業小計。我有一些你可以檢查的東西(因爲我還不能評論)。

您是否將該變量聲明爲「共享」,這是一個不轉換爲VB.net的自定義代碼特定關鍵字。它確保變量生存到下一頁,我對Excel進行了測試,並且Word似乎能夠很好地傳遞變量的數據。

然而,在SSRS「按需報告」引擎(網絡上,但不包括BIDS)下存在權衡,它保存變量並且不會在清除緩存本身之前收集垃圾。我寫了一些更多的自定義代碼來指示我的參數何時更改並清除變量。

代碼;

Public Shared Dim Totals As New System.Collections.Generic.Dictionary(Of String, Decimal) 

Public Function WipeKeys() as Decimal 'Clear Data from Dictionary (this will clear the cached object as well) 
    Totals.Clear() 
    Return 0D 
End Function 

我也會建議覆蓋關鍵字,儘可能確保減少附加循環。

Regards,

+0

Hi ChallengeAccepted,非常感謝您的回覆!我試圖避免使用靜態變量,因爲垃圾和避免競爭條件。但它似乎是做到這一點的唯一方法。我仍然想知道爲什麼SSRS清理了一些本地變量,而不是全部(或不是全部)。謝謝!! – crgarcia

+0

沒問題,我不得不處理一個拒絕分組和聚合的OLE DB數據源。所以我已經開始非常類似於這些:) – ChallengeAccepted