ssrs 中的 switch 语句
switch statement in ssrs
我有一份 SSRS 报告,我试图在其中根据多 select 下拉列表中的 select 值隐藏列。我尝试使用多个 IIF 语句以及 SWITCH CASE,但它总是会引发错误。
以下是我对第 2 列和第 3 列的 IIF
和 CASE
陈述。
=IIF(Parameters!columns.Count >= 1, IIF(Parameters!columns.Value(0) = "3", true, false),
IIF(Parameters!columns.Count >= 2, IIF(Parameters!columns.Value(1) = "3", true, false),
IIF(Parameters!columns.Count >= 3, IIF(Parameters!columns.Value(2) = "3", true, false),
false)))
=IIF(Parameters!columns.Count >= 1, IIF(Parameters!columns.Value(0) = "2", true, false),
IIF(Parameters!columns.Count >= 2, IIF(Parameters!columns.Value(1) = "2", true, false),
false))
=SWITCH(Parameters!columns.Count = 1, IIF(Parameters!columns.Value(0) = "2", false, true),
Parameters!columns.Count = 2, IIF(Parameters!columns.Value(1) = "2", false, true))
=SWITCH(Parameters!columns.Count = 1, IIF(Parameters!columns.Value(0) = "3", false, true),
Parameters!columns.Count = 2, IIF(Parameters!columns.Value(1) = "3", false, true),
Parameters!columns.Count = 3, IIF(Parameters!columns.Value(2) = "3", false, true))
请帮我看看这里哪里做错了
根据评论,您似乎遇到了 Array Out Of Bounds
错误,当您尝试引用数组中不存在的位置时会发生该错误。在这种情况下,您的多值参数被视为一个数组,您在语法 .Value(0)
中引用它。出现问题是因为 SSRS 将在执行时评估整个 IIF
或 SWITCH
语句,而不管最终 returned 是哪个值。这意味着当您的报告选择的值少于 3 个时,这些表达式将始终尝试调用不存在的数组位置,从而导致您看到的错误。
因此,为了解决这个问题并按照您的意愿检查值,实际上有一个相当简单的解决方法应该可以让您获得正确的结果。以下表达式使用 JOIN
将参数的所有值放入一个带有逗号分隔符的结果中。然后,您可以使用 InStr
函数,该函数将 return 一个数值,指示在字符串中首次找到搜索值的位置。在这种情况下,我们正在搜索值 3
。如果未找到 3
,则 InStr
函数将 return 值 0
并且任何其他值将指示 3
存在于连接的参数列表中.
=IIF(InStr(Join(Parameters!columns.Value, ","), "3") > 0, true, false)
我有一份 SSRS 报告,我试图在其中根据多 select 下拉列表中的 select 值隐藏列。我尝试使用多个 IIF 语句以及 SWITCH CASE,但它总是会引发错误。
以下是我对第 2 列和第 3 列的 IIF
和 CASE
陈述。
=IIF(Parameters!columns.Count >= 1, IIF(Parameters!columns.Value(0) = "3", true, false),
IIF(Parameters!columns.Count >= 2, IIF(Parameters!columns.Value(1) = "3", true, false),
IIF(Parameters!columns.Count >= 3, IIF(Parameters!columns.Value(2) = "3", true, false),
false)))
=IIF(Parameters!columns.Count >= 1, IIF(Parameters!columns.Value(0) = "2", true, false),
IIF(Parameters!columns.Count >= 2, IIF(Parameters!columns.Value(1) = "2", true, false),
false))
=SWITCH(Parameters!columns.Count = 1, IIF(Parameters!columns.Value(0) = "2", false, true),
Parameters!columns.Count = 2, IIF(Parameters!columns.Value(1) = "2", false, true))
=SWITCH(Parameters!columns.Count = 1, IIF(Parameters!columns.Value(0) = "3", false, true),
Parameters!columns.Count = 2, IIF(Parameters!columns.Value(1) = "3", false, true),
Parameters!columns.Count = 3, IIF(Parameters!columns.Value(2) = "3", false, true))
请帮我看看这里哪里做错了
根据评论,您似乎遇到了 Array Out Of Bounds
错误,当您尝试引用数组中不存在的位置时会发生该错误。在这种情况下,您的多值参数被视为一个数组,您在语法 .Value(0)
中引用它。出现问题是因为 SSRS 将在执行时评估整个 IIF
或 SWITCH
语句,而不管最终 returned 是哪个值。这意味着当您的报告选择的值少于 3 个时,这些表达式将始终尝试调用不存在的数组位置,从而导致您看到的错误。
因此,为了解决这个问题并按照您的意愿检查值,实际上有一个相当简单的解决方法应该可以让您获得正确的结果。以下表达式使用 JOIN
将参数的所有值放入一个带有逗号分隔符的结果中。然后,您可以使用 InStr
函数,该函数将 return 一个数值,指示在字符串中首次找到搜索值的位置。在这种情况下,我们正在搜索值 3
。如果未找到 3
,则 InStr
函数将 return 值 0
并且任何其他值将指示 3
存在于连接的参数列表中.
=IIF(InStr(Join(Parameters!columns.Value, ","), "3") > 0, true, false)