我无法将参数值传递给数据集, 的 =分裂(参数!Status.Value, “”)
返回错误: 查询参数'@status'的值表达式表示错误:从类型'Object()'到类型'String'的转换无效。
答案 0 :(得分:2)
由于它看起来该参数已经是一个字符串,你需要将它转换成列表是一个连接函数:
=join(Parameters!Status.Value,",")
将逗号分隔列表传递给SQL后,您可能需要搜索列表,如下所述: SSRS selecting results based on comma delimited list
答案 1 :(得分:0)
你可以按照你想要的方式做到这一点,但我会采用不同的方法,因为它更容易看到发生了什么,特别是如果这被传递给其他人稍后进行调试。
有两种方法可以做到这一点。第一种是为Close或Open传递一个值,然后向数据集添加一些逻辑
DECLARE @s TABLE(status char(10))
IF @states = 0 -- Closed
BEGIN
INSERT INTO @s VALUES('c'),('p')
END
ELSE
BEGIN
INSERT INTO @s VALUES('o')
END
select * from myTable a
JOIN @s s on a.status = s.status
我意识到这是更多的代码,但它很容易理解。
如果这对您有用,请立即停止阅读!
第二个选项(假设您不希望您的用户能够单独选择'c'或'p')只需要设置SSRS端就可以了,但SQL非常简单。不要被答案的长度拖延,实际上非常简单。
您的数据集查询看起来就像这样......
select * from myTable a WHERE a.Status in (@status)
在您的报告设计中,将@states
参数的可用值设置为c
,p
和o
作为单独的项目,并使参数成为多值。
此时您应该能够测试报告是否有效,并且您可以选择1,2或所有三个选项并获得相关结果,不需要连接拆分或其他任何选项,它只会起作用。< / p>
现在,我认为您不希望您的用户能够在此级别进行选择,我们需要进行一些更改。
首先添加一个名为dsDefaultStatus
的新数据集,并将查询设置为
DECLARE @s TABLE(status char(10)) 如果@status = 0 - 已关闭 开始 插入@s VALUES('c'),('p') 结束 其他 开始 插入@s VALUES('o') END
SELECT * FROM @s
您应该新建一个新的@status
参数。给这两个可用的标签/值,例如'Close'= 0和'Open'= 1以匹配上面的查询。
现在返回@states
参数并将默认值更改为dsDefaultStatus
,然后可以根据需要隐藏此参数。
当用户在第一个参数中选择“打开/关闭”状态时,此隐藏参数的默认选择将更改。运行报表时,隐藏参数的值将传递给报表。