繁体   English   中英

“是”“否”“其他”的 SSRS 程序流程

[英]SSRS program flow for 'Yes' 'No' 'Other'

我正在创建一个 SSRS 报告并且有三个日期字段。

开始日期 目标日期 完成日期

在我的报告中,我想创建一个包含一些条件的计算字段,以确定是否满足目标日期。

  1. If CompleteDate <= TargetDate then "Yes", "No"

  2. If CompleteDate is NULL but TargetDate has not exceeded current date then "Pending","No" (即 startdate 为01/01/2019并且 targetdate 为20/03/2019

编辑 1*

IIF(Fields!CompleteDate.Value <= Fields!TargetDate.Value, "Yes", IIF(Fields!CompleteDate.Value Is Nothing AND Fields!TargetDate.Value < Now(), "Pending", "No")

即使达到了 TargetDate,这也会返回“No”或“Pending”。

编辑 2*

IIF((Format(Fields!CompleteDate.Value,"dd-MM-yyyy") <= (Format(Fields!TargetDate.Value,"dd-MM-yyyy"), "Yes", IIF(Fields!CompleteDate.Value Is Nothing AND Fields!TargetDate.Value < Now(), "Pending,"No")

关于“重载解析失败,因为没有可访问的‘IIF’接受此数量的参数”的错误。 是否有支架错位?

编辑 3* @Sentinel - Switch 表达式完美运行

=Switch( NOT isNothing(Fields!CompleteDate.Value) AND Fields!CompleteDate.Value <= Fields!TargetDate.Value, "Completed On-Time" , NOT isNothing(Fields!CompleteDate.Value) AND Fields!CompleteDate.Value > Fields!TargetDate.Value, "Completed Late" , isNothing(Fields!StartDate.Value), "Not Started" , Fields!TargetDate.Value > Now(), "In Progress" , Fields!TargetDate.Value <= Now(), "Running Late" , TRUE, "Other")

谢谢@Sentinel,@Steve-o169 我非常感谢

使用SWITCH功能:

计算表达式列表并返回与列表中第一个为真的表达式对应的 Object 值。

=Switch( NOT isNothing(Fields!CompleteDate.Value) AND
         Fields!CompleteDate.Value <= Fields!TargetDate.Value, "Completed On-Time"
       , NOT isNothing(Fields!CompleteDate.Value) AND
         Fields!CompleteDate.Value >  Fields!TargetDate.Value, "Completed Late"
       , isNothing(Fields!StartDate.Value), "Not Started"
       , Fields!TargetDate.Value > Now(), "In Progress"
       , Fields!TargetDate.Value <= Now(), "Running Late"
       , TRUE, "Other")

您可以根据需要调整逻辑表达式和字符串值。 请记住,计算结果为TRUE的第一个表达式获胜。 在我的示例测试中,我的数据中有NULL CompleteDates并且与非 null TargetDates相比,它们评估为TRUE而不是FALSE因此在前两个测试中NOT isNothing() s。 如果您的TargetDate可以为 null,您可能还需要在逻辑语句中检查该条件。

因此,当它到达 SSRS 时通常没有NULL值。 您需要与Nothing进行比较才能获得所需的结果。 在同一个条件语句中,您需要将TargetDateNow()进行比较,后者将为您提供当前时间。 因此 2 的表达式将类似于以下内容。

=IIF(Fields!CompleteDate.Value Is Nothing AND Fields!TargetDate.Value <= Now(), "Pending", "No")

所以如果我理解正确的话,你希望所有这些都在一个表达式中。 如果是这样,它应该如下所示。

=IIF(Fields!CompleteDate.Value <= Fields!TargetDate.Value, "Yes",
    IIF(Fields!CompleteDate.Value Is Nothing AND Fields!TargetDate.Value < Now(), "Pending", "No")

您可能需要格式化日期以在表达式中匹配,具体取决于您的日期值如何从数据库中输入。 Format(Fields!TargetDate.Value,”dd-MM-yyyy”) < Format(Now(),”dd-MM-yyyy”)可能会起作用。

编辑:根据下面的评论,我建议在比较它们之前格式化这些值。 试试下面的表达式。

    =IIF((Year(Fields!CompleteDate.Value) <= Year(Fields!TargetDate.Value)) AND DatePart(DateInterval.DayOfYear, Fields!CompleteDate.Value) <= DatePart(DateInterval.DayOfYear, Fields!TargetDate.Value) , "Yes",
  IIF(Fields!CompleteDate.Value Is Nothing AND Fields!TargetDate.Value < Now(), "Pending", "No")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM