code: protected Crosstab<Serializable> createMasterCrosstab(Collection<? extends R> results) {
          final R firstResult = results.iterator().next();
          final Crosstab<?> firstCrosstab = firstResult.getCrosstab();
  
          final Class<?> valueClass = firstCrosstab.getValueClass();
          final CrosstabDimension dimension1 = firstCrosstab.getDimension(0);
          final CrosstabDimension dimension2 = firstCrosstab.getDimension(1);
  
          @SuppressWarnings({ "unchecked", "rawtypes" })
          final Crosstab<Serializable> masterCrosstab = new Crosstab(valueClass, dimension1, dimension2);
          return masterCrosstab;
      }
docs: Builds the master crosstab, including all dimensions and categories that
  will be included in the final result.
  
  By default this method will use the first result's crosstab dimensions
  and categories, assuming that they are all the same.
  
  Subclasses can override this method to build the other dimensions.
  
  @param results
  @return