开关函数在引用"nothing"时未返回正确的值



这里有一个小问题。

我在报告中有一个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!LastTime.Value = nothing, nothing,

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

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

谢谢

不能使用 = 运算符测试"无"。有两种方法可以测试任何内容;像这样IsNothing(Fields!LastTime.Value) = True使用 IsNothing 检查函数,或者像这样使用 Is 运算符Fields!LastTime.Value Is Nothing

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

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

我发现使用 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是否是一个数字,等于字段!FirstTime.Value,或者什么都没有,它现在只是问它是一个数字还是等于Fields!FirstTime.Value,如果两者都不成立,它会将其标记为"仍然占用",从而完全消除了引用nothing的需要。就像我说的,这是针对具体情况的,但你永远不知道。

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

可能什么都不应该被 " " 包围

最新更新