我试图创建一个多轴图表,其中一个图表显示条形图,另一个图表显示折线图。我发现多轴图表是这样做的,但是当我运行我的代码时,只显示一个图(图像提供here)。有什么想法如何解决这个问题?
在我寻找解决方案时,我遇到了this post,但是当我执行此操作时,它也是如此。
(当我在jrxml中切换barChart和lineChart的顺序时,它只显示lineChart。下面提供的代码。)
Java bean
public class OperationSuccessrateBean {
private Integer week;
private Integer totalOrders;
private Double successrate;
public OperationSuccessrateBean(Integer week, Integer totalOrders, Double successrate) {
this.week = week;
this.totalOrders = totalOrders;
this.successrate = successrate;
}
public Integer getWeek() {
return week;
}
public Integer getTotalOrders() {
return totalOrders;
}
public Double getSuccessrate() {
return successrate;
}
}
Java:填写报告
private void setOperationSuccessrate(String operationType, Map<String, Object> paramMap,
List<OperationSuccessrateBean> successrateBeans) {
paramMap.put(operationType + "_OPERATION_SUCCESSRATE_SET", new JRBeanCollectionDataSource(
successrateBeans));
paramMap.put(operationType + "_OPERATION_SUCCESSRATE_ORDERS_SET",
new JRBeanCollectionDataSource(successrateBeans));
}
jrxml:定义数据集和参数
<subDataset name="loadOperationSuccesrateSet" uuid="247b3e44-ef98-45f4-a909-e8b5678acc8f">
<field name="week" class="java.lang.Integer"/>
<field name="totalOrders" class="java.lang.Integer"/>
<field name="successrate" class="java.lang.Double"/>
</subDataset>
<subDataset name="loadOperationSuccesrateOrdersSet" uuid="247b3e44-ef98-45f4-a909-e8b5678acc8f">
<field name="week" class="java.lang.Integer"/>
<field name="totalOrders" class="java.lang.Integer"/>
<field name="successrate" class="java.lang.Double"/>
</subDataset>
<parameter name="LOAD_OPERATION_SUCCESSRATE_SET" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource" isForPrompting="false"/>
<parameter name="LOAD_OPERATION_SUCCESSRATE_ORDERS_SET" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource" isForPrompting="false"/>
jrxml:多图表
<multiAxisChart>
<chart evaluationTime="Report">
<reportElement x="0" y="41" width="550" height="200" uuid="5078c050-dd35-43db-bf30-d04152672bd6"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend/>
</chart>
<multiAxisPlot>
<plot/>
<axis position="rightOrBottom">
<lineChart>
<chart evaluationTime="Report">
<reportElement positionType="Float" x="0" y="25" width="270" height="175" backcolor="#FFFFFF" uuid="013d7a7d-2280-46d0-8d44-d537d062a182"/>
<chartTitle color="#000000"/>
<chartSubtitle color="#000000"/>
<chartLegend textColor="#000000" backgroundColor="#FFFFFF"/>
</chart>
<categoryDataset>
<dataset>
<datasetRun subDataset="loadOperationSuccesrateSet" uuid="53426928-1245-4443-97da-509b00ba1f98">
<dataSourceExpression><![CDATA[$P{LOAD_OPERATION_SUCCESSRATE_SET}]]></dataSourceExpression>
</datasetRun>
</dataset>
<categorySeries>
<seriesExpression><![CDATA["Success rate"]]></seriesExpression>
<categoryExpression><![CDATA[$F{week}]]></categoryExpression>
<valueExpression><![CDATA[$F{successrate}]]></valueExpression>
</categorySeries>
</categoryDataset>
<linePlot>
<plot/>
<categoryAxisFormat>
<axisFormat/>
</categoryAxisFormat>
<valueAxisLabelExpression><![CDATA["Success rate"]]></valueAxisLabelExpression>
<valueAxisFormat>
<axisFormat labelColor="#000000" tickLabelColor="#000000" tickLabelMask="#0%" axisLineColor="#000000">
<labelFont/>
</axisFormat>
</valueAxisFormat>
<rangeAxisMinValueExpression><![CDATA[0]]></rangeAxisMinValueExpression>
<rangeAxisMaxValueExpression><![CDATA[1]]></rangeAxisMaxValueExpression>
</linePlot>
</lineChart>
</axis>
<axis>
<barChart>
<chart evaluationTime="Report">
<reportElement x="0" y="0" width="0" height="0" backcolor="#FFFFFF" uuid="15a15c89-a2d4-4971-b4b3-1c5ac224a91e"/>
<chartTitle color="#000000"/>
<chartSubtitle color="#000000"/>
<chartLegend textColor="#000000" backgroundColor="#FFFFFF"/>
</chart>
<categoryDataset>
<dataset>
<datasetRun subDataset="loadOperationSuccesrateOrdersSet" uuid="4d001c74-1fde-47cd-b525-85d828d6ccf2">
<dataSourceExpression><![CDATA[$P{LOAD_OPERATION_SUCCESSRATE_ORDERS_SET}]]></dataSourceExpression>
</datasetRun>
</dataset>
<categorySeries>
<seriesExpression><![CDATA["TotalOrders"]]></seriesExpression>
<categoryExpression><![CDATA[$F{week}]]></categoryExpression>
<valueExpression><![CDATA[$F{totalOrders}]]></valueExpression>
</categorySeries>
</categoryDataset>
<barPlot>
<plot/>
<itemLabel/>
<categoryAxisFormat>
<axisFormat/>
</categoryAxisFormat>
<valueAxisLabelExpression><![CDATA["# Orders"]]></valueAxisLabelExpression>
<valueAxisFormat>
<axisFormat labelColor="#000000" tickLabelColor="#000000" tickLabelMask="# ##0" axisLineColor="#000000">
<labelFont/>
</axisFormat>
</valueAxisFormat>
<rangeAxisMinValueExpression><![CDATA[0]]></rangeAxisMinValueExpression>
</barPlot>
</barChart>
</axis>
</multiAxisPlot>
</multiAxisChart>
当我在没有多轴图表的情况下运行我的代码时,只是为了创建彼此相邻的2个图,它创建就好了。所以我假设数据被正确地传递给报告。
我使用的相关库是:
答案 0 :(得分:0)
洛伦茨,我有同样的问题。 缺少图表的原因是我直接在报告中传递了net.sf.jasperreports.engine.data.JRBeanCollectionDataSource作为参数。 显然,要使其正常工作,您必须传递一个列表:
<parameter name="FIRST_DATA_SOURCE" class="java.util.List" isForPrompting="false"/>
<parameter name="SECOND_DATA_SOURCE" class="java.util.List" isForPrompting="false"/>
,然后在报告内创建JRBeanCollectionDataSource:
<dataset>
<datasetRun subDataset="YOUR_SUBDATASET" uuid="a5941ba5-2088-4a31-8236-64704b54d979">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{FIRST_DATA_SOURCE})]]></dataSourceExpression>
</datasetRun>
</dataset>
在您引用的帖子中,它是通过这种方式使用的,并且有效!