2019年7月17日 星期三

SSRS_Switch_踩雷

SSRS_Switch_踩雷

tags: SSRS Switch Reporting Service

今天處理SSRS報表的時候一直撞牆,一個很簡單的Switch判斷函式也無法成功處理,欄位應該是nothing,但Switch判斷到最後就是會出現#錯誤,這種異常訊息通常出現在『除零』的情況,但我一直覺得第一個Switch條件就應該已經將欄位判斷為nothing,但似乎不是我想的那樣。

範例資料集如下:

select 1 a, 1 b from dual
union all
select 2, null from dual
union all
select null, 3 from dual

報表很簡單,如下圖:

=Switch(
 IsNothing(Fields!A.Value), nothing,
 IsNothing(Fields!B.Value), nothing,
 True, (Fields!A.Value - Fields!B.Value) / Fields!A.Value
)

可以看的到條件判斷就是如果A、B任一欄位為nothing,則該欄為nothing,否則就(A-B)/A

但實際執行的時候卻發現,C欄出現#錯誤的訊息,如下圖:

這很怪,詢問老司機之後得知,用Switch,最後還是要預防一下除零的狀況,因此調整如下:

=Switch(
 IsNothing(Fields!A.Value), nothing,
 IsNothing(Fields!B.Value), nothing,
 True, (Fields!A.Value - Fields!B.Value) / IIF(Fields!A.Value is nothing, 1, Fields!A.Value)
)

最後我加了一IIF來判斷,如果是nothing就賦值1,再來一次,神奇的是,就正常了,如下圖:

好吧,也許SSRSSwitch不一樣。

沒有留言:

張貼留言