引用“无”时切换功能未返回正确的值

问题描述 投票:0回答:3

这里有一个小问题。

我在报告中有一个Switch函数,如下所示:

=Switch(

    Fields!Duration.Value > 0, Round(Fields!Duration.Value / 60),

    Fields!LastTime.Value = nothing, "Still Occupied",

    Fields!LastTime.Value = Fields!FirstTime.Value, "Passing By"

)

这是一个以分钟为单位显示总数“Fields!Duration.Value”的列(向上舍入),它的工作方式不是第二行:

如果Last Time值与First Time值相同,则假定对象只是路过并输出“Passing By”并且它正确执行此操作。

但是,如果Last Time值等于no(它在“Last Time”的列中定义,如果它是IsNothing,则它是'nothing',并且它应该在此报告中输出“Still Occupied” - 它不是这个单元格留空,好像我把它写成Fields!LastTime.Value = nothing, nothing,

为什么这行代码不起作用?

    Fields!LastTime.Value = nothing, "Still Occupied",

谢谢

reporting-services ssrs-2008
3个回答
3
投票

您无法使用=运算符测试Nothing。有两种方法可以测试任何东西;使用像这个IsNothing(Fields!LastTime.Value) = True这样的IsNothing检查函数,或者像这个Fields!LastTime.Value Is Nothing一样使用Is运算符。

如果这些测试没有产生预期的结果,那么您可能正在处理一个设置为NULL以外的字段的字段,例如空的''或任意值。您可以在数据集属性上打开查询设计器以运行查询并检查结果。

您还可能正在查看数据集的错误映射。使用数据集属性上的“刷新字段”按钮验证字段映射,然后仔细检查表达式中使用的名称是否匹配。


0
投票

我发现使用IIF语句而不是Switch语句对我有用,至少对于这个特定情况:

=IIF(Fields!Duration.Value > 0, Round(Fields!Duration.Value / 60),
IIF(Fields!LastTime.Value = Fields!FirstTime.Value, "Passing by", "Still Occupied"))

试着为将来可能不理解的人解释它(就像我最终忘记它一样 - 我对这种东西很新) -

我没有使用Switch语句来查看Fields!LastTime.Value是否是一个数字,等于Fields!FirstTime.Value,或者什么也没有,它现在只是询问它是否是一个数字或者它是否等于Fields!FirstTime.Value,如果没有这些都是真的,它标志着它“仍然被占领”,因此无需完全引用nothing。就像我说的,这是非常具体的案例,但你永远不会知道。

感谢您帮助@JamieSee和@SuperSimmer 44.干杯!


-3
投票

可能是没有什么应该被“”包围

© www.soinside.com 2019 - 2024. All rights reserved.