我有包含英制值的列和包含公制值的列。我想隐藏一个或另一个基于客户可能来自哪个地区,但是他们是否是公司的一部分。例如,如果person.value ="员工"然后显示英制和公制,但如果person.value ="客户"然后是CustomerRegion.Value ="欧洲" ,将显示公制和CustomerRegion.Value ="北美"将被显示为帝国。我将用什么构建一个表达式来隐藏其中一个或哪个是最简单的方法。
答案 0 :(得分:0)
您需要使用IIF语句,并通过将多个IIF嵌套在一起来为各种可能性添加逻辑。
既然你总是希望向员工展示Imperial,我会把它作为IIF的第一部分。对于显示和隐藏,一列将具有一个表达式,而另一列具有相同的TRUE和FALSE反转。
=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更改为帝国列的“欧洲”。它的工作方式很好。希望这有帮助:)