在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可以实现相同的功能,并且灵活性更大