当我使用以下表达式时,我在reportviewer中得到#Error:
=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()函数并使用一些静态值时,它可以工作。 有没有办法找出确切的错误?
答案 0 :(得分:1)
基于equation used to calculate an annuity我会说你每年的期数为0或0为利率,因此得出零除错误。
您正在检查PaymentNumber是否大于零,但您的IPmt计算中未使用PaymentNumber,因此您可能在计算中使用了错误的字段?
无论如何,无论如何,你需要知道IIF不是一个声明,它是一个传递两个参数的函数。因此,在函数调用之前评估这两个参数,从而评估“if语句”的两个边。这可能会造成混淆,因为当您检查除数是非零时,您仍会得到除以零错误。只记住它是一个函数,而不是一个语句,因此没有短路评估来防止错误的部分被执行。但是,有一些解决方法,主要涉及进行两次IIF调用以消除零值计算中使用的零值:
=IIF(Fields!DivideBy.Value <> 0, Fields!Something.Value / IIF(Fields!DivideBy.Value <> 0, Fields!DivideBy.Value, 1), 0)
答案 1 :(得分:0)
在Reporting Services中调试#Error
并不是特别容易。
根据我的经验,最好的方法是将其分解为组成部分,看看是否有任何问题。您已经将其缩小到IPmt函数,该函数期望传递四个Double
参数。
您是否检查过传入的四个参数是否都具有值并且类型正确?
答案 2 :(得分:0)
可能有几种解决方法: