基于SSRS中的2个以上参数隐藏列

时间:2017-08-10 08:34:11

标签: reporting-services ssrs-2012

我有包含英制值的列和包含公制值的列。我想隐藏一个或另一个基于客户可能来自哪个地区,但是他们是否是公司的一部分。例如,如果person.value ="员工"然后显示英制和公制,但如果person.value ="客户"然后是CustomerRegion.Value ="欧洲" ,将显示公制和CustomerRegion.Value ="北美"将被显示为帝国。我将用什么构建一个表达式来隐藏其中一个或哪个是最简单的方法。

3 个答案:

答案 0 :(得分:0)

您需要使用IIF语句,并通过将多个IIF嵌套在一起来为各种可能性添加逻辑。

既然你总是希望向员工展示Imperial,我会把它作为IIF的第一部分。对于显示和隐藏,一列将具有一个表达式,而另一列具有相同的TRUE和FALSE反转。

Imperial Hide:

=IIF(PARAMETERS!person.value = "Employee", False, 
 IIF(PARAMETERS!person.value = "Customer AND PARAMETERS!CustomerRegion.Value = "North America", False,
 IIF(PARAMETERS!person.value = "Customer AND (PARAMETERS!CustomerRegion.Value = "Europe" OR PARAMETERS!CustomerRegion.Value = "Asia"), True, True))

将公制列交换为TRUE和FALSE。

为什么不使用表达式来确定在单个列中显示哪些数据,而不是隐藏其中一列?您可以使用 IMPERIAL METRIC 字段代替 TRUE FALSE

答案 1 :(得分:0)

道歉汉诺威,我已经将你的答案用作我的模板。

SWHOCH声明在这里是一个更好的选择恕我直言。 IIF评估表达式中可能较慢的所有部分,而SWITCH在返回TRUE的第一个表达式处停止。如果需要添加更多条件,嵌套IIF很快就会变得混乱。

SWITCH版本会稍微清晰一点,但绝对可以扩展。

帝国将是

=SWITCH(
    Parameters!Person.Value = "Employee", False,
    Parameters!Person.Value = "Employee" AND Parameters!CustomerRegion.Value = "Europe", True,
    Parameters!Person.Value = "Employee" AND Parameters!CustomerRegion.Value = "North America", False,
True, False)

最后一对表达式就像一个ELSE,它总会返回true。这里我将返回值设置为False,因此默认情况下会显示该列(Hidden = False)

指标列恰好相反,除非您可能希望保留最后一对(结尾为True,False),因此默认情况下也会显示指标列。

假设您只有Person.value的Employee和Customer,因为您不必检查它是否超过第一个表达式,这可以更简单。你也可以用漂亮的方式为区域添加多个检查,而不是将它们放在不同的行上,尽管你也可以用IIF的答案来做这个。

像这样。

=SWITCH(
    Parameters!Person.Value = "Employee", False,
    Parameters!CustomerRegion.Value = "Europe", True,
    "North America Asia Somewhere Else".ToLower.Contains(Parameters!CustomerRegion.Value.ToString.ToLower), False,
True, False)

我使用ToLower使比较大小写不敏感,但如果您愿意,可以将其排除在外。

答案 2 :(得分:0)

感谢所有有见识的答案。他们都工作并给出了预期的结果,但我选择了“切换”声明

我已经以这种方式为公制列构建了它;

= SWITCH(参数!Person.Value =“Employee”,False,Parameters!CustomerRegion.value =“North America”,True)

我刚刚将CustomerRegion.value更改为帝国列的“欧洲”。它的工作方式很好。希望这有帮助:)

相关问题