Reporting services SSRS:缓存带有日期参数的共享Oracle数据集

Reporting services SSRS:缓存带有日期参数的共享Oracle数据集,reporting-services,ssrs-2008-r2,Reporting Services,Ssrs 2008 R2,我正在使用SSRS(2008R2)创建一个针对Oracle的大型报告 数据库 由于报告的大小,我希望缓存共享的 一夜之间 数据集只有一个参数,默认为今天的 日期,但在报告中可以更改(尽管这会触发 另一个缓存) 我已经为此挣扎了3天,想记录下我是如何让它发挥作用的,并就我的方法获得反馈。1。Oracle数据源: 我发现只有使用本机Oracle驱动程序,而不是OLE DB驱动程序,向数据集传递参数对我来说才有效 2.共享数据集: 我从未能够让SSRS将日期参数传递给Oracle。因此,在我

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

  • 由于报告的大小,我希望缓存共享的 一夜之间

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

  • 我已经为此挣扎了3天,想记录下我是如何让它发挥作用的,并就我的方法获得反馈。

    1。Oracle数据源:
    • 我发现只有使用本机Oracle驱动程序,而不是OLE DB驱动程序,向数据集传递参数对我来说才有效

    2.共享数据集:
    • 我从未能够让SSRS将日期参数传递给Oracle。因此,在我的Oracle查询中,我使用了转换为日期(:EffectiveDate,'YYYY-MM-DD“T”HH24:MI:SS')(稍后您将了解为什么我必须使用ISO 8601格式)
    • 将变量
      :EffectiveDate
      添加到我的SQL查询时,共享数据集会自动向其中添加一个参数。这最初导致Oracle错误ORA-01008:并非所有变量都绑定了。通过删除数据集参数,然后单击数据集查询屏幕上的“刷新字段”以重新创建它,可以解决此问题。唯一明显的区别是现在参数名有一个冒号
    • 我已经设置了dataset参数,如屏幕截图中所示:

    • 参数类型为“text”,默认为ISO 8601格式的今天午夜(
      =格式(今天(),“yyyy-MM-dd\T\0\0\0:\0\0”)
    3.报表数据集:
    • 报表数据集使用上面的共享数据集,并且还有一个数据集参数。在这种情况下,我希望报表数据集参数从报表参数中获取一个日期,但向共享数据集参数传递一个字符串,如下所示:

    • 数据集参数设置为值
      =格式(参数!EffectiveDate.value,“yyyyy-MM-dd\T\0\0\0:\0\0”)
    4.报告参数:
    • 报告参数设置为“日期”类型,默认值为
      =Today()

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

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

    • 缓存刷新计划似乎对参数格式非常挑剔,只有在将日期作为符合ISO 8601的字符串传递时,这是最后一步
    6.笔记:
    • :EffectiveDate
      是我的Oracle字符串绑定变量的名称,
      EffectiveDate
      是我的报表参数的名称。适当地更改代码
    • 我只对日期(即不是时间)感兴趣。如果你也需要时间,你可能需要做一些改变
    • 为了让最终用户知道数据的年代,我在SQL查询中添加了一个额外的列,SYSDATE AS data\u AGE。然后,我可以使用
      First(Fields!report\u Date.Value)引用报告标题中的数据年龄