在使用 Report Builder 設計報表時,常遇到除零錯誤、跨文字方塊引用、動態軸標籤格式等棘手問題。本文提供三大實戰解決方案,含正確寫法與錯誤示範對照。
場景: 文字方塊顯示 `A / B`,當 `B = 0` 時報錯。
=IIF(Fields!B.Value = 0, 0, Fields!A.Value / Fields!B.Value)
原因: SSRS 採用全表達式評估,即使 `IIF` 條件為真,兩個分支都會被計算,導致分母為零的除法仍被執行拋出例外。
=Fields!A.Value / IIF(Fields!B.Value = 0, 99999999999999, Fields!B.Value)
原理: 分子不變,分母在為零時替換為極大數值,結果趨近於 0,且不會觸發除零例外。極大數值需超過報表最大可能數值。
場景: 文字方塊 `TextboxB` 已包含複雜計算公式,`TextboxA` 需引用其結果。
維護惡夢,修改需同步多處。
=ReportItems!TextboxB.Value
注意:
場景: 參數 `StartTime`、`EndTime` 決定時間跨度,需自動切換標籤格式:
=IIF(Parameters!StartTime.Value = Parameters!EndTime.Value, "",
IIF(DateAdd(DateInterval.Day, -4, Parameters!EndTime.Value) >= Parameters!StartTime.Value,
"MM/dd", "M/d H:mm"))
邏輯解析:
此技巧同樣適用於垂直軸、資料標籤等數字格式屬性。
| 問題 | 核心技巧 | 關鍵語法 |
|---|---|---|
| 除零錯誤 | 分母置換極大值 | =A / IIF(B=0, 1E14, B) |
| 跨文字方塊引用 | ReportItems 集合 | =ReportItems!TextboxName.Value |
| 動態軸標籤格式 | 自訂格式碼運算式 | =IIF(...,"MM/dd","M/d H:mm") |
掌握這三招,即可解決 80% 以上的 Report Builder 表達式疑難雜症。