/** * Sets the items for the given dimension, if the dimension exists. */ private DataQueryParams setDimensionOptions( String dimension, List<DimensionalItemObject> options ) { BaseDimensionalObject dim = (BaseDimensionalObject) getDimension( dimension ); if ( dim != null ) { dim.setItems( options ); } return this; }
/** * Sets the given list of data dimension options. Replaces existing options * of the given data dimension type. * * @param itemType the data dimension type, or all types if null. * @param options the data dimension options. */ private void setDataDimensionOptions( @Nullable DataDimensionItemType itemType, List<? extends DimensionalItemObject> options ) { List<DimensionalItemObject> existing = getDimensionOptions( DATA_X_DIM_ID ); if ( itemType != null ) { existing = AnalyticsUtils.getByDataDimensionItemType( itemType, existing ); } DimensionalObject dimension = getDimension( DATA_X_DIM_ID ); if ( dimension == null ) { dimension = new BaseDimensionalObject( DATA_X_DIM_ID, DimensionType.DATA_X, null, DISPLAY_NAME_DATA_X, options ); addDimension( dimension ); } else { dimension.getItems().removeAll( existing ); dimension.getItems().addAll( options ); } }
/** * Retrieves the dimension or filter with the given dimension identifier. * Returns null if the dimension or filter is not present. */ public DimensionalObject getDimensionOrFilter( String dimension ) { DimensionalObject dim = getDimension( dimension ); return dim != null ? dim : getFilter( dimension ); }
/** * Splits the given list of queries in sub queries on the given dimension. */ private DataQueryGroups splitByDimension( DataQueryGroups queryGroups, String dimension, int optimalQueries ) { int optimalForSubQuery = MathUtils.divideToFloor( optimalQueries, queryGroups.getLargestGroupSize() ); List<DataQueryParams> subQueries = new ArrayList<>(); for ( DataQueryParams query : queryGroups.getAllQueries() ) { DimensionalObject dim = query.getDimension( dimension ); List<DimensionalItemObject> values = null; if ( dim == null || (values = dim.getItems()) == null || values.isEmpty() ) { subQueries.add( DataQueryParams.newBuilder( query ).build() ); continue; } List<List<DimensionalItemObject>> valuePages = new PaginatedList<>( values ).setNumberOfPages( optimalForSubQuery ).getPages(); for ( List<DimensionalItemObject> valuePage : valuePages ) { DataQueryParams subQuery = DataQueryParams.newBuilder( query ) .withDimensionOptions( dim.getDimension(), valuePage ).build(); subQueries.add( subQuery ); } } if ( subQueries.size() > queryGroups.getAllQueries().size() ) { log.debug( String.format( "Split on dimension %s: %d", dimension, (subQueries.size() / queryGroups.getAllQueries().size()) ) ); } return DataQueryGroups.newBuilder().withQueries( subQueries ).build(); }
.withEndDateRestriction( period.getEndDate() ).build(); BaseDimensionalObject staticPeriod = (BaseDimensionalObject) query.getDimension( PERIOD_DIM_ID ); staticPeriod.setDimensionName( period.getIsoDate() ); staticPeriod.setFixed( true );
QueryPlannerUtils.getDaysPeriodMap( params.getPeriods() ); DimensionalObject periodDim = params.getDimension( PERIOD_DIM_ID );