SSRS 2008中的表达元素评估顺序 - 是不是错了?

时间:2013-11-06 20:16:23

标签: reporting-services ssrs-2008

我的客户的会计年度从11月开始。 我使用以下表达式对财务月份类别进行排序:

=Month(
    DateAdd(
        DateInterval.Month,
        -10,
        CDate(
            Fields!FiscalMonth.Value + ", 01 1900"
        )
    )
)

它工作正常,直到我不得不将上一年的最终价值添加到该类别。我认为用这样的表达式排序是微不足道的:

=Iif(
    Fields!FiscalMonth.Value = "YearEnd",
    0,
    Month(
        DateAdd(
            DateInterval.Month,
            -10,
            CDate(
                Fields!FiscalMonth.Value + ", 01 1900"
            )
        )
    )
)

但它在Conversion from string "YearEnd, 01 1900" to type 'Date' is not valid值上抛出错误YearEnd。这应该是不可能的,因为Iif应该保护其第二个参数。我怎样才能确保为'YearEnd'分配0排序顺序?

更新

即使使用以下表达式,也会发生错误:

=Iif(
    Fields!FiscalMonth.Value = "YearEnd",
    0,
    CDate(
        Fields!FiscalMonth.Value + ", 01 1900"
    )
)

不会发生
=Iif(
    Fields!FiscalMonth.Value = "YearEnd",
    0,
    Fields!FiscalMonth.Value + ", 01 1900"
)

对我而言,听起来SSRS在评估CDate()第一个参数之前评估Iif()。一个错误。

1 个答案:

答案 0 :(得分:0)

这有效:

=Iif(
    Fields!FiscalMonth.Value = "YearEnd",
    0,
    Month(
        DateAdd(
            DateInterval.Month,
            -10,
            CDate(
                Iif(Fields!FiscalMonth.Value = "YearEnd", "November", Fields!fiscalmonth.Value) + ", 01 1900"
            )
        )
    )
)

有谁知道我怎么能在微软尖叫:如果第一个参数评估为'假'则不要评估Iif的第二个参数如果第一个参数评估为“真”则不评估3D参数?