首页 > 解决方案 > 在 SSRS 中对 Double 值执行 IIF

问题描述

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

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

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

textrun 'Textbox20.Paragraphs[0].TextRuns[0]' 的值表达式包含错误:[BC30311] 类型 'Microsoft.ReportingServices.ReportProcessing.ReportObjectModel.ReportItem' 的值无法转换为 'Double'

我的表达是:

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

如何进行我需要的计算?

额外的

我在下面添加了错误发生的地方——这让我很困惑,因为它似乎接受了 1.4 的第一个双精度。我正在使用下面建议的答案,但这也不起作用。

双重发行

标签: reporting-servicesdoubleexpressionssrs-2012iif

解决方案


根据您收到的错误,问题是您试图将ReportItems!Textbox6自身转换为双精度,而不是其中的值。为了引用文本框的值,您需要将其引用为ReportItems!Textbox6.Value. 所以我相信你需要的答案会将阿拉曼的答案与这个变化结合起来:

=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")))))))

资源

根据对原始帖子的编辑,我错过了表达式的另一个问题。你不能像那样比较这些值。您需要在AND.

=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")))))))

推荐阅读