code: @Override
  	public List<Metric> transform(QueryContext queryContext, List<Metric> metrics, List<String> constants) {
  		SystemAssert.requireArgument(metrics != null, "Metric List cannot be null");
  		SystemAssert.requireArgument(constants != null && !constants.isEmpty(), "This Transform cannot be used without a constant");
  		if (metrics.isEmpty()) {
  			return metrics;
  		}
  
  		List<Metric> result = new ArrayList<Metric>();
  
  		if (constants.size() == 1) {
  			result = Arrays.asList(reduce(metrics, constants));
  		} else if (constants.size() == 2 && constants.get(1).toUpperCase().equals(FULLJOIN)) {
  			fulljoinIndicator = true;
  			constants.remove(1);
  			result = Arrays.asList(reduce(metrics, constants));
  		}else if (constants.size() == 2 && constants.get(1).toUpperCase().equals(INTERSECT)) { 
  			fulljoinIndicator = false;
  			constants.remove(1);
  			result = Arrays.asList(reduce(metrics, constants));	        
  		}else if (constants.size() > 1) {
  			result = mapping(metrics, constants);
  		}
  		return result;
  	}
docs: If constants is not null, apply mapping transform to metrics list. Otherwise, apply reduce transform to metrics list
  @param   metrics    list of metrics
  @param   constants  constants input
  
  @return  A list of metrics after mapping.