2014-02-27 14 views
2

我有三個不同的查詢,並希望按照jasper report中的值運行它們。查詢是在Jrxml文件本身中編寫的。如何根據不同的動態值運行不同的查詢。Jasper Report根據不同的動態值運行不同的查詢

贊(這僅僅是一個須藤代碼)

If($(a) == "Germany") 

    run query 1 
If($(a) == "India") 
    run query 2 

任何幫助將高度讚賞。

+1

是從QUERY1和QUERY2返回領域有什麼不同? – sanBez

+0

是實際字段,並且根據查詢執行的字段,abd的值有所不同。 – Innovation

回答

3

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從應用程序

+1

我有一個小小的懷疑。這是否意味着要執行N個這樣的查詢,我們必須創建新的子報告.. – AngelsandDemons

+0

另一種方法是使用子數據集。 http://stackoverflow.com/questions/7482412/multiple-queries-in-a-single-jasper-document 但subdataset有一些限制,AFAIR – sanBez

2

您可以嘗試使用DynamicReports。這是一個基於JasperReports的庫,讓你直接從你的java代碼構建你的報告。 這裏是一個axample Dynamic Reports 有一個.setDataSource()方法可以接受一個字符串+一個連接對象。基於一些小邏輯,你可以在那裏設置查詢。 .setDataSource()被重載,甚至可以帶一個ResultSet對象。所以你甚至可以使用一個Statement/PreparedStatement對象傳遞不同的查詢和值,然後將它們的結果作爲報表的來源。 希望它有幫助!

P.S:本例使用Maven的依賴關係,但你也可以下載.jar和將它添加到您的類路徑,使其工作

相關問題