iReport中sub-dataset引用調用main report中的參數

原文地址:http://webprogrammer.tistory.com/2051

在iReport中sub-dataset中無法直接引用主報表中的fields,parameters,variables

並且要使用sub-dataset中的數據,只能在crosstable,table,list,chart組件中使用


現假設main report中的sql爲:

SELECT
product_sales.`continent` AS product_sales_continent,
product_sales.`city` AS product_sales_city, 
product_sales.`product` AS product_sales_product,
product_sales.`sales` AS product_sales_sales
FROM
`product_sales` product_sales
ORDER BY
1, 2, 3

右擊根元素,添加sub-dataset

假設sub-dataset中的sql爲:

SELECT
product_sales.`product` AS product_sales_product,
SUM(product_sales.`sales`) AS product_sales_sales
FROM
`product_sales` product_sales
GROUP BY 1
ORDER BY 1
以上查詢語句並不是最終的sql,其中變量需要在設置完畢後添加。

在sub-dataset中添加parameter 所添加參數的類型應與主報表中相應參數的類型相同


並且將自定義的parameter屬性中的use as a prompt一項設置爲未選中

從組件中添加chart至disigner view中,在彈出的對話框中,選擇dataset爲之前新建的sub-dataset後按完成

右擊pie chart,選擇chart data設置


設置如下chart details--->dataset--->Connection/Datasource exp中選擇use connection expression 值爲$P{REPORT_CONNECTION}         

 (這裏是根據數據源的類型不同有所不同)

chart details--->dataset--->parameters--->add 選擇之前在sub-dataset中新建的參數,值爲主報表中相應字段的值


最後修改sub-dataset中的sql語句,將參數傳入sql中,比例中修改後的sql如下:

SELECT
product_sales.`product` AS product_sales_product,
SUM(product_sales.`sales`) AS product_sales_sales
FROM
`product_sales` product_sales
WHERE
product_sales.`continent`=$P{CONTINENT_CHART}
GROUP BY 1
ORDER BY 1

現在就可以在chart中,根據主報表傳來的參數進行查詢了。





PS:

1.如果只是要將sub-dataset中的數據展現出來,可以用list實現

2.sub-dataset主要還是用於crosstable,chart等組件中

3.如果要將複雜的查詢條件簡化,用sub-report可以實現相同的功能,並且靈活性更大

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章