reporting-services - SSRS 2008:在布尔值上执行数据集
问题描述
目前使用布尔参数和一些自定义代码来检查至少一个用户可访问的参数是否有数据。如果这个布尔值是真的,我需要在我的一个数据集上运行一个存储过程,否则我希望它什么都不做,因为我有一个文本框用于显示错误,可见性设置为布尔值。
=Code.NoParameters(Parameters!StartDate.Value,Parameters!EndDate.Value,Parameters!ClientCode.Value(0))
Function NoParameters(StartDate as DateTime, EndDate as DateTime, ClientCode as String) As Boolean
Dim RetValue as Boolean
RetValue = "False"
If(StartDate = Nothing And EndDate = Nothing And ClientCode = Nothing)
RetValue = "True"
Else
RetValue = "False"
End If
Return RetValue
End Function
我尝试了一些变体
If IsEmpty = False EXEC sp_grand_smslog_processing
并且
iif (Parameters!IsEmpty.Value = False, "sp_grand_smslog_processing" , " ")
这是我发布这份我已经工作了整整一周的报告所需要的最后一件事。请哈普!
解决方案
您遇到的问题是 SSRS 期望数据集始终返回相同的数据结构,如果您不执行查询,那么当您实际需要的是空数据集时,不会返回任何内容。
2 种基本方法。
首先,您可以修改存储的过程,(您可能必须向它传递一个阻止执行的附加参数),然后不返回任何结果。
但是,我可能会避免这种情况,因为这意味着必须修改您的存储过程,而您可能不想这样做,这也意味着您最终仍会运行存储过程。
我会将我的数据集查询更改为这些方面的内容......
DECLARE @SpResults TABLE(myCol1 int, myCol2 int etc....) -- <<-- This should match the output form your stored proc exactly.
IF @RunThis = 1 -- execute the SP and dump results into @SpResults table
BEGIN
INSERT INTO @SpResults
EXEC myStoredProc
END
-- finally return the table contents
-- The @RunTHis = 0 then the table will be empty, but still valid
SELECT * FROM @SpResults
注意:您可以根据结果的大小等将表变量换成临时表,但原理完全相同。
推荐阅读
- android - 如何使用 ffmpeg 用 pts gmtime 绘制文本冒号?
- java - 是否可以使用 OpenPDF 在文档上加盖电子印章?
- wordpress - 更新自定义产品元框字段 - WooCommerce
- firebase - 使用streambuilder颤动firestore分页
- reactjs - 无法理解 Formik 中 Props 访问的语法
- python - 如何在 tkinter 的画布内放置所有小部件?
- java - Junit抛出java.lang.Exception:即使有公共@test也没有可运行的方法
- django - 如何在django中计算对象
- python - 从 pandas.Series 过滤 pandas.DataFrame
- ios - 如何跨 Swift 模块进行调试?