SSRS 中的格式日期时间异常
Format Date Time Exception in SSRS
我使用以下语句构建了一个 SSRS 报告,该报告结合了两个 int 数据列(即:6 和 2017)以在 SSRS 报告的一列(即:2017 年 6 月)中形成有效的月份和年份结果: Format(CDate(Fields!MonthEarnedId.Value & "/" & Fields!YearEarned.Value)
这按预期工作,但是月份的某些 int 值的值为 13,它应该代表一年中的所有月份,因此报告中这些值的所需格式如 "All 2017"。我认为像下面这样的 IIF 语句会为排除指定必要的格式,但是月份值为 13 的行只显示 #error。如有任何建议,我们将不胜感激!
=iif(Fields!MonthEarnedId.Value < 13, Format(CDate(Fields!MonthEarnedId.Value & "/" & Fields!YearEarned.Value), "MMM yyyy"), "All " & Fields!YearEarned.Value)
您正在将该字段类型转换为日期变体以在这样做时应用格式,您还将列的数据类型从字符串更改为日期时间。当呈现器尝试将字符串值 "All 2017" 转换为相应的日期时间时会发生错误。要解决这个问题,您需要使用 CStr()
或其他方式将其转换回字符串子类型。
=iif(Fields!MonthEarnedId.Value < 13, CStr(Format(CDate(Fields!MonthEarnedId.Value & "/" & Fields!YearEarned.Value), "MMM yyyy")), "All " & Fields!YearEarned.Value)
当出现 13
时,表达式中的问题是 CDate()
。根据 SSRS 中的设计,IIF
评估 TRUE
和 FALSE
,在您的情况下,当 13 选择为 MonthEarnedId
时,CDate()
尝试转换 13/2017
MMM yyyy
格式无效并抛出 #Error
.
我建议您在 SQL 查询中将 int
转换为 month names
并使数据仅在 SSRS 中连接,但如果您严格必须在 SSRS 中执行此操作然后下面是你必须输入的表达式。
=SWITCH(Fields!MonthEarnedId.Value=1,"Jan"
,Fields!MonthEarnedId.Value=2,"Feb"
,Fields!MonthEarnedId.Value=3,"Mar"
,Fields!MonthEarnedId.Value=4,"Apr"
,Fields!MonthEarnedId.Value=5,"May"
,Fields!MonthEarnedId.Value=6,"Jun"
,Fields!MonthEarnedId.Value=7,"Jul"
,Fields!MonthEarnedId.Value=8,"Aug"
,Fields!MonthEarnedId.Value=9,"Sep"
,Fields!MonthEarnedId.Value=10,"Oct"
,Fields!MonthEarnedId.Value=11,"Nov"
,Fields!MonthEarnedId.Value=12,"Dec"
,Fields!MonthEarnedId.Value=13,"All"
) & " " & CStr(Fields!YearEarned.Value.Value)
我使用以下语句构建了一个 SSRS 报告,该报告结合了两个 int 数据列(即:6 和 2017)以在 SSRS 报告的一列(即:2017 年 6 月)中形成有效的月份和年份结果: Format(CDate(Fields!MonthEarnedId.Value & "/" & Fields!YearEarned.Value)
这按预期工作,但是月份的某些 int 值的值为 13,它应该代表一年中的所有月份,因此报告中这些值的所需格式如 "All 2017"。我认为像下面这样的 IIF 语句会为排除指定必要的格式,但是月份值为 13 的行只显示 #error。如有任何建议,我们将不胜感激!
=iif(Fields!MonthEarnedId.Value < 13, Format(CDate(Fields!MonthEarnedId.Value & "/" & Fields!YearEarned.Value), "MMM yyyy"), "All " & Fields!YearEarned.Value)
您正在将该字段类型转换为日期变体以在这样做时应用格式,您还将列的数据类型从字符串更改为日期时间。当呈现器尝试将字符串值 "All 2017" 转换为相应的日期时间时会发生错误。要解决这个问题,您需要使用 CStr()
或其他方式将其转换回字符串子类型。
=iif(Fields!MonthEarnedId.Value < 13, CStr(Format(CDate(Fields!MonthEarnedId.Value & "/" & Fields!YearEarned.Value), "MMM yyyy")), "All " & Fields!YearEarned.Value)
当出现 13
时,表达式中的问题是 CDate()
。根据 SSRS 中的设计,IIF
评估 TRUE
和 FALSE
,在您的情况下,当 13 选择为 MonthEarnedId
时,CDate()
尝试转换 13/2017
MMM yyyy
格式无效并抛出 #Error
.
我建议您在 SQL 查询中将 int
转换为 month names
并使数据仅在 SSRS 中连接,但如果您严格必须在 SSRS 中执行此操作然后下面是你必须输入的表达式。
=SWITCH(Fields!MonthEarnedId.Value=1,"Jan"
,Fields!MonthEarnedId.Value=2,"Feb"
,Fields!MonthEarnedId.Value=3,"Mar"
,Fields!MonthEarnedId.Value=4,"Apr"
,Fields!MonthEarnedId.Value=5,"May"
,Fields!MonthEarnedId.Value=6,"Jun"
,Fields!MonthEarnedId.Value=7,"Jul"
,Fields!MonthEarnedId.Value=8,"Aug"
,Fields!MonthEarnedId.Value=9,"Sep"
,Fields!MonthEarnedId.Value=10,"Oct"
,Fields!MonthEarnedId.Value=11,"Nov"
,Fields!MonthEarnedId.Value=12,"Dec"
,Fields!MonthEarnedId.Value=13,"All"
) & " " & CStr(Fields!YearEarned.Value.Value)