SSRS报表目标日期达成判断计算字段问题求助(含表达式尝试)
我的SSRS报表日期判断计算字段解决过程
我最近在创建一份SSRS报表,里面包含三个核心日期字段:StartDate、TargetDate、CompleteDate。需要新增一个计算字段,用来判断目标日期是否达成,具体规则如下:
- 若
CompleteDate <= TargetDate,返回"Yes";否则返回"No" - 若
CompleteDate为NULL且TargetDate未超过当前日期,返回"Pending";否则返回"No"
(举个示例场景:StartDate为01/01/2019,TargetDate为20/03/2019)
尝试的表达式及遇到的问题
Edit 1:嵌套IIF表达式
一开始我用了嵌套的IIF函数来实现逻辑:
IIF(Fields!CompleteDate.Value <= Fields!TargetDate.Value, "Yes", IIF(Fields!CompleteDate.Value Is Nothing AND Fields!TargetDate.Value < Now(), "Pending", "No"))
但实际运行后发现,即便目标日期已经达成,这个表达式还是会返回"No"或者"Pending",逻辑判断出现了偏差。
Edit 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"))
错误提示为:Overload resolution failed because no accessible 'IIF' accepts this number of arguments.
后来检查发现是括号配对错误,导致IIF函数的参数数量不匹配。
Edit 3:使用Switch表达式解决问题
后来采用了@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的帮助!
内容的提问来源于stack exchange,提问作者Barley238
相关产品推荐
相关产品推荐

