如何使 SSRS 为多个用户工作
How to make a SSRS work for multiple users
我在这方面找不到任何东西,所以我认为我问的问题不对,但这是我的情况。我有一个最终用户传递过滤条件列表的存储过程,因为我不知道过滤条件是什么,所以我使用了动态 SQL。此外,为了允许多个用户同时 运行 存储过程,我使用了所有动态命名的 temp table,因此不会发生冲突。一切正常。
现在我的问题是如何输出报告。现在我有一个 SSRS 报告指向存储过程将其输出转储到的单个数据库。当存储过程完成时,将显示报告。这适用于一个用户,但如果两个用户同时 运行 存储过程,我无法知道报告中将显示哪些输出数据。使问题复杂化的是动态用户筛选条件会极大地影响存储过程完成所需的时间。我可以看到报告正在加载数据,就像另一个存储过程会话正在 t运行 将数据加载或加载到输出 table.
我可以将请求排队 运行 一次一个,但理想情况下我希望它们能够同时 运行 因为多个用户必须多次 运行 此报告在每个月初。有没有办法确保显示给最终用户的报表上的数据与用户 运行.
的存储过程会话输出的数据相匹配
编辑:
以下不是必需的,但为了阐明它现在是如何工作的,最终用户访问一个网站,在一堆文本框中输入一些过滤条件,一个用于每个可过滤的数据库字段,使用第三个各方搜索他们已经知道的通配符格式。然后我获取该输入,将其清理并将其解析为 SQL WHILE
字符串,然后将该字符串传递给获取数据的存储过程。当存储过程完成时,控制权被传递回网站,然后网站将报告显示为嵌入对象。所以网站在调用解析方法、存储过程和报表。
SQL 服务器将为每个报表用户创建一个单独的会话。然后它将在自己的会话中调用存储过程(SQL 服务器是多会话产品)并使用选定的参数将 运行 过程并产生唯一的结果,然后将其传递回报告调用它的用户,然后报告将显示给用户。如果十个用户同时使用唯一参数调用该报表,他们将在报表正文中每人看到一个不同的报表。
我最终按照 Benjamin 的建议对整个过程进行了重新设计,并且效果很好,但这确实不是我想要的答案。我终于在研究其他东西时偶然发现了它。您可以设置报表查看器的 DataSources.Add()
方法来添加您自己的数据集。这将允许我 运行 网页中的存储过程,这样我就可以在网页级别捕获和处理错误,这样我就可以向最终用户提供更有用的反馈。您可以查看其他 post setting the datasource for a local report net report viewer 了解更多详情。
这个例子是针对本地报告的,但我能够让它在远程报告上工作,但我在一个受信任的内部网络上。据我了解,您也可以使用较新的报告查看器来执行此操作。
我在这方面找不到任何东西,所以我认为我问的问题不对,但这是我的情况。我有一个最终用户传递过滤条件列表的存储过程,因为我不知道过滤条件是什么,所以我使用了动态 SQL。此外,为了允许多个用户同时 运行 存储过程,我使用了所有动态命名的 temp table,因此不会发生冲突。一切正常。
现在我的问题是如何输出报告。现在我有一个 SSRS 报告指向存储过程将其输出转储到的单个数据库。当存储过程完成时,将显示报告。这适用于一个用户,但如果两个用户同时 运行 存储过程,我无法知道报告中将显示哪些输出数据。使问题复杂化的是动态用户筛选条件会极大地影响存储过程完成所需的时间。我可以看到报告正在加载数据,就像另一个存储过程会话正在 t运行 将数据加载或加载到输出 table.
我可以将请求排队 运行 一次一个,但理想情况下我希望它们能够同时 运行 因为多个用户必须多次 运行 此报告在每个月初。有没有办法确保显示给最终用户的报表上的数据与用户 运行.
的存储过程会话输出的数据相匹配编辑:
以下不是必需的,但为了阐明它现在是如何工作的,最终用户访问一个网站,在一堆文本框中输入一些过滤条件,一个用于每个可过滤的数据库字段,使用第三个各方搜索他们已经知道的通配符格式。然后我获取该输入,将其清理并将其解析为 SQL WHILE
字符串,然后将该字符串传递给获取数据的存储过程。当存储过程完成时,控制权被传递回网站,然后网站将报告显示为嵌入对象。所以网站在调用解析方法、存储过程和报表。
SQL 服务器将为每个报表用户创建一个单独的会话。然后它将在自己的会话中调用存储过程(SQL 服务器是多会话产品)并使用选定的参数将 运行 过程并产生唯一的结果,然后将其传递回报告调用它的用户,然后报告将显示给用户。如果十个用户同时使用唯一参数调用该报表,他们将在报表正文中每人看到一个不同的报表。
我最终按照 Benjamin 的建议对整个过程进行了重新设计,并且效果很好,但这确实不是我想要的答案。我终于在研究其他东西时偶然发现了它。您可以设置报表查看器的 DataSources.Add()
方法来添加您自己的数据集。这将允许我 运行 网页中的存储过程,这样我就可以在网页级别捕获和处理错误,这样我就可以向最终用户提供更有用的反馈。您可以查看其他 post setting the datasource for a local report net report viewer 了解更多详情。
这个例子是针对本地报告的,但我能够让它在远程报告上工作,但我在一个受信任的内部网络上。据我了解,您也可以使用较新的报告查看器来执行此操作。