这里有一个小问题。
我在报告中有一个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 的帮助。干杯!
可能什么都不应该被 " " 包围