在 SSRS 中,我有一个多选报告参数,默认标签为(无),默认值为 0。
在我的查询中,我想对其进行设置,以便我可以传入 0 或其他一些值。但是,如果我传入 0,我不希望它过滤掉数据。
通常,您会将以下子句添加到您的 where 语句中,但我不确定是否或如何使用多个值完成此操作。
(@Parameter = 0 或 table.column = @Parameter)
在 SSRS 中,我有一个多选报告参数,默认标签为(无),默认值为 0。
在我的查询中,我想对其进行设置,以便我可以传入 0 或其他一些值。但是,如果我传入 0,我不希望它过滤掉数据。
通常,您会将以下子句添加到您的 where 语句中,但我不确定是否或如何使用多个值完成此操作。
(@Parameter = 0 或 table.column = @Parameter)
不知道我是否理解这个问题,您将传递一个可能值或 0 的列表,对吗?...
如果是这样,也许您要做的唯一更改是将参数设置为字符串('0' 或 '1,2,3')并执行这样的条件
(@Parameter = '0' OR table.column IN (@Parameter))
您是在调用过程还是从 SSRS 运行直接查询?
如果您正在调用 proc,您可以尝试在 proc 中确定是否需要进行任何过滤,例如
DECLARE @filter INT
SELECT @filter = LEN(@parameter)
-- or something similar to determine if there are any parameters
SELECT
-- everything you want
WHERE
@filter = 0 OR table.Column IN (@parameter)
您不必完全按照用户将参数填写到查询中来传递参数。
在您的数据集上,您可以有 2 个参数:
@Parameters
和@ApplyFilter
然后在数据集的参数选项卡上(参数名称 = 参数值):
@Parameters = @Parameters
@ApplyFilter = IIF(And(Parameters!Parameters.Value.Length = 1,Parameters!Parameters.Value(0)=0),"0","1")
最后,您的 SQL 过滤器需要类似于:
WHERE
(@ApplyFilter = 1 AND tbl.column IN (@Parameters))
我更喜欢这个解决方案的原因是因为你使查询更具可读性!