引用 "nothing" 时开关函数未返回正确值
Switch function not returning correct value when referencing "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!Duration.Value" 的列(四舍五入),它在第二行以外的地方工作:
如果上次值与第一次值相同,则假定对象只是路过并输出 "Passing By" 并且它正确执行此操作。
但是,如果最后一次值等于空(在 "Last Time" 的列中定义,如果它 IsNothing,则为 'nothing',并且它应该在此报告中输出"Still Occupied" - 它没有这样做。单元格留空,就好像我把它写成 Fields!LastTime.Value = nothing, nothing,
为什么这行代码不起作用?
Fields!LastTime.Value = nothing, "Still Occupied",
谢谢
可能是什么都不应该被“”包围
您不能使用 = 运算符测试 Nothing。有两种方法可以测试 Nothing;使用像这样 IsNothing(Fields!LastTime.Value) = True
的 IsNothing 检查函数,或者像这样 Fields!LastTime.Value Is Nothing
.
使用 Is 运算符
如果这些测试没有产生预期的结果,您可能正在处理一个设置为非 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, or nothing, 它现在只是询问它是否是一个 number 或者它是否等于 Fields!FirstTime.Value
,如果两者都不正确,则将其标记为 "Still Occupied",从而完全不需要引用 nothing
。就像我说的,这是非常具体的情况,但你永远不知道。
感谢@JamieSee 和@SuperSimmer 44 的帮助。干杯!
这里有个小问题。
我在报告中有一个 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" 的列(四舍五入),它在第二行以外的地方工作:
如果上次值与第一次值相同,则假定对象只是路过并输出 "Passing By" 并且它正确执行此操作。
但是,如果最后一次值等于空(在 "Last Time" 的列中定义,如果它 IsNothing,则为 'nothing',并且它应该在此报告中输出"Still Occupied" - 它没有这样做。单元格留空,就好像我把它写成 Fields!LastTime.Value = nothing, nothing,
为什么这行代码不起作用?
Fields!LastTime.Value = nothing, "Still Occupied",
谢谢
可能是什么都不应该被“”包围
您不能使用 = 运算符测试 Nothing。有两种方法可以测试 Nothing;使用像这样 IsNothing(Fields!LastTime.Value) = True
的 IsNothing 检查函数,或者像这样 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, or nothing, 它现在只是询问它是否是一个 number 或者它是否等于 Fields!FirstTime.Value
,如果两者都不正确,则将其标记为 "Still Occupied",从而完全不需要引用 nothing
。就像我说的,这是非常具体的情况,但你永远不知道。
感谢@JamieSee 和@SuperSimmer 44 的帮助。干杯!