我有三個不同的查詢,並希望按照jasper report中的值運行它們。查詢是在Jrxml文件本身中編寫的。如何根據不同的動態值運行不同的查詢。Jasper Report根據不同的動態值運行不同的查詢
贊(這僅僅是一個須藤代碼)
If($(a) == "Germany")
run query 1
If($(a) == "India")
run query 2
任何幫助將高度讚賞。
我有三個不同的查詢,並希望按照jasper report中的值運行它們。查詢是在Jrxml文件本身中編寫的。如何根據不同的動態值運行不同的查詢。Jasper Report根據不同的動態值運行不同的查詢
贊(這僅僅是一個須藤代碼)
If($(a) == "Germany")
run query 1
If($(a) == "India")
run query 2
任何幫助將高度讚賞。
在mainReport.jrxml定義參數$P{a}
讓子報表subreport1.jrxml(QUERY1),subreport2.jrxml(QUERY2)
認沽subreport1和subreport2到標題的帶mainReport.jrxml
在mainReport中使用PrintWhenExpression獲取子報表屬性(Window - >屬性)
在mainReport設置PrintWhenExpression爲subreport1:在mainReport $P{a}.equals("Germany")
設置PrintWhenExpression爲subreport2:$P{a}.equals("India")
通$P{a}
到mainReport從應用程序
我有一個小小的懷疑。這是否意味着要執行N個這樣的查詢,我們必須創建新的子報告.. – AngelsandDemons
另一種方法是使用子數據集。 http://stackoverflow.com/questions/7482412/multiple-queries-in-a-single-jasper-document 但subdataset有一些限制,AFAIR – sanBez
您可以嘗試使用DynamicReports。這是一個基於JasperReports的庫,讓你直接從你的java代碼構建你的報告。 這裏是一個axample Dynamic Reports 有一個.setDataSource()方法可以接受一個字符串+一個連接對象。基於一些小邏輯,你可以在那裏設置查詢。 .setDataSource()被重載,甚至可以帶一個ResultSet對象。所以你甚至可以使用一個Statement/PreparedStatement對象傳遞不同的查詢和值,然後將它們的結果作爲報表的來源。 希望它有幫助!
P.S:本例使用Maven的依賴關係,但你也可以下載.jar和將它添加到您的類路徑,使其工作
是從QUERY1和QUERY2返回領域有什麼不同? – sanBez
是實際字段,並且根據查詢執行的字段,abd的值有所不同。 – Innovation