在 SSRS 中对 Double 值执行 IIF
Performing IIF on a Double value in SSRS
目前我的报告中有一列正在计算平均值:
=FORMAT(Avg(Fields!intGradeTransposeValue.Value),"#.#")
我目前正在尝试使用该计算的结果来执行 IIF 语句,但出现错误:
The Value expression for the textrun 'Textbox20.Paragraphs[0].TextRuns[0]' contains an error: [BC30311] Value of Type 'Microsoft.ReportingServices.ReportProcessing.ReportObjectModel.ReportItem' cannot be converted to '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 的第一个双倍。我正在使用下面的建议答案,但这也不起作用。
我很确定你是说将 A* 或 B 等的字符串值转换为双精度输出。这给出了错误不能加倍。
您可能希望将 reportItems 部分包装在 CDbl() 中,而不是转换该数字,然后将其与您的静态双精度值进行比较。
只有在确实需要将字段更改为双精度值以进行比较时,您才会以这种方式转换字段。
=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")))))))
根据您收到的错误,问题是您正试图将 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")))))))
基于对原始 post 的编辑,我遗漏了表达式的另一个问题。您无法比较这样的值。您需要在 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")))))))
目前我的报告中有一列正在计算平均值:
=FORMAT(Avg(Fields!intGradeTransposeValue.Value),"#.#")
我目前正在尝试使用该计算的结果来执行 IIF 语句,但出现错误:
The Value expression for the textrun 'Textbox20.Paragraphs[0].TextRuns[0]' contains an error: [BC30311] Value of Type 'Microsoft.ReportingServices.ReportProcessing.ReportObjectModel.ReportItem' cannot be converted to '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 的第一个双倍。我正在使用下面的建议答案,但这也不起作用。
我很确定你是说将 A* 或 B 等的字符串值转换为双精度输出。这给出了错误不能加倍。
您可能希望将 reportItems 部分包装在 CDbl() 中,而不是转换该数字,然后将其与您的静态双精度值进行比较。
只有在确实需要将字段更改为双精度值以进行比较时,您才会以这种方式转换字段。
=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")))))))
根据您收到的错误,问题是您正试图将 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")))))))
基于对原始 post 的编辑,我遗漏了表达式的另一个问题。您无法比较这样的值。您需要在 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")))))))