我有一份接受日期参数的SSRS(2016)报告。用户选择日期并运行报告并为每个客户返回一页。该报告还有一个数据驱动的订阅,当触发时,通过电子邮件发送与客户相关的输出。
我目前的做法是设置一个只有部分用户可以看到的文本框,然后点击文本框才会触发订阅。我是这样做的:
当用户点击“查看报告”按钮时,将用户选择的参数插入表格,然后使用以下内容触发订阅:
EXEC msdb.dbo.sp_start_job @job_name ='job name to be sent out'
订阅/报告的数据集然后使用插入表中的参数来完成它。一切正常。
当多个人运行报告时出现问题..第二人触发器可能会过度写入第一个人参数插入,导致发送错误的数据集。
我的问题是..是否有更好的方法来触发数据驱动的订阅,其中报告需要参数值 - 但参数值无法预先确定?
如果我的方法可以接受,我怎样才能消除参数值的覆盖?
更好的是,我如何确定正确的参数并将其传递给订阅?例如会话ID /用户ID ..等等,
欢迎任何想法或替代实施。
答案 0 :(得分:0)
之前我遇到过同样的问题,在处理其他用户的过程中会覆盖默认表值。我解决它的方法是在HOST_ID或HOST_NAME的默认表中添加一列。这有点痛苦,因为你已经将该参数传递给报告。
SELECT HOST_ID(), HOST_NAME()
OR
在报表参数中,您可以使用以下表达式默认值来获取当前用户。
=Right(User!UserID, Len(User!UserID)-instr(User!UserID, "\"))