【问题标题】:Making a filter parameter optional使过滤器参数可选
【发布时间】:2012-12-14 01:29:15
【问题描述】:

我使用的是 SSRS 2005。我创建了一个名为 icVar 的报表参数。我应该怎么做才能让这个过滤器成为可选的。这意味着如果用户在文本框中输入内容,将根据输入的内容显示结果,但如果没有输入任何内容,它只会将其视为全部显示。这是我数据集中的查询。

SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, ACCESS_LOCATION_X, IC_N, COMPANY_M,  
CONSECUTIVE_D
FROM TEMP_TARGET
WHERE (CONSECUTIVE_D >= @consecDays) AND (ENTRY_DT BETWEEN @startDate AND @endDate) AND
(ACCESS_LOCATION_X LIKE @accessVar) AND
(IC_N LIKE @icVAr) 

我正在为我的 icVar 使用通配符 %。因此,如果用户为该过滤器输入 S123,报告将显示结果,其中 IC_N 值以 S123 开头......但是,当没有为该过滤器输入任何内容时,不要强制用户输入任何内容。如果没有输入,它应该显示 IC_N Like %(means all)。

感谢任何帮助。谢谢。

【问题讨论】:

    标签: reporting-services reportingservices-2005


    【解决方案1】:

    只需使用表达式求值短路——首先测试 Null,只有当它不是 Null 时,表达式的下一部分才会求值,测试 LIKE(参见最后一行的条件):

    SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, ACCESS_LOCATION_X, IC_N, COMPANY_M, CONSECUTIVE_D
    FROM TEMP_TARGET
    WHERE (CONSECUTIVE_D >= @consecDays) 
    AND (ENTRY_DT BETWEEN @startDate AND @endDate) 
    AND (ACCESS_LOCATION_X LIKE @accessVar) 
    AND ((@icVar IS NULL) OR (IC_N LIKE @icVAr))
    

    【讨论】:

    • 感谢您的回复,但是如果我想说 icVar 是否为空,您能否向我展示整个 where 语句,它是 Where IC_N like '%' else IC_N LIKE icVar。我认为你的建议有点相似,但我不知道如何测试你的解决方案,而且 IC_N 没有空值。
    • 我已经更新了答案以包含完整的 SQL - 基本上你只是在参数不为空时测试 IC_N
    • 谢谢,它有效。感谢您的解决方案,我急需该解决方案,您的解决方案可以按时完成。你介意看看你能不能帮我解决这个问题。你也许能帮上忙。 [链接]stackoverflow.com/questions/13857201/…
    • 我正在为我自己的项目使用类似的解决方案。这是否会破坏 SSRS 报告过滤器的目的,因为它需要另一个查询而不是重用数据集?
    • 它不需要另一个数据集,这个SQL用于主数据集。我不认为 OP 正在使用共享数据集或 SSRS 报告过滤器,因此您可以只使用 SQL 来完成选择数据的繁重工作,而不是在报告级别对其进行过滤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    相关资源
    最近更新 更多