SQL Server 报告服务:如何在打开时停止报告触发
Posted
技术标签:
【中文标题】SQL Server 报告服务:如何在打开时停止报告触发【英文标题】:SQL server reporting services: how to stop a report firing when opened 【发布时间】:2008-11-10 12:02:18 【问题描述】:我们有一些 SQL Server 报告服务报告。那时我没有写,但我必须照顾他们。
这些报告在浏览器中打开时会触发,并且使用默认参数(搜索词和限制为空白)它们会检索大量数据,这很慢。客户希望在用户输入参数并按“查看报告”之前不生成报告
很遗憾,我完全不了解 s-s-rS - 我如何阻止报告在打开时触发?
如何在已部署的报告上执行此操作(根据 Rihan Meij 的回答)的详细信息如下:
点击一个报告,点击顶部的“属性”。您可能需要稍等片刻,因为现在可能正在运行慢速报告。然后点击左侧的“参数”。
对于每个参数,请确保选中“提示用户”,并且对于至少一个参数,未选中“具有默认值”。再次点击左上角的“查看”(或返回文件夹点击报告名称)查看报告,注意报告不会立即触发。
在报告生成器中,您可以通过“过滤器”菜单执行此操作。从至少一个过滤器中取消选择值,然后保存报告。
当报告没有参数时,是否也可以阻止报告在加载时触发?
【问题讨论】:
很高兴您用文字解释了它,因为下面提供的屏幕截图链接都不起作用了。 【参考方案1】:我发现我必须至少设置一个报告参数以不设置默认值以防止报告自动运行。
我必须使用这个配置(请注意,我留下的所有 3 个没有默认值的参数都接受 Null,因此用户只需单击 Null 复选框):
[缺少截图]
让用户看到这一点并防止报告自动运行:
[缺少截图]
【讨论】:
由于外部链接中断,这篇文章中的重要信息已经过时了。如果可以,请恢复丢失的屏幕截图。【参考方案2】:我将我的一个参数选择的默认值设置为不存在的值 -1(不是有效的参数值)。这没有产生错误。它只是将参数下拉框设置为并阻止报表运行。我不能使用 NULL 的默认值,因为 NULL 选择所有内容,并且我希望用户在报告运行之前有目的地选择 ALL (NULL)。如果选择 ALL,则需要几分钟才能呈现报告。
【讨论】:
【参考方案3】:我知道这篇文章有点老了,但是因为我在这里有另一个解决方案,所以我只是发布它以防有人需要它。
如果您使用的是 ReportViewer,则可以设置属性 ShowBody="False"。然后在 OnSubmittingParameterValues 事件上,将 ShowBody 属性更改为 true。那么报表中不需要任何额外的参数或没有默认值的参数。
<rsweb:ReportViewer
ID="rv"
runat="server"
Width="100%"
Height="100%"
SizeToReportContent="false"
ZoomMode="PageWidth"
KeepSessionAlive="true"
ProcessingMode="Remote"
PromptAreaCollapsed="false"
InteractivityPostBackMode="AlwaysAsynchronous"
AsyncRendering="true"
ExportContentDisposition="AlwaysInline"
ShowReportBody="False"
ShowPrintButton="false"
OnSubmittingParameterValues="rv_SubmittingParameterValues"/>
然后在rv_SubmittingParameterValues方法中:
this.rv.ShowReportBody = true;
【讨论】:
【参考方案4】:我通过在运行时将我的查询更改为需要参数来做到这一点。
然后我在报告站点上发布报告后,指定该参数应提示用户。这确实有这样的效果,即当用户打开报表查看时,报表不会使 sql server 瘫痪。
【讨论】:
您的链接在“附加屏幕截图”中已失效【参考方案5】:在处理具有可选字段的报告时,我发现了一个很好的技巧,但如果可选字段为空白,则会提取大量数据。
第 1 步:防止自动点火
确保没有为可选参数启用“允许空值” 确保可选参数没有默认值第 2 步:在不使用 'null' 的情况下将参数设为可选
为可选参数启用“允许空白值” 将可选参数的 where 子句修改为WHERE (@param="" OR column = @param)
使用此方法,最终用户需要担心额外的字段,在请求之前不会触发报告,如果文本框为空,则不会评估 where 子句中的条件。
注意:如果报告指定了可用值,则可以使用任何对您的表结构无效的值来代替“”,您也可以通过这种方式与其他数据类型(非字符串)一起使用 em>
【讨论】:
【参考方案6】:我发现最好的方法是添加一个不允许空值但报表不使用的参数。这会阻止它在开始时呈现,但不会影响报告。
唯一的缺点是,如果您在报表查看器中显示报表,则顶部有一个看起来有点奇怪的框。我相信你可以使用一些 C#/CSS 来隐藏它。
由于我没有使用报表查看器来显示,只是在后端呈现,这不会影响我。
即使您使用的是报表查看器,它在开发时也很有帮助!
【讨论】:
【参考方案7】:我只是通过为不返回任何结果的键参数提供默认值来做到这一点。
【讨论】:
例如,如果您的关键参数以部门名称作为文本,则只需将默认值指定为“NO-AUTO-RUN”,这样数据集将不会产生结果。 最简单、最棒的——谢谢。今天的例子——一个日期范围——我在过去留下了“toDate”的默认年份:fromDate default=7/1/2015, and toDate default=6/30/2014...猜猜怎么着? 那个日期范围内没有发生任何事情;)所以当他们第一次执行报告时,它很快就没有返回任何行。然后用户可以编辑两个日期参数,并查看报告。【参考方案8】:我在查询中添加了这个:
其中'开始' = @Start
并制作了一个只有可用值“Start”的参数。报告正在等待输入。
【讨论】:
以上是关于SQL Server 报告服务:如何在打开时停止报告触发的主要内容,如果未能解决你的问题,请参考以下文章
(Necessitas)Microsoft sql db access在打开时出错