【问题标题】:Passing Default Value into SSRS Query将默认值传递给 SSRS 查询
【发布时间】:2012-08-16 21:37:00
【问题描述】:

在 SSRS 中,我有一个多选报表参数,默认标签为 (None),默认值为 0。

在我的查询中,我想对其进行设置,以便可以传入 0 或其他一些值。但是,如果我传入 0,我不希望它过滤掉数据。

通常您会将以下子句添加到您的 where 语句中,但我不确定是否或如何使用多个值来完成。

(@Parameter = 0 OR table.column = @Parameter)

【问题讨论】:

  • 我正在尝试的是 (0 in (@Parameter) OR table.Column in (@Parameter)) 这似乎有效,但速度很慢。

标签: sql-server sql-server-2008 tsql ssrs-2008 reporting-services


【解决方案1】:

不知道我是否理解这个问题,你要传递一个 LIST OF POSIBLE VALUES 还是 0,对吧?...

如果是这样,也许您唯一需要做的更改是将参数设置为字符串('0' 或 '1,2,3')并执行这样的条件

(@Parameter = '0' OR table.column IN (@Parameter))

【讨论】:

  • 我会试一试,然后告诉你。谢谢。
  • 现在我看到了我写的内容,我认为它可能无法按原样工作,但是如果您在开始和结束时传递一个包含您想要的值的字符串(例如 '#1#2#3#' ) 并在条件(@Parameter = '0' OR charIndex('#'+table.column+'#', @Parameter) > 0) 中使用 charindex 函数,它可能会起作用
  • 我看到您的性能有问题,这可能是因为如果您要发送很多“可能性”,则可能是因为 IN,不知道这是否可以在 SSRS 中完成,但是当我有案例时像这样最好创建一个包含一列的临时表,在表中插入参数的值,而不是条件添加与此临时表的左连接并过滤 AND #tmp.column IS NOT NULL
【解决方案2】:

您是在调用过程还是从 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)

【讨论】:

  • 再改运行一个程序,更易维护,更灵活。
  • 这是我更愿意做的,但我不能,因为我对数据库只有只读访问权限,这很愚蠢。
  • 我忘了提到我正在 SQL 本身中测试查询,它运行缓慢,所以在 SSRS 中它甚至更慢。
【解决方案3】:

您不必完全按照用户在查询中填写参数时传递参数。

在您的数据集上,您可以有 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))

我更喜欢这个解决方案的原因是因为你让查询更具可读性!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多