2012-06-24

JasperReports Filter Expression

Filter Expression 像是 SQL 裡的 Where 語法,用來過濾 SQL 得到的資料。

在兩個地方可以看到 Filter Expressioin,第一個是報表的屬性,第二個是 Report Query 視窗。




開啟 Filter Expression 後,可以看到四個區塊,上面區塊可以手工寫入 Expression,也可以依照123的順序自動產生 Expression。


在這邊使用 Parameter 來增加一點實用性,回到主畫面,在左邊 Report Inspector 的 Parameter 建立一個名為「startsWith」的參數。


選取該參數後可以在主畫面右邊的 Properties 視窗看到相關屬性,在「Default Value Expression」 輸入"J",記得,要依照 Java 的方式輸入,也就是字串要加雙引號


完成後再回到 Filter Expression 建立如圖所示的 Expression,記得,不能用「and」,只能用「&&」

完工,預覽會提示參數 startsWith 的值,可以用 Use default 使用剛建立的預設值,也就是"J"。

噹噹,有用。


那改用 Where 呢?


也是可以,除了語法不一樣外,還有一些差異,例如不能將 $P 與 % 一起使用。
where FIRSTNAME like '$P{startsWith}%'
這樣是不能編譯的。

上面的 SQL 也有個小問題,就是 substr(..., 0, 1),若 $P{startsWith} 不是一個字元就爆了,也可以再改進啦。
select * from address
where substr(FIRSTNAME,0,length($P{startsWith})) = $P{startsWith}
and LASTNAME like 'M%'
order by lastname
所以要用 Where 或者是 Filter Expression,就看哪個語法好寫囉,Where 當然是 SQL 語法,Filter Expression 則可以是 Java、Javascript 或者 Groovy。

沒有留言:

張貼留言