将 SSRS 参数转换为 Null
Convert SSRS parameter to Null
我有显示营销功能的 SSRS 报告。我们在 MF 中有一个名为“测试”的字段,值为“PSI 1”或“PSI 2”,该字段也可以为空。
我使用此查询为测试参数添加了一个数据集:
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 2
和 Null
:
在主查询中,我根据这样的参数过滤结果:
where COALESCE(Corp_Test, 'Null') IN (@TestParam)
报告工作正常,如果我选择了所有值,我也会得到带有空测试字段的营销功能。
我的问题是:
而不是下拉列表中的 Null
,我希望将其写成 No PSI
,实际上在主查询中它将为 Null。可能吗?
在您的参数属性中,在 Available Values
屏幕上您将看到 Value
和 Label
的选项。这允许您向最终用户显示一件事(例如:用户友好的描述),同时将另一件事(例如:键值)传递给报告。
在测试参数的数据集中添加一列来保存要传递给查询的值的 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
字段作为向用户显示的标签。
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 子句主查询中实施更改。通过主要查询,我的意思是为您的报告提供查询
@sgeddes 在他的评论中回答的是最简单最简单的方法。
我刚刚将 where COALESCE(Corp_Test, 'Null') IN (@TestParam)
替换为 where COALESCE(Corp_Test, 'No PSI') IN (@TestParam)
,并在数据集中将 SELECT 'Null'
替换为 SELECT 'No PSI'
。
我有显示营销功能的 SSRS 报告。我们在 MF 中有一个名为“测试”的字段,值为“PSI 1”或“PSI 2”,该字段也可以为空。
我使用此查询为测试参数添加了一个数据集:
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 2
和 Null
:
在主查询中,我根据这样的参数过滤结果:
where COALESCE(Corp_Test, 'Null') IN (@TestParam)
报告工作正常,如果我选择了所有值,我也会得到带有空测试字段的营销功能。
我的问题是:
而不是下拉列表中的 Null
,我希望将其写成 No PSI
,实际上在主查询中它将为 Null。可能吗?
在您的参数属性中,在 Available Values
屏幕上您将看到 Value
和 Label
的选项。这允许您向最终用户显示一件事(例如:用户友好的描述),同时将另一件事(例如:键值)传递给报告。
在测试参数的数据集中添加一列来保存要传递给查询的值的 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
字段作为向用户显示的标签。
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 子句主查询中实施更改。通过主要查询,我的意思是为您的报告提供查询
@sgeddes 在他的评论中回答的是最简单最简单的方法。
我刚刚将 where COALESCE(Corp_Test, 'Null') IN (@TestParam)
替换为 where COALESCE(Corp_Test, 'No PSI') IN (@TestParam)
,并在数据集中将 SELECT 'Null'
替换为 SELECT 'No PSI'
。