【问题标题】:Trigger SSRS Data Driven Subscription - with Parameters supplied触发 SSRS 数据驱动订阅 - 提供参数
【发布时间】:2018-07-25 14:11:19
【问题描述】:

我有一个接受日期参数的 SSRS (2016) 报告。用户选择一个日期,然后报告运行并为每位客户返回一页。该报告还有一个数据驱动订阅,当被触发时,通过电子邮件发送与客户相关的输出。

我目前的做法是设置一个只有部分用户可以看到的文本框,点击该文本框会触发订阅。我这样做:

当用户点击“查看报表”按钮时,将用户选择的参数插入到一个表格中,然后使用以下触发订阅:

EXEC msdb.dbo.sp_start_job @job_name ='job name to be sent out'

订阅/报告的数据集然后使用插入到表中的参数来完成它的事情。这一切都很好。

当超过一个人运行报告时会出现问题。第二个人触发器可能会覆盖第一个人参数插入,从而导致发送错误的数据集。

我的问题是......有没有更好的方法来触发数据驱动订阅,其中报告需要参数值 - 但参数值无法预先确定?

如果我的方法是可以接受的,我怎样才能消除参数值的覆盖?

更好的是,如何确定正确的参数并将其传递给订阅?例如会话ID/用户ID..等,

欢迎任何想法或替代实现..

【问题讨论】:

    标签: reporting-services subscription ssrs-2016 data-driven


    【解决方案1】:

    我之前也遇到过同样的问题,默认表值在另一个用户的处理过程中被覆盖。我解决它的方法是在 HOST_ID 或 HOST_NAME 的默认表中添加一列。这有点痛苦,因为您也将该参数传递给了报告。

     SELECT HOST_ID(), HOST_NAME()
    

    在报表参数中可以使用下面的表达式默认值来获取当前用户。

     =Right(User!UserID, Len(User!UserID)-instr(User!UserID, "\"))
    
    • 注意:如果您将其设置为报表变量,您的数据驱动订阅将会失败。作为参数,它将起作用。

    【讨论】:

    • 对不起.. 走偏了..好建议,但我已经尝试过这个.. 开发报告时它在本地工作正常.. 一旦部署.. 它会获取报告服务器详细信息,它将对运行报告的每个人都一样。
    • 这个运气好吗?
    • 感谢您的跟进.. 但我很幸运,任何一天只有一个用户需要报告.. 我只是截断每次运行的控制表.. 插入新数据,然后将其用于订阅.. 数据驱动的订阅无论如何都不允许 User!UserID
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多