I m trying to instantiate percentage without jrxml. the users wants the percentage of cell not null in a column. Im working with a extreme component table and with jasper i want a pdf . I have writed a new class which extends JRAbstractExtendedIncrementerFactory It works well if i want to obtain the percent of cell not null in one column , but in two column it s not ok .Someone can help me, please ? Thanks Code:import java.math.BigDecimal;import java.sql.Timestamp;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import net.sf.jasperreports.engine.fill.AbstractValueProvider;import net.sf.jasperreports.engine.fill.JRAbstractExtendedIncrementer;import net.sf.jasperreports.engine.fill.JRAbstractExtendedIncrementerFactory;import net.sf.jasperreports.engine.fill.JRCalculable;import net.sf.jasperreports.engine.fill.JRDefaultIncrementerFactory;import net.sf.jasperreports.engine.fill.JRExtendedIncrementer; /** * nouvelleclasse pour implémenter le pourcentage non nulls * * */public class CPJRPourcentageIncrementerFactory extends JRAbstractExtendedIncrementerFactory{ protected static final Long ZERO = new Long(0); public JRExtendedIncrementer getExtendedIncrementer(byte calculation){ if ( calculation == CPJRVariable.CALCULATION_POURCENTAGEDISTINCT ) { return INCREMENTOR; } else { throw new UnsupportedOperationException( "CPJRLongIncrementerFactory can only do pourcenbtage distinct calculations" ); } } public static JRExtendedIncrementer INCREMENTOR = new JRAbstractExtendedIncrementer() { /** *on veut avoir (decomptenonnull/rowcount) */ public BigDecimal decomptenonnullValue ; public BigDecimal countValue ; public Object className =null ; public Object increment( JRCalculable variable, Object expressionValue, AbstractValueProvider valueProvider ) { Object result = variable.getIncrementedValue(); BigDecimal BigDecimalZero = new BigDecimal("0"); BigDecimal BigDecimalUn = new BigDecimal("1"); if (decomptenonnullValue ==null) { decomptenonnullValue=BigDecimalZero; } if (countValue ==null) { countValue=BigDecimalZero; } if (expressionValue != null) //|| expressionValue!=CPJRLongIncrementerFactory.ZERO) { className = expressionValue.getClass(); decomptenonnullValue= decomptenonnullValue.add(BigDecimalUn) ; } countValue=countValue.add(BigDecimalUn) ; if (countValue.longValue()>0 &&className!=null){ System.out.println(decomptenonnullValue); System.out.println(countValue); System.out.println("(decomptenonnullValue/ countValue)*100"); BigDecimal result1 = new BigDecimal("0"); result1 = (decomptenonnullValue.divide(countValue,2,BigDecimal.ROUND_HALF_UP)); result1=result1.multiply(new BigDecimal("100")); System.out.println((result1)); if (java.math.BigDecimal.class.equals(className)) { result= result1; } else if ( java.lang.Number.class.equals(className) || java.lang.Double.class.equals(className) ) { result= result1.doubleValue(); } else if (java.lang.Float.class.equals(className)) { result= result1.floatValue(); } else if (java.lang.Long.class.equals(className)) { result= (result1.longValue()); } else if (java.lang.Integer.class.equals(className)) { result= result1.intValue(); } else if (java.lang.Short.class.equals(className)) { result= result1.shortValue();//ou exact?? } else if (java.lang.Byte.class.equals(className)) { result= result1.byteValue();//ou exact?? } else if (java.lang.Boolean.class.equals(className)) { result= result1.intValue();//ou exact?? result=new Boolean(result.toString()); } else if (java.lang.String.class.equals(className)) { result= result1.intValue();//ou exact?? result=new String(result.toString()); } else if (java.sql.Timestamp.class.equals(className)) { result= result1.intValue();//ou exact?? //SimpleDateFormat uneDateFormat = new SimpleDateFormat("dd"); //result=uneDateFormat.parse(result.toString()); result =new Timestamp(result1.longValue()); } } return result; } public Object initialValue() { decomptenonnullValue =new BigDecimal(0); countValue=new BigDecimal(0); return CPJRPourcentageIncrementerFactory.ZERO; } } ; }