Jasperreports 使用来自 XML 的 2 个不同数据集的 2 个系列创建图表

Jasperreports create chart with 2 series from 2 different datasets from XML

我无法在 Jaspersoft Studio 中将两个系列添加到我的图表中。这是我的 XML:

的简化版本
<test>
    <result name="A">
        <point x="10" y="-5"/>
        <point x="20" y="-1"/>
        <point x="30" y="3"/>
    </result>
    <result name="B">
        <point x="11" y="-5"/>
        <point x="19" y="-1"/>
        <point x="25" y="3"/>
    </result>
</test>

所以我想在我的图表上放 2 个系列,一个用于结果 A,一个用于结果 B。我为 A 创建了一个数据集:

<subDataset name="res_a">
        <property name="com.jaspersoft.studio.data.defaultdataadapter" value="XMLAdapter"/>
        <queryString language="xPath">
            <![CDATA[/test/result[@name = 'A'/point]]]>
        </queryString>
        <field name="x_a" class="java.lang.String">
            <fieldDescription><![CDATA[@x]]></fieldDescription>
        </field>
        <field name="y_a" class="java.lang.String">
            <fieldDescription><![CDATA[@y]]></fieldDescription>
        </field>
</subDataset>

并将其添加到图表中:

<xyLineChart>
        <chart evaluationTime="Report">
            <reportElement x="0" y="0" width="780" height="340"/>
        </chart>
        <xyDataset>
            <dataset>
                <datasetRun subDataset="res_a">
                    <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/test/result[@name = 'A']/point")]]></dataSourceExpression>
                </datasetRun>
            </dataset>
            <xySeries>
                <seriesExpression><![CDATA["RESULTS A"]]></seriesExpression>
                <xValueExpression><![CDATA[Double.parseDouble( $F{x})]]></xValueExpression>
                <yValueExpression><![CDATA[Double.parseDouble( $F{y})]]></yValueExpression>
            </xySeries>
        </xyDataset>
    [...]
</xyLineChart>

这很好用并且在图表上显示了一条曲线。但是如何将其他结果添加到同一个图表中呢?我是否创建第二个数据集?图表外还是图表内?我尝试了几种方法,但都没有用,每次都给我错误。

感谢任何帮助!

一个图表不能使用两个数据集。您可以做的是对结果 A 和结果 B 使用单个数据集。

为此,您首先需要 select A 和 B 节点:

<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/test/result[@name = 'A' or @name = 'B']/point")]]></dataSourceExpression>

然后在子数据集中为结果名称创建一个字段:

<field name="result" class="java.lang.String">
    <fieldDescription><![CDATA[../@name]]></fieldDescription>
</field>

然后将结果字段用作图表系列:

<seriesExpression><![CDATA["RESULTS " + $F{result}]]></seriesExpression>