【问题标题】:Format Date Time Exception in SSRSSSRS 中的格式化日期时间异常
【发布时间】:2017-07-31 19:13:49
【问题描述】:

我已经构建了一个 SSRS 报告,它结合了两个 int 数据列(即:6 和 2017),使用以下语句在 SSRS 报告的列(即:2017 年 6 月)中形成有效的月份和年份结果:@ 987654321@

这可以按需要工作,但是该月的某些 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)

【问题讨论】:

    标签: sql-server datetime reporting-services ssrs-2012


    【解决方案1】:

    当出现13 时,表达式中的问题是CDate()。根据SSRS的设计,IIF @和TRUEFALSE两者和在您的情况下,选择13 MonthEarnedId 987654327 @尝试转换13/2017 987654329 @格式无效并抛出#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)
    

    【讨论】:

    • 您提供的可见性代码是一个可行的解决方案,但是在运行报表时效率非常低。结果,我接受了您的建议并决定将日期格式化为我的 SQL 查询中的一个字段,即: CASE WHEN MonthEarnedId
    【解决方案2】:

    您正在将该字段类型转换为日期变量以应用格式,同时您还将列的数据类型从字符串更改为日期时间。当渲染器尝试将字符串值“All 2017”转换为相应的日期时间时,会发生错误。要解决这个问题,您需要使用CStr() 或其他方式将其转换回字符串子类型。

    =iif(Fields!MonthEarnedId.Value < 13, CStr(Format(CDate(Fields!MonthEarnedId.Value & "/" & Fields!YearEarned.Value), "MMM yyyy")), "All " & Fields!YearEarned.Value)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多