饼图显示了错误的键值

时间:2018-11-19 08:29:07

标签: jasper-reports pie-chart

我正在开发一个程序,该程序使用存储在数据库中的不同人员的数据创建报告。

报表创建良好,但是图表不正确。我试图显示职业分布。

这是我的报告:

enter image description here

如您所见,所有职业都有相同的人数。这是错误的,因为Cantante和Profesor出现了两次。

我通过以下方式在iReport中定义图表:

enter image description here

如何解决?

1 个答案:

答案 0 :(得分:1)

看起来您正在使用 net.sf.jasperreports.chart.pie.ignore.duplicated.key 属性,但是忘记了对数据集的数据进行排序。

如果在 JasperReports 中使用组,则应始终记住有关数据排序的信息。

您所需要做的只是按照 专业 字段对数据进行排序。

使用 Jaspersoft Studio 7.1.0

构建的示例

数据源

例如,

使用简单的 csv数据源就足够了。

professions.csv 文件的内容非常简单。第一行用于字段名称。

name,age,profession
Miguel,25,Professor
Toni,22,Engineer
Josefa,34,Singer
Andres,27,Mechanic
Jony,41,Professor
Lola,33,Singer

JSS 中, dataadapter 的名称为 professions.csv

报告模板 jrxml 文件

我使用饼图上的主要数据集来显示信息。

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="NotSortedDataChart" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="09483b77-da8e-4dbb-a87d-ae46c27df140">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="professions.csv"/>
    <property name="net.sf.jasperreports.chart.pie.ignore.duplicated.key" value="true"/>
    <field name="name" class="java.lang.String"/>
    <field name="age" class="java.lang.String"/>
    <field name="profession" class="java.lang.String"/>
    <sortField name="profession"/>
    <group name="ProfessionGroup">
        <groupExpression><![CDATA[$F{profession}]]></groupExpression>
    </group>
    <columnHeader>
        <band height="15" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="120" height="15" uuid="edda065f-1a67-4f94-a2e9-1fc0042e4d32"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font isBold="true"/>
                </textElement>
                <text><![CDATA[Name]]></text>
            </staticText>
            <staticText>
                <reportElement x="120" y="0" width="145" height="15" uuid="95bf7063-fe77-48d6-924a-e0028b8ec0c4"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font isBold="true"/>
                </textElement>
                <text><![CDATA[Age]]></text>
            </staticText>
            <staticText>
                <reportElement x="245" y="0" width="125" height="15" uuid="97f91177-abd3-416d-abb1-e8692f96dc5c"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font isBold="true"/>
                </textElement>
                <text><![CDATA[Profession]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="15" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="120" height="15" uuid="b10df174-e36e-402d-ad52-4aa15dbebd49"/>
                <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="120" y="0" width="125" height="15" uuid="5c66bca9-34af-49a6-a4fe-87c4e945f31b"/>
                <textFieldExpression><![CDATA[$F{age}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="245" y="0" width="145" height="15" uuid="d169f529-349c-4c84-b697-680048eabd94"/>
                <textFieldExpression><![CDATA[$F{profession}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
    <summary>
        <band height="240" splitType="Stretch">
            <pieChart>
                <chart evaluationTime="Report">
                    <reportElement x="50" y="40" width="200" height="200" uuid="7454b149-6176-4070-8f9b-dd10bbd8f47a"/>
                    <chartTitle/>
                    <chartSubtitle/>
                    <chartLegend/>
                </chart>
                <pieDataset>
                    <keyExpression><![CDATA[$F{profession}]]></keyExpression>
                    <valueExpression><![CDATA[$V{ProfessionGroup_COUNT}]]></valueExpression>
                    <labelExpression><![CDATA[$V{ProfessionGroup_COUNT}.toString()]]></labelExpression>
                </pieDataset>
                <piePlot>
                    <plot/>
                    <itemLabel/>
                </piePlot>
            </pieChart>
        </band>
    </summary>
</jasperReport>

此示例的主要功能是:

如果专业 字段的不是全部值是唯一,您将收到错误消息:

net.sf.jasperreports.engine.JRRuntimeException: Key Professor is duplicated in pie dataset.

使用 net.sf.jasperreports.chart.pie.ignore.duplicated.key 属性,即使使用 key 表达式计算出的重复值,我们也可以构建报告:

<keyExpression><![CDATA[$F{profession}]]></keyExpression>
<valueExpression><![CDATA[$V{ProfessionGroup_COUNT}]]></valueExpression>
<labelExpression><![CDATA[$V{ProfessionGroup_COUNT}.toString()]]></labelExpression>

如果不对数据进行排序(只需从 jrxml 中删除<sortField name="profession"/>行),结果将是错误的,就像您的屏幕截图所示:

The result with wrong sorting

应用排序后,例如在代码的帮助下

<sortField name="profession"/>

我们将得到正确的结果:

The right result after applying sorting