我在SSRS中遇到IIF表达式问题。 我正在创建一份报告,看看谁迟到了,我们有4个班次。 我试图从报告中得到误报(例如,有人在他/她的班次结束后又回来了,并且他们自动被视为下一班的迟到者)
一切都有效,除了夜班(IIF在第一班内),从前一晚开始。 我希望代码检查在指定时间范围内是否已经存在前一晚的条目(如果有),而不是将新的“延迟”时间显示为0。 所有其他转变都是有效的。
所以我拥有的是
=CInt(IIF(
(Format(Fields!Aeg.Value,"HH")="06")
AND (Format(Fields!Aeg.Value,"mm")>"00")
AND (Fields!UksID.Value=14),IIF(CInt((Format(Fields!Aeg.Value, "dd"))-1)
AND(Format(Fields!Aeg.Value, "HH")>="22"),"0",(Format(Fields!Aeg.Value,"mm")))
,(IIF((Format(Fields!Aeg.Value,"HH")="08")
AND (Format(Fields!Aeg.Value,"mm")>"00")
AND (Fields!UksID.Value=14),IIF(Min(Format(Fields!Aeg.Value,"HH")<="8"),"0",
(Format(Fields!Aeg.Value,"mm")), ...
...等
其中“Aeg”是记录时间的数据库字段 和“UksID”是门的过滤器
帮助表示感谢。
我根据你的建议做了一些编辑@tezzo, 我添加了
Public Function CheckDate(ByVal dateFromField As DateTime) As Boolean
Dim dateChecked As DateTime
dateChecked = DateAdd("d", -1, dateFromField)
Dim hourCheck As Integer
hourCheck = Hour(dateChecked)
If hourCheck >= 22 Then
Return True
Else
Return False
End If
End Function
但它正在24小时前检查。
如何从当天获取最大值
Max(Hour(dateChecked))
给出“重载解析失败,因为没有可访问的'Max'接受此数量的参数。(rsCompilerErrorInCode)”
答案 0 :(得分:0)
错误在于:CInt((Format(Fields!Aeg.Value, "dd")) - 1)
我认为您可以使用接受Aeg.Value
的功能,验证DateAdd(Day, -1, Aeg.Value)
与HH > 22
是否存在记录并返回Boolean
。
点击此链接,了解如何add code to a report。