【问题标题】:SSRS 2005: how to write an IIF statement to check whether values are in a parameter listSSRS 2005:如何编写 IIF 语句来检查值是否在参数列表中
【发布时间】:2025-12-03 21:40:02
【问题描述】:

在 SSRS 2005 中,我正在尝试设置一个表达式以返回真或假,具体取决于其中一个 ReportItems 的值是否在用户从列表中选择的(可能是多个)值列表中报告运行。

这是目前为止的表达方式:

=iif(Trim(ReportItems!Category_2.Value) = Trim(Parameters!Category.Value(0)), False, True)

您可以看到表达式中的 True 和 False 颠倒了 - 这是因为它是为了控制行的“隐藏”属性,并且我不想隐藏值在列表中的行。

当为参数选择单个值时,表达式可以正常工作,但对于多个值,它只显示第一个值的结果。

希望您能提供帮助。

【问题讨论】:

  • 在您的表达式中 Trim(Parameters!Category.Value(0) 是多值参数中传递的第一个参数。相反,请尝试使用 Join() 函数或 LookupSet 来获取所有参数。

标签: reporting-services parameters iif


【解决方案1】:

尝试使用

=iif(Trim(ReportItems!Category_2.Value) = Trim(Parameters!Category.Value), False, True)

【讨论】:

    【解决方案2】:

    非常感谢您的帮助。这些多个值真的困扰着我,我从来没有设法让 Trim 正常工作,所以我最终使用了以下两阶段解决方案:

    (1) 在 SQL 'SELECT' 语句中,我定义了一个名为 'InCategory' 的新值,根据 Category 是否是输入的 Category 之一,为其分配值 1 或 0:

    CASE WHEN Category IN (@Category) THEN 1 ELSE 0 END AS 'InCategory', 
    

    (2) 然后在 SSRS 中,我对报告中“隐藏”的表达变得简单,如果该行的“InCategory”之和为 0,则隐藏该行:

    =iif((Sum(Fields!InCategory.Value) = 0), True, False)
    

    再次感谢您的帮助 - 非常感谢,并将再次使用该网站。

    【讨论】: