2011-03-17 57 views
2

在計算報表摘要行中的平均值時出現錯誤。我的表情看起來是這樣的:Reporting Services表達式在某些情況下會出錯

8311 87 0 0 
8311 41 0 0 
8311 80 0 0 
8311 136 1 136 

的想法是,第3欄:當數據看起來像這樣

=IIF(SUM(Fields!column3.Value) > 0, Format(DateAdd("s", (SUM(Fields!column4.Value)/SUM(Fields!column3.Value)), "00:00:00"), "HH:mm:ss"), "-") 

(抱歉超長線)

表達正常工作如果列2超過120,則爲1,否則爲0.僅當列2大於120時,列4的值大於0,在這種情況下,它與列2的值相同。這樣,對於摘要報告服務中的這一行的行,我可以確定grea的總行數(通過在列3上使用SUM)。以同樣的方式,我可以通過求和第4列來確定第2列中大於120的值的總數。從那裏開始,應該很簡單,就是將第4列除以第3列以確定第2列的平均值值超過120.

一旦我得到了平均值,我想將它轉換爲時間字符串(例如,「00:02:16」)。如果沒有值(即組中沒有第2列值超過120),我想顯示「 - 」

此邏輯似乎適用於列2的值超過120的情況。但是,當柱3和4是0,如下面:運行報告時

8310 108 0 0 

的表達產生可怕的結果#錯誤我假設這是由零誤差分頻,所以我扔IIF在。表達式來檢查我的平均計算中的分母是否大於0.

不幸的是,對於那些在第3列和第4列中有0的組,它們仍然存在#Error。我錯過了什麼?

回答

4

SSRS中的iif與Visual Basic IIF相同:它評估所有分支,並且如果任何部分生成錯誤,則整個函數將引發錯誤。

兩種常見的變通辦法:在報告中

  • 使用嵌入式代碼,
  • 使用第二個IIF,將節省您的功能從以往除以零。

第二個選項: 替換:

=IIF(SUM(Fields!column3.Value) > 0, Format(DateAdd("s", (SUM(Fields!column4.Value)/SUM(Fields!column3.Value)), "00:00:00"), "HH:mm:ss"), "-") 

=IIF(SUM(Fields!column3.Value) > 0, Format(DateAdd("s", (SUM(Fields!column4.Value)/IIF(SUM(Fields!column3.Value)>0,SUM(Fields!column3.Value),1)), "00:00:00"), "HH:mm:ss"), "-") 

(我覺得我得到了正確的數量括號的...)

許多嵌入式例子處理除以零的代碼也在附近,這裏是一個。 http://social.msdn.microsoft.com/Forums/is/sqlreportingservices/thread/b8e0730b-da60-49a8-8613-2309ff1a2c90

+0

這樣做的伎倆......謝謝! – seanicus 2011-03-18 13:24:57