Выполнение IIF по двойному значению в SSRS - PullRequest
0 голосов
/ 18 января 2019

В настоящее время в моем отчете есть столбец, в котором вычисляется среднее значение:

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

В настоящее время я пытаюсь использовать результат этого вычисления для выполнения инструкции IIF, но получаю ошибку:

Выражение Value для 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. Я использую предложенный ответ ниже, но это также не работает.

Double Issue

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Исходя из полученной вами ошибки, проблема заключается в том, что вы пытаетесь преобразовать сам 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")))))))

Источник

Основываясь на правке исходного сообщения, я пропустил другую проблему с выражением. Вы не можете сравнивать такие значения. Вам нужно будет добавить дополнительные ссылки на значение Textbox после 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")))))))
0 голосов
/ 18 января 2019

Я почти уверен, что вы говорите, приведите вывод, который будет строковым значением 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")))))))
...