3

I need multiple queries in my report so i added a new dataset. The problem is i can't use fields of new dataset in my report, the error is: field does not exists.

So, how can i have multiple query in my report(to print fields of different table) without create a subreport for each field?

Thanks.

Alex K
  • 22,315
  • 19
  • 108
  • 236
blow
  • 12,811
  • 24
  • 75
  • 112
  • You can see the @GenericJon answer for [this question](http://stackoverflow.com/q/7482412/876298) – Alex K Dec 29 '11 at 06:48

1 Answers1

1

Unfortunately this isn't how iReport works. You need to get all your data into one dataset to use the fields side by side. See @GenericJon's detailed answer on using a datasetRun where your fields are used as input parameters to define another dataset.

If you really want the parameters can be used to pass a field for output in a datasetRun. This outputs Dataset1>Field1 / Dataset2>Field2.

<subDataset name="TotalUsers">
    <parameter name="Users" class="java.lang.Integer" isForPrompting="false"/>
    <parameter name="Date" class="java.util.Date" isForPrompting="false"/>
    <queryString language="SQL">
        <![CDATA[CALL GetTotalUsersAtDate($P{Date})]]>
    </queryString>
    <field name="TotalUsers" class="java.lang.Long"/>
</subDataset>
...

<componentElement>
    <reportElement x="0" y="78" width="555" height="16"/>
    <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
        <datasetRun subDataset="TotalUsers">
            <parametersMapExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}]]></parametersMapExpression>
            <datasetParameter name="Users">
                <datasetParameterExpression><![CDATA[$F{MusicSubscribers}]]></datasetParameterExpression>
            </datasetParameter>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
        </datasetRun>
        <jr:listContents height="16" width="555">
            <textField pattern="#,##0.00 %" isBlankWhenNull="true">
                <reportElement style="table_TD" x="475" y="0" width="80" height="16"/>
                <textElement/>
                <textFieldExpression><![CDATA[$P{Users}.doubleValue()/$F{TotalUsers}.doubleValue()]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement style="table_TD" x="0" y="0" width="475" height="16"/>
                <textElement textAlignment="Left" markup="none"/>
                <text><![CDATA[Proportion of total users]]></text>
            </staticText>
        </jr:listContents>
    </jr:list>
</componentElement>

I would go further to suggest you do as much of the math and collating outside of iReport too, i.e. use stored procedures if your data source is a database.

KCD
  • 9,873
  • 5
  • 66
  • 75