2012-02-20 78 views
0

我花了2天的時間來弄清楚,但沒有運氣。 我有一個IIF什麼表情顯示正確的值當條件變爲真(IPMT計算),但其他人總是返回#ERROR,雖然它應該只是0ReportViewer IIF表達式返回#error

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

所有字段具有值(不可爲空) 什麼會導致這種情況?

感謝

+0

解決! 由IIF表達評估引起的問題。 vb.net也嘗試計算true和false的情況。如果PaymentNumber爲0,則IPmt返回#Error(除以零)。 解決方案:當IPmt中的PaymentNumber設置爲1(或除0之外的其他值),等於0時。 – Kres 2012-02-20 15:15:40

+0

d'OH剛寫完我的回覆。很高興你想出來了。 – eric 2012-02-20 15:21:08

回答

0

該錯誤是因爲真條件總是被判斷,並且當付款號= 0根據該文件,一個IIF表達的兩個條件都總是評估返回一個錯誤。你可以通過切換命令來測試:

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

我過去所做的是在'自定義代碼'中創建一個函數。我沒有使用IPMT,但我相信這應該工作:

Function CalcIpmt(Annual_Interest_Rate As Decimal, PaymentNumber As Integer, Payment As Decimal, Total_Amount_Financed As Decimal) As Decimal) 

    If PaymentNumber = 0 Then 
     Return 0 
    Else 
     Return IPmt(Annual_Interest_Rate, PaymentNumber, Payment, Total_Amount_Financed) 
    End If 

End Function 

那麼你的表達應該是:

=Code.CalcIpmt(Fields!Annual_Interest_Rate.Value/1200, Fields!PaymentNumber.Value, Fields!Payment.Value, Fields!Total_Amount_Financed.Value) 

(注:我沒有測試過這一點,你需要檢查數據類型)