Variable problem

Recommended Posts

By: Matihost - matihost

Variable problem

2005-09-01 14:14

I have data:

2005-08-01 100

2005-08-01 200

2005-08-01 300

2005-08-02 50

2005-08-02 150

and i`d like get a report like this:

2005-08-01 20 %

2005-08-01 40 %

2005-08-01 40 %

2005-08-02 25 %

2005-08-02 75 %

Am using grouping and i`ve create a variable which is a sum of second column calculating for each group, but this field has strange value... (last two column are within one text field) for example:

2005-08-01 100 -- field 100 --- sum

2005-08-01 200 300

2005-08-01 300 600

2005-08-02 50 50

2005-08-02 150 200

last column is value of that variable calculating "Now", but if i change expression to calculating "Group" the result is

2005-08-01 300 -- field 600 --- sum

2005-08-01 300 600

2005-08-01 300 600

2005-08-02 150 200

2005-08-02 150 200

Solution is to evaluate field as now and variable sum as group in one expresion or save evaluated variable sum in some sort of other variable.... If somebody find solution to my problem, i would be appreciated.

By: jorge - sirion_oef

RE: Variable problem

2005-09-02 17:20

could you provide more details of what you want to do?

what calculation do you want to do? what are the exact formulas?

the data you posted is just an example or is real data?

By: Matihost - matihost

RE: Variable problem

2005-09-04 03:26

Yes, this the shortcut of real data.

I have two fields \$F{DATE} and \$F{VALUE} sorted by DATE.

(select DATE, VALUE from blabla order by DATE).

I`ve create a group DATE_GROUP and create variables VALUES_SUM and PERCENT. I`d like to display percent value at details band. So I created a variable sum and i divide field value by sum. Textfield with expresion \$V{PERCENT} in details section with calculating "group" returns only correct result for last item, calculating "now" returns incorrect variable VALUES_SUM as sum of previous items, so percent is incorrect also.

I`m using IReport 0.5.1.

Report xml:

- <jasperReport name="percent_simple" columnCount="1" printOrder="Vertical" orientation="Portrait" pageWidth="595" pageHeight="842" columnWidth="535" columnSpacing="0" leftMargin="30" rightMargin="30" topMargin="20" bottomMargin="20" whenNoDataType="NoPages" isTitleNewPage="false" isSummaryNewPage="false" language="java" isFloatColumnFooter="false" whenResourceMissingType="Null">

<property name="ireport.scriptlethandling" value="2" />

<import value="java.util.*" />

<import value="net.sf.jasperreports.engine.*" />

<import value="net.sf.jasperreports.engine.data.*" />

- <queryString>

- <![CDATA[ select date,value from simple order by date

]]>

</queryString>

<field name="date" class="java.lang.String" />

<field name="value" class="java.lang.Integer" />

- <variable name="VALUES_SUM" class="java.lang.Integer" resetType="Group" resetGroup="DATE_GROUP" calculation="Sum" incrementType="None">

- <variableExpression>

- <![CDATA[ \$F{value}

]]>

</variableExpression>

</variable>

- <variable name="PERCENT" class="java.lang.Double" resetType="Report" calculation="Nothing" incrementType="None">

- <variableExpression>

- <![CDATA[ new Double(((double)\$F{value}.intValue())/\$V{VALUES_SUM}.intValue())

]]>

</variableExpression>

</variable>

- <group name="DATE_GROUP" isStartNewColumn="false" isStartNewPage="false" isResetPageNumber="false" isReprintHeaderOnEachPage="false" minHeightToStartNewPage="0">

- <groupExpression>

- <![CDATA[ \$F{date}

]]>

</groupExpression>

- <band height="50" isSplitAllowed="true">

<reportElement mode="Transparent" x="139" y="29" width="100" height="18" forecolor="#000000" backcolor="#FFFFFF" key="textField" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false" />

<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000" />

- <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single" isStyledText="false">

<font fontName="Arial" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded="false" pdfEncoding="Cp1252" isStrikeThrough="false" />

</textElement>

- <textFieldExpression class="java.lang.Integer">

- <![CDATA[ \$V{VALUES_SUM}

]]>

</textFieldExpression>

</textField>

</band>

- <groupFooter>

<band height="50" isSplitAllowed="true" />

</groupFooter>

</group>

- <background>

<band height="0" isSplitAllowed="true" />

</background>

- <title>

<band height="0" isSplitAllowed="true" />

</title>

<band height="0" isSplitAllowed="true" />

<band height="0" isSplitAllowed="true" />

- <detail>

- <band height="18" isSplitAllowed="true">

<reportElement mode="Transparent" x="32" y="0" width="100" height="18" forecolor="#000000" backcolor="#FFFFFF" key="textField" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false" />

<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000" />

- <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single" isStyledText="false">

<font fontName="Arial" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded="false" pdfEncoding="Cp1252" isStrikeThrough="false" />

</textElement>

- <textFieldExpression class="java.lang.String">

- <![CDATA[ \$F{date}

]]>

</textFieldExpression>

</textField>

<reportElement mode="Transparent" x="132" y="0" width="100" height="18" forecolor="#000000" backcolor="#FFFFFF" key="textField" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false" />

<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000" />

- <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single" isStyledText="false">

<font fontName="Arial" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded="false" pdfEncoding="Cp1252" isStrikeThrough="false" />

</textElement>

- <textFieldExpression class="java.lang.Integer">

- <![CDATA[ \$F{value}

]]>

</textFieldExpression>

</textField>

<reportElement mode="Transparent" x="233" y="0" width="100" height="18" forecolor="#000000" backcolor="#FFFFFF" key="textField" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false" />

<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000" />

- <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single" isStyledText="false">

<font fontName="Arial" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded="false" pdfEncoding="Cp1252" isStrikeThrough="false" />

</textElement>

- <textFieldExpression class="java.lang.Double">

- <![CDATA[ \$V{PERCENT}

]]>

</textFieldExpression>

</textField>

<reportElement mode="Transparent" x="336" y="0" width="79" height="18" forecolor="#000000" backcolor="#FFFFFF" key="textField-1" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false" />

<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000" />

- <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single" isStyledText="false">

<font fontName="Arial" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded="false" pdfEncoding="Cp1252" isStrikeThrough="false" />

</textElement>

- <textFieldExpression class="java.lang.String">

- <![CDATA[ \$F{value} +" " +\$V{VALUES_SUM}

]]>

</textFieldExpression>

</textField>

<reportElement mode="Transparent" x="424" y="0" width="100" height="18" forecolor="#000000" backcolor="#FFFFFF" key="textField-2" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false" />

<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000" />

- <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single" isStyledText="false">

<font fontName="Arial" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded="false" pdfEncoding="Cp1252" isStrikeThrough="false" />

</textElement>

- <textFieldExpression class="java.lang.String">

- <![CDATA[ \$F{value} +" " +\$V{VALUES_SUM}

]]>

</textFieldExpression>

</textField>

</band>

</detail>

- <columnFooter>

<band height="0" isSplitAllowed="true" />

</columnFooter>

- <pageFooter>

<band height="0" isSplitAllowed="true" />

</pageFooter>

- <summary>

<band height="0" isSplitAllowed="true" />

</summary>

</jasperReport>

By: jorge - sirion_oef

RE: Variable problem

2005-09-05 08:44

try setting VALUE_SUM and PERCENT evaluation time to group, and a textfield fieldvalue/sum evaluation time to now

By: Matihost - matihost

RE: Variable problem

2005-09-05 10:55

Maybe I don`t understand, but variable doesn`t contain evaluation time parameter, only textfield contains. I`ve tried to set reset type "group" for VALUE_SUM and PERCENT variables, and texfield evaluation time set to now but result is that, variable VALUE_SUM with evaluating now contains only sum of previous items. For example:

200 100 %

300 60 %

100 17 %

because variable VALUE_SUM with evaluating "now" are:

200

500

600

The result is that, only last percent value is correct, because only last sum is sum of all items.

Evaluating "group" for textfield value/sum has similar problem: sum is ok, but value is last value of the group.

The solution is to divide two variables evaluating in different time. Field value : now and variable SUM_VALUE to group, but it is impossible in jasper probably :(

By: jorge - sirion_oef

RE: Variable problem

2005-09-06 17:02

why impossible?

just do that, create two variables managin the same field, but with diferents evaluating times

By: Matihost - matihost

RE: Variable problem

2005-09-07 01:28

I`ve created variable

<variable name="VALUES_SUM" class="java.lang.Integer" resetType="Group" resetGroup="DATE_GROUP" calculation="Sum">

<variableExpression><![CDATA[

\$F{value}]]></variableExpression>

</variable>

and textfield:

...

<textFieldExpression class="java.lang.Double"><![CDATA[new Double((double)\$F{value}.intValue()/\$V{VALUES_SUM}.doubleValue())]]></textFieldExpression>

</textField>

and result is that, i described in previous message.

Maybe I`m doing the same error. Please correct me. I don`t know to change evaluating time in the same textfield.

Mati

By: jorge - sirion_oef

RE: Variable problem

2005-09-07 17:36

could you send me the .jrxml file? i can open the text that yu posted

eisenrich@hotmail.com

By: Matihost - matihost

RE: Variable problem

2005-09-13 07:37

If you can test it, i`ll be appreciated.

Mati

By: jorge - sirion_oef

RE: Variable problem

2005-09-14 12:08

sorry, i have been very busy these days

i still don?t understand what you want, could you post sometingh like:

record 1:

value = , VALUES_SUM= , PERCENT=

(and all the output data that must appear in the details section for this record)

record 2: ...

By: Matihost - matihost

RE: Variable problem

2005-09-14 14:10

I want to get:

details1:

value=100 sum=600 percent=16 %

detail2:

value=200 sum=600 percent=33 %

detail3:

value=300 sum=600 percent=50 %

But i get (variables SUM and PERCENT evaluation time "now" or "band")

details1:

value=100 sum=100 percent=100 %

detail2:

value=200 sum=300 percent=66 %

detail3:

value=300 sum=600 percent=50 %

or (variables SUM and PERCENT evaluation time "group"):

details1:

value=300 sum=600 percent=50 %

detail2:

value=300 sum=600 percent=50 %

detail3:

value=300 sum=600 percent=50 %

By: jorge - sirion_oef

RE: Variable problem

2005-09-14 17:21

select date,value, SUM(value) AS Total from simple group by date

when you need the total for the group use \$F{Total}

in your report are 5 textfields, what values you want for them?

record1 (from left to right)

field1=

field2=

field3=

field4=

field5=

value=

VALUES_SUM=

PERCENT=

record2....

By: Matihost - matihost

RE: Variable problem

2005-09-15 02:08

I solve this problem in the same way (sum in sql), and thank You for the answer, but i`m trying to find another solution, because this is expensive solution for my reports :(

Is there any way to evaluate two or more variables in different evaluation scopes ??

Or is there way to get textfield value and use it in another textfield expression??

Mati

By: jorge - sirion_oef

RE: Variable problem

2005-09-15 09:01

if your data no changes often, try creating a temp table that only contains the totals.

about your two questions, at least i don?t know how to do that, sorry

By: Matihost - matihost

RE: Variable problem

2005-09-16 01:09

Thanks for Your help and time. I think solving these questions would be nice enhacement in jasper.

Thank You again

Mati

• Replies 0
• Created