【问题标题】:How to select all parameter values in SSRS?如何选择SSRS中的所有参数值?
【发布时间】:2017-07-10 12:57:20
【问题描述】:

我的报告中有一个参数@Year 和@Month,其中月份已分配值,例如一月(标签):1(值),二月:2,... 我的数据由具有过滤器的存储过程提供

WHERE (cal.CalendarYear = @Year) AND (cal.MonthId = @Month)

当我在参数设置中勾选“允许乘法值”时,它会返回错误

将数据类型 nvarchar 转换为 int 时出错。

如何选择所有值(默认)?

【问题讨论】:

  • 您的过程不是为接受多个值而设计的。你应该重写它或重新设计你的报告,不要使用这个过程,而是使用代码
  • @sepupic 怎么实现?
  • @Year@Month 都是 int 类型?如果你想让它们接受多个值,它们需要是 varchar,然后你需要拆分它们并更改 WHERE 子句。
  • @Rokuto 我需要自己写分割函数吗?
  • @StanislavJirák 我认为拆分函数的例子很多,但是是的,你需要一个。编辑:我忘了。 SQL Server 2016有自己的拆分函数STRING_SPLIT

标签: sql sql-server reporting-services sql-server-2016


【解决方案1】:

如果您不需要使用存储过程,您可以轻松解决问题。

从您的存储过程中复制 SQL(不包括 PROC 定义,只是主要代码)并将其粘贴到您的数据集查询中。

将您的 = @Year= @Month 更改为 IN(@Year)IN(@Month)

仅此而已,无需加入、拆分或其他任何事情。

SSRS 会为您正确地将参数值作为逗号分隔值注入。

【讨论】:

    【解决方案2】:

    当您选择多个值时,您可以使用 Join() 将参数作为表达式传递给过程。

    然后在您的程序中将您的月份参数更改为 nvarchar(max) 类型。

    创建一个临时表并使用 t-sql 拆分字符串函数(谷歌这个,有很多种类,但如果你遇到困难,我们可以找到一个)将字符串拆分成一个表。然后在您的过程中内部连接到您的表以过滤选择。

    【讨论】:

      【解决方案3】:

      您关于“nvarchar into int”的错误消息表明您的 SSRS 参数和您的 MonthId 列之间的数据类型不匹配。检查报表参数属性 -> 常规 -> 前者的数据类型和后者的表架构,并确保它们都是 text/varchar 或都是整数。

      允许您的查询处理多个参数值应该比需要使用连接和拆分要简单得多。只需使用IN 而不是=,并将您的参数名称放在一组括号内。

      AND (cal.MonthId IN (@Month))
      

      要为您的参数设置默认值,请转到报告参数属性 -> 默认值。选择 Specify values 选项,然后将数字 1-12 添加为单独的值记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多