饼图显示错误的键值

Pie chart is showing wrong value for key

我正在开发一个程序来创建一个报告,其中包含存储在数据库中的不同人员的数据。

报告创建正确,但图表不正确。我试图展示职业的分布。

这是我的报告:

如你所见,所有职业的计数都是一样的。这是错误的,因为 Cantante 和 Profesor 出现了两次。

我在iReport中定义图表的方式如下:

如何解决?

看起来您正在使用 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

dataadapterJSS 的名称对于我的示例将是 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 属性 允许我们构建报告,即使使用 [= 计算的重复值64=]键表达式:

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

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

应用排序后,例如借助代码

<sortField name="profession"/>

我们会得到正确的结果: