SSRS - 以编程方式标记将报表创建为快照时

时间:2014-07-15 09:17:17

标签: reporting-services ssrs-2008-r2

有没有办法以编程方式确定报表是否作为快照运行?

我有一套报告,在创建快照时需要采用与最终用户运行时不同的报告。

差异包括:

  1. Tablix和列可见性
  2. 多参数(可用选项和默认值)
  3. 标题
  4. 中文本框中的表达式
  5. Tablix单元格中的表达
  6. 我已经能够解决大多数这些问题,但这是一系列的问题。理想情况下,我希望在整个报告中使用IsSnapshot()函数。

1 个答案:

答案 0 :(得分:0)

我已经能够在表达式中使用IIf(User!UserID = "",True,False)标记计划的快照(但不是手动触发的快照)。

不幸的是,SSRS意识到User!UserID是易变的,因此如果我还想使用数据驱动订阅,我也不会使用它:"You cannot create a data-driven subscription on a report that contains the User!UserID expression"

为了解决这个问题,我在报告中编写了自己的公共功能" Code"属性:

Public Function UserName()
  Try
   If IsDBNull(Report.User!UserID) Then Return ""
   If IsNothing(Report.User!UserID) Then Return ""
   Return Report.User!UserID
  Catch
   Return ""
  End Try
 End Function

因此,我的报告使用IIf(Code.UserName() = "",True,False)作为快照标记。

我的主要问题是,如果我应该显示所有数据(我想要在我的快照中),那么我正在使用缺少用户名来解决问题。这似乎是一个安全漏洞。

我更愿意拥有一个明确的Snapshot标志,而不是依赖于快照过程的一些副产品!