从SSRS报表按钮运行SSIS作业?

3
我很确定这是不可能完成的,但我还是想和大家确认一下。
我们有一个SSIS作业和一个SSRS报表。SSIS作业从远程系统生成数据到我们的本地服务器;SSRS报表报告由SSIS作业生成的本地数据。
来自SSIS作业的数据每天会无数次更改,但SSIS作业只更新每小时一次。所以假设作业在早上7:01运行,用户在早上7:50生成报表。在这49分钟内数据可能已经发生了变化。
因此我有两个选择: 1. 从用于报告的存储过程中执行SSIS作业。因此当我调用报告时,SP将首先执行SSIS作业并更新数据,然后它将执行返回报告数据的SELECT语句。问题在于SSIS作业需要几秒钟,因此看起来报告很慢。 2. 在SSRS报表中添加一些按钮来执行SSIS作业。这样,如果用户在报告中得到过时的结果,他可以调用SSIS作业并重新运行报告。
因此我倾向于第二种方法,但我不知道是否可以向报表添加另一个按钮来执行SSIS作业。我也想使用SSRS实现这一点(即不创建显示报告的Web表单)。
任何帮助都将不胜感激。

SSIS任务有多复杂?它只是简单的数据复制吗?你可能想要考虑一种复制设置,而不是每小时手动复制数据。 - undefined
3个回答

3
谈到第二种选择,您可以创建一个@RunJob参数,可能是Boolean类型,然后在数据集中验证用户是否选择了True来运行作业。您应该将默认值设置为False,以避免每次生成报告时都执行作业。

enter image description here

在数据集查询中,如果参数@RunJob为True,则使用sp_start_job存储过程运行执行SSIS包的作业,否则只检索报告数据。

虽然这可以帮助您获得所需内容,但我不建议您使用SSRS来实现您的目的,因为它并没有被设计成以任何方式影响基础数据库。

让我知道这是否能帮助您。


为了实现“刷新按钮”效果,您可以隐藏此参数,并添加一个带有“刷新数据”的文本框,其动作设置为“转到报表”,并将该参数设置为True。 - undefined

1
你可以使用一个参数来确定是否运行存储过程。将默认设置为NO
在数据集的开头添加一行,检查参数并在必要时运行SP(参数=是)。
IF @RUN_SP = 'YES'
  EXEC SP_Refresh_Data

如果用户想要刷新,他需要将参数更改为YES,然后重新运行。

0
你可以构建一个运行SSIS包的ASP.NET页面;我认为可以在page_load函数中调用之前回答中提到的sp_start_job过程。 然后,你可以通过将文本框的操作设置为页面的URL来从SSRS报表中调用该页面。 我认为这样会起作用!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接