plapla Posted February 9, 2009 Share Posted February 9, 2009 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 JRAbstractExtendedIncrementerFactoryIt 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; } } ; } Link to comment Share on other sites More sharing options...
meet_adnan04 Posted September 1, 2016 Share Posted September 1, 2016 Hi, I have one question about Matrix/Crosstab reports in JasperReports. I would like to show Departmentwise, which Salesmen, Clerks, Analysts and Managers are working. For example, see below table. There are multiple values in Measure column. Since, I am beginner and have no idea how to print multiple values in Measure field. I am getting single value means only name of one employee. Not all clerks and salemen are displayed. Even though I choosed 'Nothing' option in the wizard for Measure Field. I have got an idea somehow that need to implement custom incrementer class and that will be used inside property 'Incrementer Factory class'. But unfortunately, no idea how to start and write that custom class using 'JRAbstractExtendedIncrementer' and 'JRExtendedIncrementer' interfaces.Does anyone have any report sample using them or any other idea to display such information ?? Looking forward to your replies. CLERKMANAGERPRESIDENTANALYSTSALESMANACCOUNTINGMILLERCLARKKINGJAMESNullRESEARCHADAMSSMITHPETERJONESNullNullNullSALESJAMESBLAKENullNullALLENMARTINTURNERWARD Thank you. Regards,Eddie Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now