在SSRS中对Double值执行IIF

时间:2019-01-18 10:39:59

标签: reporting-services double expression ssrs-2012 iif

我目前在报告中有一列正在计算平均值:

launch

我目前正在尝试使用该计算的结果来执行IIF语句,但是出现错误:

  

文本运行'Textbox20.Paragraphs [0] .TextRuns [0]'的值表达式包含错误:[BC30311]类型'Microsoft.ReportingServices.ReportProcessing.ReportObjectModel.ReportItem'的值不能转换为'Double'

我的表情是:

=FORMAT(Avg(Fields!intGradeTransposeValue.Value),"#.#")

如何进行所需的计算?

附加

我在下面添加了错误的发生位置,这使我感到困惑,因为它似乎接受1.4的前两个整数。我在下面使用建议的答案,但这也不起作用。

Double Issue

2 个答案:

答案 0 :(得分:1)

根据收到的错误,问题是您试图将ReportItems!Textbox6本身转换为双精度值,而不是其中的值。为了引用文本框的值,您需要将其引用为ReportItems!Textbox6.Value。因此,我相信您需要的答案将结合arahman的答案和此更改:

=IIF(CDbl(ReportItems!Textbox6.Value) <= 1.4, "A*", 
    IIF(CDbl(ReportItems!Textbox6.Value) <= 2.4 AND >= 1.5, "A",
        IIF(CDbl(ReportItems!Textbox6.Value) <= 3.4 AND >= 2.5, "B",
            IIF(CDbl(ReportItems!Textbox6.Value) <= 4.4 AND >= 3.5, "C",
                IIF(CDbl(ReportItems!Textbox6.Value) <= 5.4 AND >= 4.5, "D"
                    IIF(CDbl(ReportItems!Textbox6.Value) <= 6.4 AND >= 5.5, "E"
                        IIF(CDbl(ReportItems!Textbox6.Value) <= 7.4 AND >= 6.5, "U", "Error")))))))

Source

基于对原始帖子的编辑,我错过了表达式的另一个问题。您无法比较这样的值。您需要在AND之后向Textbox值添加其他引用。

=IIF(CDbl(ReportItems!Textbox6.Value) <= 1.4, "A*", 
    IIF(CDbl(ReportItems!Textbox6.Value) <= 2.4 AND CDbl(ReportItems!Textbox6.Value) >= 1.5, "A",
        IIF(CDbl(ReportItems!Textbox6.Value) <= 3.4 AND CDbl(ReportItems!Textbox6.Value) >= 2.5, "B",
            IIF(CDbl(ReportItems!Textbox6.Value) <= 4.4 AND CDbl(ReportItems!Textbox6.Value) >= 3.5, "C",
                IIF(CDbl(ReportItems!Textbox6.Value) <= 5.4 AND CDbl(ReportItems!Textbox6.Value) >= 4.5, "D",
                    IIF(CDbl(ReportItems!Textbox6.Value) <= 6.4 AND CDbl(ReportItems!Textbox6.Value) >= 5.5, "E",
                        IIF(CDbl(ReportItems!Textbox6.Value) <= 7.4 AND CDbl(ReportItems!Textbox6.Value) >= 6.5, "U", "Error")))))))

答案 1 :(得分:0)

我很确定您说的是将输出转换为双精度A *或B等字符串值。给出的错误无法转换为两倍。

您可能希望将reportItems节包装在CDbl()中,以强制转换该数字,然后将其与静态double值进行比较。

只有在确实需要将其更改为用于比较的双精度字段时,才需要以这种方式投射字段。

=IIF(CDbl(ReportItems!Textbox6) <= 1.4, "A*", 
    IIF(CDbl(ReportItems!Textbox6) <= 2.4 AND >= 1.5, "A",
        IIF(CDbl(ReportItems!Textbox6) <= 3.4 AND >= 2.5, "B",
            IIF(CDbl(ReportItems!Textbox6) <= 4.4 AND >= 3.5, "C",
                IIF(CDbl(ReportItems!Textbox6) <= 5.4 AND >= 4.5, "D"
                    IIF(CDbl(ReportItems!Textbox6) <= 6.4 AND >= 5.5, "E"
                        IIF(CDbl(ReportItems!Textbox6) <= 7.4 AND >= 6.5, "U", "Error")))))))