2012-02-15 23 views
0

我得到#錯誤的ReportViewer中,當我使用下面的表達式:C#報表返回#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()函數,並使用一些靜態值,而不是,它的工作原理。 有沒有辦法找出確切的錯誤?

+2

這看起來像VB.Net不是C# – JaredPar 2012-02-15 23:19:07

+0

是的,它是在RDLC文件 – Kres 2012-02-15 23:21:38

+0

一個VB.Net表達Reporting Services使用VB運行時庫。你在使用SSRS嗎? – 2012-02-15 23:21:45

回答

1

基礎上equation used to calculate an annuity我說你每年或0期的利率經過數爲0,因此通過零誤差得到一個鴻溝。

您所檢查的付款號大於零,但付款號是不是在你的IPMT計算中使用,所以也許你正在使用的計算錯誤的領域?

總之,不管這一點,你需要知道IIF是不是一個說法,那就是被傳遞兩個參數的函數。因此,這兩個參數在函數調用之前進行評估,因此評估「if語句」的兩邊。這可能會造成混淆,因爲當您檢查除數不爲零時,仍然會得到除零錯誤。只要記住它是一個功能,而不是一個聲明,所以沒有短路評估來防止錯誤部分被執行。不過,也有變通辦法,大部分涉及做兩IIF呼籲從除法計算所使用去除零值:

=IIF(Fields!DivideBy.Value <> 0, Fields!Something.Value/IIF(Fields!DivideBy.Value <> 0, Fields!DivideBy.Value, 1), 0) 
+0

實際上我修正了數據庫中的值,所以現在我無法得到除零誤差。我不知道。因爲如果PaymentNumber> 0我得到計算IPmt,但如果它等於0我得到#Error .. – Kres 2012-02-16 18:46:12

0

這是特別不容易調試#Error在Reporting Services。

以我的經驗,最好的辦法就是把它分解成各個組成部分,並看看是否有這些都是問題。您已經縮小到IPmt功能,該功能期望通過四個Double參數。

你檢查你正在傳遞的所有四個參數有值,並且是正確的類型?