将SSRS参数转换为Null

时间:2018-09-12 10:55:13

标签: sql-server reporting-services ssrs-2012

我有SSRS报告显示了营销功能。在MF中,我们有一个名为“测试”的字段,值是“ PSI 1”或“ PSI 2”,该字段也可以为空。

我通过以下查询为Test参数添加了一个数据集:

SELECT DISTINCT Corp_Test
  FROM [Tfs_Warehouse].[dbo].[CurrentWorkItemView]
 WHERE ProjectNodeGUID = @ProjectGuid
   AND System_WorkItemType = 'Marketing Feature'
UNION
SELECT 'Null'
ORDER BY Corp_Test

现在,报告中的值为PSI 1 PSI 2Null

enter image description here

在主查询中,我根据如下参数过滤结果:

where COALESCE(Corp_Test, 'Null') IN (@TestParam)

该报告运行良好,如果我选择了所有值,我还将获得带有空白“测试”字段的“营销功能”。

我的问题是:

我希望它不是写在下拉列表上的Null,而是写成No PSI,实际上在主查询中它将是Null。有可能吗?

3 个答案:

答案 0 :(得分:0)

在参数属性的Available Values屏幕上,您将看到ValueLabel的选项。这样,您就可以向最终用户显示一件事(例如,用户友好的描述),同时将另一件事(例如:键值)传递给报表。

在测试参数的数据集中添加一列,以保存要传递给查询的值的Label。如果愿意,可以与您的Value相同,但是可以为您提供Null条目上所需的灵活性:

SELECT DISTINCT Corp_Test as Value
               ,Corp_Test as Label
  FROM [Tfs_Warehouse].[dbo].[CurrentWorkItemView]
 WHERE ProjectNodeGUID = @ProjectGuid
   AND System_WorkItemType = 'Marketing Feature'
UNION ALL           -- As you have DISTINCT above, UNION ALL will work faster and give the same results as UNION (which removes duplicates)
SELECT 'Null' as Value
      ,'No PSI' as Label
ORDER BY Corp_Test

完成此操作后,更改参数以将Value字段用作参数值,并将Label字段用作向用户显示的标签。

答案 1 :(得分:0)

SELECT
ISNULL(Corp_Test,'No PSI') AS Corp_Test
FROM 
(SELECT DISTINCT Corp_Test
  FROM [Tfs_Warehouse].[dbo].[CurrentWorkItemView]
 WHERE ProjectNodeGUID = @ProjectGuid
   AND System_WorkItemType = 'Marketing Feature'
UNION
SELECT 'Null'
) AS Corp
ORDER BY ISNULL(Corp_Test,'No PSI') 

记住要在where子句主查询中实现更改。所谓主查询,是指正在提供报告的查询

答案 2 :(得分:0)

@sgeddes在他的评论中回答的内容是最简单,最简单的方法。

我只是用where COALESCE(Corp_Test, 'Null') IN (@TestParam)补充了where COALESCE(Corp_Test, 'No PSI') IN (@TestParam),在数据集中我用SELECT 'Null'替换了SELECT 'No PSI'