我有一个报表,我正在尝试在报表生成器中添加参数,但是由于参数选择与表中存储的值不同,因此在报表运行到报表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, "" )