在 SSRS 报表生成器中添加一个参数,其中包含字符串/变量值,但 SQL 中的字段是数字



我有一个报表,我正在尝试在报表生成器中添加参数,但是由于参数选择与表中存储的值不同,因此在报表运行到报表SQL时,我需要做什么才能传递所选参数值。

我的意思是:

报表查询调用的表中有一个字段ErrorLevel用于存储数值 (1、2、3、4)。但是,这些值中的每一个都对应于一个文本字符串。

1 是警告;

2 是覆盖;

3是限制;

4 为待处理。

这些文本字符串是实际运行报表时显示的内容。 我能够使用以下查询很好地创建一个参数。

参数 1

SET NOCOUNT ON
(Select '' as errorlevel
union
select distinct errorlevel from [TABLE] 
where errorlevel is not null and errorlevel != ''

报表 SQL

Select distinct 
case errorlevel
When 1 then 'Warning'
When 2 then 'Override'
When 3 then 'Restriction'
When 4 then 'Pending'
Else '' as errorlevel
from [TABLE] 
where ('<ALL>' in (@errorlevel) or errorlevel in (@errorlevel))

但问题是,当最终用户运行报表并选择报表时,他们会看到数值(1、2、3 或 4),但他们希望查看/选择字符串值(警告、覆盖、限制、挂起)。 我尝试使用以下查询。

参数 2

SET NOCOUNT ON
(Select '<ALL>' as errorlevel
union
select distinct 
CASE ErrorLevel 
When 1 then 'Warning'
When 2 then 'Override'
When 3 then 'Restriction'
When 4 then 'Pending'
Else '' as errorlevel
from [TABLE] 
where errorlevel is not null and errorlevel != ''

当我使用它时,该参数将字符串值作为字符串而不是数字传递给报表中的 SQL,然后报表为空。我知道我必须在 SQL 中做一些事情来获取参数传递的内容(例如警告、覆盖等)并将其转换为相应的数值,但不确定如何做到这一点。任何指导都值得赞赏。

我会在 SQL 中的查询或 SSRS 中的数据集中添加一个字段,以将数字转换为所需的文本。

您可以对 SQL 使用相同的 CASE 语句

Select <CURRENT FIELDS>, 
CASE ErrorLevel When 1 then 'Warning' When 2 then 'Override' When 3 then 'Restriction' When 4 then 'Pending' Else '' END as ErrorLabel
from <REST OF QUERY>

如果在查询中无法执行此操作(由于使用存储的过程或其他问题),则可以将计算字段添加到 SSRS 中的数据集。

  • 打开(双击)数据集,然后单击字段选项卡。

  • 单击添加并选择计算字段。

  • 为新字段命名(错误标签)

  • 对于表达式,请使用 SWITCH 语句(类似于蹩脚的 CASE 语句)

    =SWITCH(Fields!ErrorLevel.Value = 1, "Warning", 
    Fields!ErrorLevel.Value = 2, "Override", 
    Fields!ErrorLevel.Value = 3, "Restriction", 
    Fields!ErrorLevel.Value = 4, "Pending", 
    1 = 1, "" )
    

相关内容

最新更新