我正在创建一个SSRS报告,并具有三个日期字段。
开始日期 目标日期 CompleteDate
在我的报告中,我想创建一个具有一些条件的计算字段,以确定是否满足目标日期。
If CompleteDate <= TargetDate then "Yes", "No"
If CompleteDate is NULL but TargetDate has not exceeded current date then "Pending","No"
(即开始日期为01/01/2019
,目标日期为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,它也会返回“否”或“待处理”。
编辑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非常感谢
答案 0 :(得分:1)
使用SWITCH
函数,
计算一个表达式列表,并返回与列表中第一个表达式为true对应的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
,因此,{{前两个测试中的1}} s。如果您的NOT isNothing()
可以为空,那么您可能还需要在逻辑语句中检查该条件。
答案 1 :(得分:0)
因此,到达SSRS时通常没有NULL
值。您需要与Nothing
进行比较以获得所需的结果。在相同的条件语句中,您需要将TargetDate
与Now()
进行比较,这将为您提供当前时间。因此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")