【问题标题】:SSRS check if there was an entry yesterday with IIF expressionSSRS 检查昨天是否有带有 IIF 表达式的条目
【发布时间】:2014-09-17 12:04:15
【问题描述】:

我对 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)”

【问题讨论】:

    标签: date reporting-services expression reporting iif


    【解决方案1】:

    错误在这里:CInt((Format(Fields!Aeg.Value, "dd")) - 1)

    我认为您可以使用接受您的Aeg.Value 的函数,使用HH &gt; 22 验证DateAdd(Day, -1, Aeg.Value) 是否存在记录并返回Boolean

    查看此链接以了解如何add code to a report

    【讨论】:

    • 感谢@tezzo 的回复,我认为这是正确的方向。但这似乎无法解决问题。如果我为DateAdd(DateInterval.Day, -1, Fields!Aeg.Value 创建一个新的测试字段,我会得到正确的结果。我试图用Hour()Format() 来打发时间,似乎有效。我试过Format("dd.HH") 来验证日期。日期还可以。但是每当我将它添加到整个公式中时,它就会再次开始检查今天。此外,折叠和展开的 tablix 有两种不同的表达方式吗?你是什​​么意思返回一个布尔值?使用自定义代码?
    • 我建议使用自定义函数,因为我认为您的表的另一条记录中有前一晚的数据。在这种情况下,如果您在 Fields!Aeg.Value 中有一个日期值(即 2014/09/18),您必须检查是否存在日期为 2014/09/17 且 HH > 22 的另一条记录。
    • 我试过了,但“自定义功能”现在对我来说有点多。是否有另一种方法将它们分类为 4 个固定时间班次,然后从班次开始时间得出偏差? LoggedTime 是查询中的DATETIME 字段,范围通过WHERE Events.LoggedTime BETWEEN @startDate AND @endDate +1 选择。报告中两个参数的默认值是函数=Today@endDate +1,因此它实际上包括选定的@endDate日期。
    • 抱歉,如果您需要的数据位于不同的记录中,那么使用 Reporting Services 除了使用自定义代码之外,我无法想象其他解决方案。如果您不想使用自定义代码,请尝试在 SQL 查询中解决它。
    • 嗨,@tezzo,你能看看我在帖子中的编辑吗?
    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 2023-03-20
    相关资源
    最近更新 更多