docs: private void setExpressionForPrecalculatedTotalValue(
  			DJCrosstabColumn[] auxCols, DJCrosstabRow[] auxRows, JRDesignExpression measureExp, DJCrosstabMeasure djmeasure,
  			DJCrosstabColumn crosstabColumn, DJCrosstabRow crosstabRow, String meausrePrefix) {
  
  		String rowValuesExp = "new Object[]{";
  		String rowPropsExp = "new String[]{";
  		for (int i = 0; i < auxRows.length; i++) {
  			if (auxRows[i].getProperty()== null)
  				continue;
  			rowValuesExp += "$V{" + auxRows[i].getProperty().getProperty() +"}";
  			rowPropsExp += "\"" + auxRows[i].getProperty().getProperty() +"\"";
  			if (i+1<auxRows.length && auxRows[i+1].getProperty()!= null){
  				rowValuesExp += ", ";
  				rowPropsExp += ", ";
  			}
  		}
  		rowValuesExp += "}";
  		rowPropsExp += "}";
  
  		String colValuesExp = "new Object[]{";
  		String colPropsExp = "new String[]{";
  		for (int i = 0; i < auxCols.length; i++) {
  			if (auxCols[i].getProperty()== null)
  				continue;
  			colValuesExp += "$V{" + auxCols[i].getProperty().getProperty() +"}";
  			colPropsExp += "\"" + auxCols[i].getProperty().getProperty() +"\"";
  			if (i+1<auxCols.length && auxCols[i+1].getProperty()!= null){
  				colValuesExp += ", ";
  				colPropsExp += ", ";
  			}
  		}
  		colValuesExp += "}";
  		colPropsExp += "}";
  
  		String measureProperty = meausrePrefix + djmeasure.getProperty().getProperty();
  		String expText = "((("+DJCRosstabMeasurePrecalculatedTotalProvider.class.getName()+")$P{crosstab-measure__"+measureProperty+"_totalProvider}).getValueFor( "
  		+ colPropsExp +", "
  		+ colValuesExp +", "
  		+ rowPropsExp
  		+ ", "
  		+ rowValuesExp
  		+" ))";
  
  		if (djmeasure.getValueFormatter() != null){
  
  			String fieldsMap = ExpressionUtils.getTextForFieldsFromScriptlet();
  			String parametersMap = ExpressionUtils.getTextForParametersFromScriptlet();
  			String variablesMap = ExpressionUtils.getTextForVariablesFromScriptlet();
  
  			String stringExpression = "((("+DJValueFormatter.class.getName()+")$P{crosstab-measure__"+measureProperty+"_vf}).evaluate( "
  				+ "("+expText+"), " + fieldsMap +", " + variablesMap + ", " + parametersMap +" ))";
  
  			measureExp.setText(stringExpression);
  			measureExp.setValueClassName(djmeasure.getValueFormatter().getClassName());
  		} else {
  
  //			String expText = "((("+DJCRosstabMeasurePrecalculatedTotalProvider.class.getName()+")$P{crosstab-measure__"+djmeasure.getProperty().getProperty()+"_totalProvider}).getValueFor( "
  //			+ colPropsExp +", "
  //			+ colValuesExp +", "
  //			+ rowPropsExp
  //			+ ", "
  //			+ rowValuesExp
  //			+" ))";
  //
  			log.debug("text for crosstab total provider is: " + expText);
  
  			measureExp.setText(expText);
  //			measureExp.setValueClassName(djmeasure.getValueFormatter().getClassName());
  			String valueClassNameForOperation = ExpressionUtils.getValueClassNameForOperation(djmeasure.getOperation(),djmeasure.getProperty());
  			measureExp.setValueClassName(valueClassNameForOperation);
  		}
  
  	}