【问题标题】:SSRS custom code and variables lifeSSRS 自定义代码和变量寿命
【发布时间】:2013-05-15 11:48:58
【问题描述】:

我有一份报告需要在显示之前处理从 SQL 获取的数据。 为此,我有一个自定义代码和一个字典,用于推送所有处理过的数据。 我的问题是,如果我在将报告导出到 Word 时将字典保存在报告变量中,则该变量似乎已被清除。 报告变量的生命周期是什么?在报表生命周期内保存对象最方便的方法是什么。

谢谢!

【问题讨论】:

  • 到目前为止,您研究并发现了什么?哪些博文、一些文档等说明了这一点?
  • 我对此进行了很多搜索。一种可能的解决方案是在自定义代码中创建一个 HashTable 作为共享变量。该哈希可以包含报告的所有执行的所有数据,并使用一个键来识别哪个实例处于活动状态。我真的不喜欢这种方法。阅读一些博客,我认为问题可能是 SSRS 2008 的“按需处理”方法。每次导出报告时都会呈现报告。问题是我无法理解或找到准确的可变循环寿命解释以及它为何失去价值。非常感谢!

标签: sql reporting-services tfs report


【解决方案1】:

我已经玩了大约 6 周的自定义代码,因此我可以回答 SSRS 2008 R2 中变量生命周期问题的某些部分。

我的报告使用字典来存储总计,允许我为财务资料提供一些专业小计。我有一些你可以检查的东西(因为我还不能评论)。

您是否将变量声明为“共享”,这是一个自定义代码特定关键字,不会转换为 VB.net。它确保变量存在到下一页,我在 Excel 中对此进行了测试,word 似乎可以很好地传输变量的数据。

但是在 SSRS“按需报告”引擎(在 Web 上,而不是在 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

我还将建议尽可能覆盖密钥以确保减少添加循环。

问候,

【讨论】:

  • 您好 ChallengeAccepted,非常感谢您的回复!由于垃圾和避免竞争条件,我试图避免使用静态变量。但这似乎是唯一的方法。我仍然想知道为什么 SSRS 会清除一些局部变量,而不是全部(或一个都不)。谢谢!!
  • 没问题,我不得不处理一个拒绝分组和聚合想法的 OLE DB 数据源。所以我开始与这些非常相似:)
猜你喜欢
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多