在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可以實現相同的功能,並且靈活性更大