Por que recebo vários gráficos em vez de um gráfico com a série?

John Kim:

Após a resposta a partir daqui: Como criar vários gráficos de mesmo tipo, mas com diferentes dataseries usando JRBeanCollectionDatasource em JasperReports

Eu consegui pelo menos criar gráficos com a minha lista aninhada. Meu java objeto:

public class PoolUserLoginsVO {
    private int userLogins;
    private String poolId;
    private Date date;

    //constructor + getter/setters

userLogins é o valor da coordenada y, o gráfico é um gráfico timeseries de modo a coordenada x é a data. poolId é a série em que as coordenadas pertencem.

Eu obter a lista de valores que eu preciso para cada série, e uma vez que existem várias séries, eu tenho uma lista de uma lista que eu passar para o mapa parâmetro para Jasper Reports.

Meus Jasper Reports:

jaspe principal (todo o documento é bastante longo para que apenas a parte relevante):

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.10.0.final using JasperReports Library version 6.10.0-unknown  -->
<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="test" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="fbaeab5e-6793-456e-9567-e0c5af982904">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <parameter name="poolLogins" class="java.util.List"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="223">
            <subreport>
                <reportElement x="0" y="0" width="550" height="200" uuid="9f8a2d4a-1d90-4f88-a08c-1ea2604360c5"/>
                <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{poolLogins})]]></dataSourceExpression>
                <subreportExpression><![CDATA["sub_charts.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </detail>
</jasperReport>

$ P {poolLogins} é um List<List<PoolUserLoginsVO>.

sub_charts.jasper:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.10.0.final using JasperReports Library version 6.10.0-unknown  -->
<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="sub_charts" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="bc8c76ba-0b85-4522-bf67-4c62ae87202b">
    <field name="_THIS" class="java.util.List">
        <fieldDescription><![CDATA[_THIS]]></fieldDescription>
    </field>
    <detail>
        <band height="237" splitType="Stretch">
            <subreport>
                <reportElement x="0" y="20" width="540" height="200" uuid="1ec1f733-ffee-46f3-859c-f774e5277d19"/>
                <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{_THIS})]]></dataSourceExpression>
                <subreportExpression><![CDATA["sub_chart.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </detail>
</jasperReport>

sub_chart.jasper:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.10.0.final using JasperReports Library version 6.10.0-unknown  -->
<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="sub_chart" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="4ce41625-c60b-4759-acbe-5fe12a013fb2">
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="userLogins" class="java.lang.Integer"/>
    <field name="poolId" class="java.lang.String"/>
    <field name="date" class="java.util.Date"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="210" splitType="Stretch">
            <timeSeriesChart>
                <chart evaluationTime="Report">
                    <reportElement x="0" y="20" width="540" height="180" uuid="874eee5e-1e71-4870-906b-ef71ef91d274"/>
                    <chartTitle/>
                    <chartSubtitle/>
                    <chartLegend/>
                </chart>
                <timeSeriesDataset>
                    <timeSeries>
                        <seriesExpression><![CDATA[$F{poolId}]]></seriesExpression>
                        <timePeriodExpression><![CDATA[$F{date}]]></timePeriodExpression>
                        <valueExpression><![CDATA[$F{userLogins}.intValue()]]></valueExpression>
                    </timeSeries>
                </timeSeriesDataset>
                <timeSeriesPlot>
                    <plot/>
                    <timeAxisFormat>
                        <axisFormat labelColor="#000000" tickLabelColor="#000000" axisLineColor="#000000"/>
                    </timeAxisFormat>
                    <valueAxisFormat>
                        <axisFormat labelColor="#000000" tickLabelColor="#000000" axisLineColor="#000000"/>
                    </valueAxisFormat>
                </timeSeriesPlot>
            </timeSeriesChart>
        </band>
    </detail>
</jasperReport>

O PDF e os gráficos gerar com sucesso. Mas há dois problemas:

1) Eu recebo como 30 páginas de gráficos, mesmo que haja apenas 4 série. Cada série é duplicado exatamente 30 vezes (o número de coordenadas em cada série). Os gráficos gerados são todos embora correto.

2) Eu não quero gráficos separados. Quero todas as séries que estar em um único gráfico, com cores diferentes.

O que eu estou fazendo errado aqui?

Edit:

A Principal :

public class testmain {
    public static void main(String[] args) {
        int threshold = 30;
        List<List<PoolUserLoginsVO>> poolLogins = new ArrayList<>();
        List<PoolUserLoginsVO> userLogins = new ArrayList<>();
        for (int i = 0; i < threshold; ++i) {
            LocalDate localDate = LocalDate.now().minusDays(threshold - i - 1);
            Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
            PoolUserLoginsVO logins = new PoolUserLoginsVO(i, "pool1", date);
            userLogins.add(logins);
        }
        poolLogins.add(userLogins);

        List<PoolUserLoginsVO> userLogins2 = new ArrayList<>();

        for (int i = 0; i < threshold; ++i) {
            LocalDate localDate = LocalDate.now().minusDays(threshold - i - 1);
            Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
            PoolUserLoginsVO logins = new PoolUserLoginsVO(1, "pool2", date);
            userLogins2.add(logins);
        }
        poolLogins.add(userLogins2);

        List<PoolUserLoginsVO> userLogins3 = new ArrayList<>();
        for (int i = threshold; i > 0; --i) {
            LocalDate localDate = LocalDate.now().minusDays(threshold - i - 1);
            Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
            PoolUserLoginsVO logins = new PoolUserLoginsVO(i, "pool3", date);
            userLogins3.add(logins);
        }
        poolLogins.add(userLogins3);

        JRBeanCollectionDataSource vmsJRBean = new JRBeanCollectionDataSource(poolLogins);
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("poolLogins", poolLogins);

        File file = new File("report.pdf");
        try {
            FileOutputStream fop = new FileOutputStream(file);
            JasperPrint jasperPrint = JasperFillManager.fillReport("test.jasper", parameters, new JREmptyDataSource());
            JasperExportManager.exportReportToPdfStream(jasperPrint, fop);
            fop.flush();
            fop.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JRException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
John Kim:

Eu finalmente fixa-lo! Eu não deveria ter seguido a outra pergunta / resposta que eu ligado no OP. Essa pergunta eu acho que estava perguntando como criar vários gráficos, e eu queria apenas um gráfico, mas com todas as séries combinadas. I resolveu o problema por não colocar os meus dados em uma lista aninhada. Acabei de colocar todos os dados em um único 1 lista dimensional; uma vez que cada PoolUserLoginsVO já contém que poolId a que pertence, não havia nenhum ponto em ter uma lista aninhada para começar (a menos que eu queria vários gráficos para cada pool eu acho). Então eu passei em uma única lista, então modificado o relatório jasper principal para passar direto para o sub_chart.jasper vez de sub_charts.jasper (eu deletei sub_charts.jasper uma vez que já não era necessário). O resultado?

digite descrição da imagem aqui

Sucesso!

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=331621&siteId=1
Recomendado
Clasificación