我的报告根据日期范围从 SQL 获取数据,使用自定义代码按 Employee 和 CategoryType 计算总计,并将值存储在字典中。为了得到 Employee 的总计,在一个矩阵单元格中,我调用一个函数并将 EmployeeID 传递给它,该 EmployeeID 返回累计总数。图表以完全相同的方式填充数据。
直接在 Report Builder 3.0 中运行报表时,一切正常。但是,将报告导出到 Excel 时会出现问题。 第一次出口时,总数翻了一番。 每连续一次,乘数就加一。(第一 - 翻倍;第二 - 三倍;第三 - 四倍等)。为了解决这个问题,我重写了 Init 事件并清除了字典变量(请参阅下面的代码——注意我使用的关键字Shared是我在另一个发布的问题中发现的)。Excel 解决了问题,因为现在字典已被垃圾收集,它不会从内存中已经存在的内容重新计算。
但现在存在一个不同的问题。 通过 Web 执行报告时,矩阵填充了数据并且总数是正确的,尽管图表只填充了当前日期一周日期范围内的数据。很奇怪!如果我将日期范围增加到一周以上,我会得到一个空白图表。上面的链接暗示这可能是由于 SSRS 的“按需报告”引擎,但在我看来并没有解决这个问题。当将报告导出到 Excel 以及在 Web 上简单地查看时,我需要一个可以工作的解决方案(显示正确的总数并用数据填充图表)。如果需要,我将发布屏幕截图和更多信息。
我已经尝试覆盖LoadComplete事件(认为这是清除字典的好时机,因为页面上的所有其他控件都已加载),但不确定这在 SSRS 自定义代码中是否可行并且不确定正确的语法。
我应该使用不同的渲染事件来完成这项工作吗?有人遇到过类似的事情并有合理的解决方案吗?
public Shared Dim dict As New System.Collections.Generic.Dictionary(Of String, Decimal)
'Override built-in OnInit function and clears dictionary; ensures correct totals when exporting to Excel
Protected Overrides Sub OnInit()
dict.Clear()
End Sub