SSRS从工作日表达结果中删除#ERROR

时间:2015-12-11 11:14:16

标签: reporting-services

此刻我有点难过。我创建了一个表达式,用于计算两个日期之间的工作日,并且工作正常。

=(DateDiff(DateInterval.day,Fields!TCY_START_DATE.Value,
Fields!TCY_TENANCY_VISIT_DATE.Value))
- (DateDiff(DateInterval.WeekOfYear,Fields!TCY_START_DATE.Value,
Fields!TCY_TENANCY_VISIT_DATE.Value)*2)
- IIF(Weekday(Fields!TCY_START_DATE.Value,1) = 1,1,0)
- IIF(Weekday(Fields!TCY_START_DATE.Value,1) = 7,1,0)
- IIF(Weekday(Fields!TCY_TENANCY_VISIT_DATE.Value,1) = 1,1,0)
- IIF(Weekday(Fields!TCY_TENANCY_VISIT_DATE.Value,1) = 7,1,0)

我遇到的问题是,如果 TCY_TENANCY_VISIT_DATE 为空,则此表达式的结果为#ERROR。

我需要调整这个表达式,所以它基本上会说访问日期是否为空,然后显示任何内容,但仍将其合并到我的工作日公式中

1 个答案:

答案 0 :(得分:0)

这是因为SSRS在尝试查找其所具有的值的实际路径之前会对整个表达式求值。因此,它会尝试找到字段的工作日!TCY_TENANCY_VISIT_DATE.Value,即使它是空白的,因此会抛出错误。

解决方法是从头开始处理所有潜在的空白或空值。在这种情况下改变行

IIF(Weekday(Fields!TCY_TENANCY_VISIT_DATE.Value,1) = 7,1,0)

iif(iif(isnothing(Fields!TCY_TENANCY_VISIT_DATE.Value), 
        "", 
        Fields!TCY_TENANCY_VISIT_DATE.Value), 1) = 7,
    1,
    0)

应该做的伎俩。如果有可能为null,您可能还需要为其他值重复此过程。