You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SRSS中用于双日期区间判断的Iif表达式正常运行

错误原因

  • 核心问题是类型不匹配:Fields!From.Value为日期类型,直接和字符串格式的日期做比较,SSRS无法完成隐式类型转换时就会抛出#Error。
  • 日期解析存在歧义:你使用的dd/MM/yyyy格式的日期字符串,会受报表/服务器的区域设置影响,若区域默认是MM/dd/yyyy格式,会将01/09/2021解析为2021年1月9日,完全不符合你预期的9月1日,比较逻辑错误。
  • 未处理空值:如果Fields!From.Value存在空值,直接参与比较也会触发报错。

修复方案

建议用SSRS原生的日期字面量(用#包裹,固定为MM/dd/yyyy格式,不受区域设置影响)做比较,同时用SWITCH函数替代多层嵌套IIF提升可读性,另外增加空值判断避免空值报错。

修复后表达式如下:

=IIF(IsNothing(Fields!From.Value), "0",
SWITCH(
    Fields!From.Value >= #09/01/2021# And Fields!From.Value <= #08/31/2022#, "Sept 2021",
    Fields!From.Value >= #09/01/2020# And Fields!From.Value <= #08/31/2021#, "Sept 2020",
    Fields!From.Value >= #09/01/2019# And Fields!From.Value <= #08/31/2020#, "Sept 2019",
    Fields!From.Value >= #09/01/2018# And Fields!From.Value <= #08/31/2019#, "Sept 2018",
    Fields!From.Value >= #09/01/2017# And Fields!From.Value <= #08/31/2018#, "Sept 2017",
    Fields!From.Value >= #09/01/2016# And Fields!From.Value <= #08/31/2017#, "Sept 2016",
    True, "0"
))

如果你的Fields!From.Value本身是字符串类型而非日期类型,需要先将其转换为日期再比较,示例如下:

=IIF(IsNothing(Fields!From.Value), "0",
SWITCH(
    DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) >= #09/01/2021# And DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) <= #08/31/2022#, "Sept 2021",
    DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) >= #09/01/2020# And DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) <= #08/31/2021#, "Sept 2020",
    DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) >= #09/01/2019# And DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) <= #08/31/2020#, "Sept 2019",
    DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) >= #09/01/2018# And DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) <= #08/31/2019#, "Sept 2018",
    DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) >= #09/01/2017# And DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) <= #08/31/2018#, "Sept 2017",
    DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) >= #09/01/2016# And DateTime.ParseExact(Fields!From.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) <= #08/31/2017#, "Sept 2016",
    True, "0"
))

内容的提问来源于stack exchange,提问作者EducationSRSS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:15:05