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>
我无法在 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>