SSRS:使用date参数缓存共享的Oracle数据集

时间:2014-06-20 09:57:12

标签: reporting-services ssrs-2008-r2

  • 我正在使用SSRS(2008R2)创建针对Oracle的大型报告 数据库中。

  • 由于报告的大小,我想缓存共享 数据集一夜之间。

  • 数据集只有一个参数,默认为今天的参数 日期,但在报告中可以改变(虽然这会触发 另一个缓存)。

我已经为此困难了3天,并希望记录我如何使用它,以及获得有关我的方法的反馈。

1 个答案:

答案 0 :(得分:1)

1. Oracle数据源:

  • 我发现将参数传递给数据集只能使用本机Oracle驱动程序,而不是OLE DB驱动程序。

Datasource settings

2.共享数据集:

  • 我无法让SSRS将日期参数传递给Oracle。因此,在我的Oracle查询中,我使用了转换TO_DATE(:EffectiveDate,'YYYY-MM-DD"T"HH24:MI:SS')(您将看到我之后必须使用ISO 8601格式的原因)。
  • 将变量:EffectiveDate添加到我的SQL查询时,共享数据集会自动添加参数。这最初导致了Oracle错误ORA-01008: not all variables bound。通过删除数据集参数然后单击数据集查询屏幕上的“刷新字段”以重新创建它来解决此问题。唯一的区别显然是现在参数名称有冒号。
  • 我已将数据集参数设置为如下屏幕截图所示:

Shared Dataset Parameter

  • 该参数的类型为“text”,默认为今天午夜的ISO 8601格式(=Format(Today(),"yyyy-MM-dd\T\0\0:\0\0:\0\0")

3。报告数据集:

  • 报表数据集使用上面的共享数据集,还有一个数据集参数。在这种情况下,我希望报表数据集参数从报表参数中获取日期,但是将字符串传递给共享数据集参数,如下所示:

Report Dataset Parameter

  • 数据集参数设置为值=Format(Parameters!EffectiveDate.Value,"yyyy-MM-dd\T\0\0:\0\0:\0\0")

4。报告参数:

  • 报告参数设置为“日期”类型,如下所示,默认值为=Today()

Report Parameter Report Parameter Defaults

5。共享数据集缓存:

  • 首先,我将共享数据集设置为使用缓存数据(通过浏览器在报表服务器上):

Shared Dataset Caching

  • 然后我设置了“缓存刷新计划”:

Cache Refresh Plan

  • 缓存刷新计划似乎对参数格式非常挑剔,这是最后一步,只有在将日期作为符合ISO 8601标准的字符串传递时才有效。

6。说明:

  • :EffectiveDate是我的Oracle字符串绑定变量的名称,EffectiveDate是我的Report参数的名称。适当地更改你的代码。
  • 我只对日期感兴趣(即不是时间)。如果您还需要时间,可能需要进行一些更改。
  • 为了让最终用户知道数据的年龄,我在SQL查询中添加了一个额外的列,SYSDATE AS DATA_AGE。然后,我可以使用First(Fields!Report_Date.Value, "<report_dataset_name")
  • 在报告标题中引用数据的年龄
  • 我可以创建报告的快照,但所有提示都显示为灰色,即使所有其他提示仅影响报告过滤。
  • 要在我的快照中使用不同的提示默认值,我使用了测试IsNothing(User!UserID)。我很想知道是否有更好的方法。
  • 我的例子不一定按照我设置的顺序(即我在显示其设置之前参考报告参数)。
相关问题