Jasper Reports - 多轴图表 - 只有一个图表显示

时间:2017-08-25 14:30:45

标签: java charts jasper-reports

我试图创建一个多轴图表,其中一个图表显示条形图,另一个图表显示折线图。我发现多轴图表是这样做的,但是当我运行我的代码时,只显示一个图(图像提供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个图,它创建就好了。所以我假设数据被正确地传递给报告。

我使用的相关库是:

  • net.sf.jasperreports.engine-6.4.0.jar
  • jfreechart的-1.0.19.jar

1 个答案:

答案 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>

在您引用的帖子中,它是通过这种方式使用的,并且有效!