使用SSRS报告通过单引号

时间:2017-10-16 12:32:20

标签: reporting-services ssrs-2008 ssrs-2008-r2

我无法将参数值传递给数据集, 的 =分裂(参数!Status.Value, “”)

参数(@status)defult值 - > C,P enter image description here

返回错误: 查询参数'@status'的值表达式表示错误:从类型'Object()'到类型'String'的转换无效。

2 个答案:

答案 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参数的可用值设置为cpo作为单独的项目,并使参数成为多值。

此时您应该能够测试报告是否有效,并且您可以选择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,然后可以根据需要隐藏此参数。

当用户在第一个参数中选择“打开/关闭”状态时,此隐藏参数的默认选择将更改。运行报表时,隐藏参数的值将传递给报表。