2016-12-14 58 views
1

在SSRS中遇到此問題,並希望得到一些幫助。#即使在使用IIF避免表達式中的零除以

只需在文本框167或168中存在零時在「總計」文本框中返回0或0.00。我在這兩個字段的數據集中都覆蓋了ISNULL。文本框在報告中被格式化爲貨幣。如果167和168都不是0,我會得到結果,但如果它們是#Error的話。有什麼想法嗎?

=IIF((ReportItems!Textbox167.Value > 0) AND (ReportItems!Textbox168.Value > 0) 
    ,CDEC(ReportItems!Textbox173.Value/ReportItems!Textbox167.Value) - 
    CDEC(ReportItems!Textbox176.Value/ReportItems!Textbox168.Value), 0) 

謝謝!

+0

是否有可能他們有NULL值? – Anand

+0

你使用浮點數嗎? – FLICKER

回答

1

這裏的問題是,IIF不像C#中的三元運算符那樣,其中條件表達式僅根據布爾表達式的狀態進行計算。

換句話說,這樣的:

=IIF(a, b, c) 

會先評估abcIIF之前進行評估。在IIF開始查看數值時,損壞已經完成。

相反,您應該將股利分解爲IIF表達式,以確保您永遠不會在除法表達式中獲得0,而不是試圖避免使用表達式。

2

IIF評估兩種可能性即使如果它不需要 - 導致你的錯誤。

理論是,如果分母不爲零,則希望表達式正常計算,但如果分母爲零,則使用0/1。

你的表情會是這樣的:

=IIF(ReportItems!Textbox167.Value = 0, 0, CDEC(ReportItems!Textbox173.Value)) 
/
IIF(ReportItems!Textbox167.Value = 0, 1, CDEC(ReportItems!Textbox167.Value)) 
- 
IIF(ReportItems!Textbox168.Value = 0, 0, CDEC(ReportItems!Textbox176.Value)) 
/
IIF(ReportItems!Textbox168.Value = 0, 1, CDEC(ReportItems!Textbox168.Value)) 
+0

完美...解決了我的問題。謝謝!! – Kevin