2012-05-03 151 views
13

零/零解決方法我有一個字段的值是表達的報告:除以在SSRS 2008年的報告

Fields!TotalPrice.Value/Fields!TotalSlots.Value 

雖然有時TotalSlots是空白的,因此我得到零運行時錯誤鴻溝。所以我改變了這個表達式:

=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown") 

但我仍然得到一個除零錯誤。我如何解決這個零除數問題。

回答

15

VB的地方IIF evaluates all arguments,所以它會拋出一個錯誤,如果任何參數拋出一個錯誤:

公式可以寫成:

=IIF(Fields!TotalSlots.Value > 0, 
    Fields!TotalPrice.Value/
    IIF(Fields!TotalSlots.Value > 0, 
     Fields!TotalSlots.Value, 
     1), 
    "unknown") 

然後即使當TotalSlots爲零時,公式仍然獲得沒有遇到分裂問題。

+1

這裏可能不適用,但除數可能爲負數的情況如何? – Homer

+2

用'<> 0'替換'> 0'的兩個出現,你應該對負因子罰款。 –

1

我不認爲你的錯誤是在計算上。首先,SSRS自動處理這種情況。看我的第三欄。和第四展示你的表達:

enter image description here

你的問題很可能是別的

23

Jamie F的回答是正確的。作爲提示,您可以爲報表代碼添加一個函數,以使分區在多個單元格中更容易實現,例如,

Public Function Divider (ByVal Dividend As Double, ByVal Divisor As Double) 
If IsNothing(Divisor) Or Divisor = 0 
    Return 0 
Else 
    Return Dividend/Divisor 
End If 
End Function 

然後,您可以像這樣調用這個小區中的:

=Code.Divider(Fields!FieldA.Value, Fields!FieldB.Value) 
+0

我收到一個錯誤「Native編譯器返回值函數」Divider'沒有在所有代碼路徑上返回一個值,使用結果時運行時可能會發生空引用異常「我明白任何幫助。如果任何人遇到同樣的問題,只要確保你的代碼看起來和上面的表達式完全一樣就好了 – BilliD

1

這似乎只發生在分工的IIF的結果之一,而不是如果你只寫一個公式除以另一個,例如

=IIF(thing=1,10/0,0) 

評估之前,它已經試圖計算兩個結果,導致錯誤。你不能以這種方式使用IIF來防止零,你必須將IIF放在該部門的底線上,例如,

=IIF(thing=1, 10/IIF(divisor=0,-99999999999,divisor),0) 

這是不能令人滿意的,因爲我們已經introcudes一個奇怪的小非零號的結果,但它可能是好的,如果你只是想要一個無差錯。

從技術上講,#error是正確的答案。

+0

我剛剛把它設爲1,如果是0,那麼讓主要的IIF用0代替整個東西,但是這讓我走上了正軌,儘管它將會在這樣的情況下發生。 – workabyte