c # report возвращает # error - PullRequest
       4

c # report возвращает # error

0 голосов
/ 16 февраля 2012

Я получаю #Error в reportviewer, когда использую следующее выражение:

    =IIf(Fields!PaymentNumber.Value>0,
         IPmt(Fields!Annual_Interest_Rate.Value/1200,
              Fields!Payment.Value,
              Fields!No_of_Monthly_Payments.Value,
              Fields!Total_Amount_Financed.Value),0)

Когда я удаляю функцию IPmt () и вместо нее использую некоторое статическое значение, оно работает.Есть ли способ узнать точную ошибку?

Ответы [ 3 ]

1 голос
/ 16 февраля 2012

На основе уравнения , используемого для расчета аннуитета Я бы сказал, что вы передаете либо 0 для числа периодов в году, либо 0 для процентной ставки и, таким образом, получаете ошибку деления на ноль.

Вы проверяете, что PaymentNumber больше нуля, но PaymentNumber не используется в ваших вычислениях IPmt, поэтому, возможно, вы используете неправильное поле в расчете?

В любом случае, независимо от этого, вы должны знать, что IIF - это не оператор, это функция, которая получает два параметра. Следовательно, эти два параметра оцениваются до вызова функции, и, таким образом, ОБА сторонам "оператора if" оцениваются. Это может сбить с толку, потому что вы все равно получите ошибки деления на ноль, когда вы проверяете, что ваш делитель не равен нулю. Просто помните, что это функция, а не оператор, и поэтому нет оценки короткого замыкания, чтобы предотвратить выполнение ошибочной части. Однако существуют обходные пути, в основном связанные с выполнением двух вызовов IIF, чтобы удалить нулевое значение из используемого при вычислении деления:

=IIF(Fields!DivideBy.Value <> 0, Fields!Something.Value / IIF(Fields!DivideBy.Value <> 0, Fields!DivideBy.Value, 1), 0)
0 голосов
/ 16 февраля 2012

«IIF» в SSRS не имеет оценки короткого замыкания.Убедитесь, что при вызове этой функции , даже если PaymentNumber равен 0 или меньше, , что у вас есть действительные значения для IPmt ().

Возможно несколько обходных путей:

0 голосов
/ 16 февраля 2012

Отладка #Error в службах Reporting Services не особенно проста.

По моему опыту, лучший способ состоит в том, чтобы разбить его на составные части и посмотреть, являются ли какие-либо из них проблемой. Вы уже сузили его до функции IPmt , которая ожидает передачи четырех параметров Double.

Вы проверили, что все четыре параметра, которые вы передаете, имеют значения и имеют правильный тип?

...