2015-12-02 54 views
0

我試圖在一個總和的末尾連接一個字符串,但是如果總和不爲零,它就會中斷。這似乎是由於SSRS評估了IIf聲明的兩個條件,但我無法弄清楚如何解決這個問題。如果值沒有任何意義,條件級聯會中斷

我有....

=IIf(IsNothing(Sum(Fields!Work.Value)), "", Sum(Fields!Work.Value).ToString + " J") 

這將打印出work summary + " J"如果有一個,而#Error如果不是。什麼是SSRS解決方法?

更新/澄清

有問題的報告上進行分組的日期,然後總結Work,所以它不是的情況下Work爲空,本身,而是針對這個特定用戶使用此特定的日期,組中沒有行。因此,在導致錯誤的實例中沒有要總結的行。

樣本數據集

Name Date  Work 
Andy 12/1/15  511.30 
Andy 12/1/15  549.70 
Drew 12/2/15  484.80 
Drew 12/2/15  322.36 

樣本報告(電流)

Name 12/1/15  12/2/15  
Andy  1061 J  #Error 
Drew  #Error 807.16 J 

樣本報告(預期)

Name 12/1/15  12/2/15  
Andy  1061 J  
Drew    807.16 J 

回答

1

你是否考慮過在同一個單元格中的兩個不同表達式中執行所需輸出的兩部分?

我假設你已經使用了矩陣,其中行的名稱和列的日期。您可以將數據設置爲工作總和,如下所示,以及下圖中的紅色文本。

=Sum(Fields!Work.Value) 

然後右鍵單擊該單元格並選擇「創建佔位符」以在同一單元格中插入第二個表達式。

enter image description here

設置要爲這裏顯示的這個表達式的值,並在下面

=iif(Sum(Fields!Work.Value) > 0, " J", "") 

藍色的文本,然後在運行報表時,將始終顯示求和,如果有一個,如果Sum的值大於零,它也將根據需要顯示J

enter image description here

希望這是你所需要的行爲。請讓我知道,如果您需要此解決方案的進一步的幫助

0

試試這個:

=IIF(SUM(IIF(Isnothing(Fields!Total.Value),0,Fields!Total.Value)) = 0, 
"", 
SUM(IIF(Isnothing(Fields!Total.Value),0,Fields!Total.Value)).ToString + " J" 
) 

讓我知道如果這能幫助你

+0

相同的處理,如果有價值的作品,#如果不是的話 – tarrball

+0

當沒有價值的時候你的數據集返回null? –

+0

這是正確的,我知道ISNOTHING正如預期的那樣返回真假。 – tarrball

0

IIF does not short-circuit所以這#Error是SSRS試圖使用ToString功能上的空值。

的解決方法是在錯誤的部分添加另一個IsNothing檢查使用ToString前:

=IIF(IsNothing(Sum(Fields!Work.Value)) 
, "" 
, IIF(IsNothing(Sum(Fields!Work.Value)), "", Sum(Fields!Work.Value)).ToString & " J") 
+0

如果'IIF'不短路,那麼不會第二個'IIf'失敗了嗎? – tarrball

0

爲了解決這一確切的問題,如果沒有Work因爲顯示則報告應顯示什麼,而不是在串聯使用IIf語句時,在單元上設置條件可見性是簡單而充分的。

在細胞中,使用表達式:

Sum(Fields!Work.Value).ToString + " J"

然後,對於相同的細胞中,選擇:

Text Box Properties > Visibility > Show or hide based on an expression

並輸入:

=IsNothing(Sum(Fields!Work.Value))

雖然這解決了這個特定的問題,但如果解決方案需要空單元顯示除空白之外的任何內容,那麼原始的IIf短路問題仍然是個問題。