.withDataElements( dataElements ) .withPeriod( period ) .withOrganisationUnit( unit ) .withCategory( category ); params.addFilters( dataQueryService.getDimensionalObjects( dimensions, null, null, null, false, IdScheme.UID ) ); Map<String, Object> map = analyticsService.getAggregatedDataValueMapping( params.build() );
.withDataDimensionItems( Lists.newArrayList( eventItems ) ) .withAttributeOptionCombos( Lists.newArrayList() ) .withStartDate( startDate.getTime() ) .withEndDate( endDate.getTime() ) .withOrganisationUnits( orgUnits ); paramsBuilder.withAttributeOptionCombos( Lists.newArrayList() ); return getEventData( paramsBuilder.build(), hasAttributeOptions );
.withPeriods( new ArrayList<Period>( periods ) ) .withDataDimensionItems( Lists.newArrayList( dimensionItems ) ) .withOrganisationUnits( orgUnits ); paramsBuilder.withAttributeOptionCombos( Lists.newArrayList() ); Grid grid = analyticsService.getAggregatedDataValues( paramsBuilder.build() );
.withDataElements( aggregationTypeDataElementMap.get( aggregationType ) ) .withAggregationType( aggregationType ).build(); .withAggregationType( aggregationType ).build(); .withAggregationType( ObjectUtils.firstNonNull( params.getAggregationType(), AnalyticsAggregationType.SUM ) ).build();
.retainDataDimension( DataDimensionItemType.INDICATOR ) .withIncludeNumDen( false ).build();
.withSkipPartitioning( true ) .withTimely( false ) .withRestrictByOrgUnitOpeningClosedDate( true ) .withRestrictByCategoryOptionStartEndDate( true ) .withAggregationType( AnalyticsAggregationType.SUM ).build();
.withDataPeriodsForAggregationPeriods( dataPeriodAggregationPeriodMap ) .build();
.addOrSetDimensionOptions( PERIOD_DIM_ID, DimensionType.PERIOD, periodType.toLowerCase(), periodTypePeriodMap.get( periodType ) ) .withPeriodType( periodType ).build(); .removeFilter( PERIOD_DIM_ID ) .withPeriodType( periodTypePeriodMap.keySet().iterator().next() ); // Using first period type query.addFilter( new BaseDimensionalObject( filter.getDimension(), filter.getDimensionType(), periodType.toLowerCase(), filter.getDisplayName(), periodTypePeriodMap.get( periodType ) ) ); queries.add( query.build() ); queries.add( DataQueryParams.newBuilder( params ).build() ); return queries;
params.addDimensions( getDimensionalObjects( request.getDimension(), request.getRelativePeriodDate(), request.getUserOrgUnit(), format, request.isAllowAllPeriods(), inputIdScheme ) ); params.addFilters( getDimensionalObjects( request.getFilter(), request.getRelativePeriodDate(), request.getUserOrgUnit(), format, request.isAllowAllPeriods(), inputIdScheme ) ); params.withMeasureCriteria( getMeasureCriteriaFromParam( request.getMeasureCriteria() ) ); params.withPreAggregationMeasureCriteria( getMeasureCriteriaFromParam( request.getPreAggregationMeasureCriteria()) ); params.withAggregationType( AnalyticsAggregationType.fromAggregationType( request.getAggregationType() ) ); .withStartDate( request.getStartDate() ) .withEndDate( request.getEndDate() ) .withOrder( request.getOrder() ) .withTimeField( request.getTimeField() ) .withOrgUnitField( request.getOrgUnitField() ) .withSkipMeta( request.isSkipMeta() ) .withSkipData( request.isSkipData() ) .withSkipRounding( request.isSkipRounding() ) .withCompletedOnly( request.isCompletedOnly() ) .withIgnoreLimit( request.isIgnoreLimit() ) .withHierarchyMeta( request.isHierarchyMeta() ) .withHideEmptyRows( request.isHideEmptyRows() ) .withHideEmptyColumns( request.isHideEmptyColumns() ) .withShowHierarchy( request.isShowHierarchy() ) .withIncludeNumDen( request.isIncludeNumDen() ) .withIncludeMetadataDetails( request.isIncludeMetadataDetails() ) .withDisplayProperty( request.getDisplayProperty() ) .withOutputIdScheme( request.getOutputIdScheme() )
.removeDimension( DATA_X_DIM_ID ) .addDimension( new BaseDimensionalObject( DATA_X_DIM_ID, DimensionType.DATA_X, dataElements ) ); builder.addDimension( new BaseDimensionalObject( CATEGORYOPTIONCOMBO_DIM_ID, DimensionType.CATEGORY_OPTION_COMBO, categoryOptionCombos ) ); builder.addDimension( new BaseDimensionalObject( ATTRIBUTEOPTIONCOMBO_DIM_ID, DimensionType.ATTRIBUTE_OPTION_COMBO, attributeOptionCobos ) ); DataQueryParams operandParams = builder.build();
.addOrSetDimensionOptions( ORGUNIT_DIM_ID, DimensionType.ORGANISATION_UNIT, LEVEL_PREFIX + level, levelOrgUnitMap.get( level ) ).build(); .removeFilter( ORGUNIT_DIM_ID ); query.addFilter( new BaseDimensionalObject( filter.getDimension(), filter.getDimensionType(), LEVEL_PREFIX + level, filter.getDisplayName(), levelOrgUnitMap.get( level ) ) ); queries.add( query.build() ); queries.add( DataQueryParams.newBuilder( params ).build() ); return queries;
.withDataElements( periodTypeDataElementMap.get( periodType ) ) .withDataPeriodType( periodType ).build(); .withDataPeriodType( periodType ).build() ); queries.add( DataQueryParams.newBuilder( params ).build() );
queries.add( DataQueryParams.newBuilder( params ).build() ); return queries; .addOrSetDimensionOptions( periodDim.getDimension(), periodDim.getDimensionType(), periodDim.getDimensionName(), daysPeriodMap.get( days ) ).build();
.withStartDateRestriction( period.getStartDate() ) .withEndDateRestriction( period.getEndDate() ).build(); .withStartDateRestriction( period.getStartDate() ) .withEndDateRestriction( period.getEndDate() ) .removeFilter( PERIOD_DIM_ID ).build();
@Override public DataQueryParams withDataApprovalConstraints( DataQueryParams params ) { DataQueryParams.Builder paramsBuilder = DataQueryParams.newBuilder( params ); User user = currentUserService.getCurrentUser(); boolean hideUnapprovedData = systemSettingManager.hideUnapprovedDataInAnalytics(); boolean canViewUnapprovedData = user != null ? user.getUserCredentials().isAuthorized( DataApproval.AUTH_VIEW_UNAPPROVED_DATA ) : true; if ( hideUnapprovedData && user != null ) { Map<OrganisationUnit, Integer> approvalLevels = null; if ( params.hasApprovalLevel() ) { // Set approval level from query DataApprovalLevel approvalLevel = approvalLevelService.getDataApprovalLevel( params.getApprovalLevel() ); throwExWhenTrue( approvalLevel == null, String.format( "Approval level does not exist: %s", params.getApprovalLevel() ) ); approvalLevels = approvalLevelService.getUserReadApprovalLevels( approvalLevel ); } else if ( !canViewUnapprovedData ) { // Set approval level from user level approvalLevels = approvalLevelService.getUserReadApprovalLevels(); } if ( approvalLevels != null && !approvalLevels.isEmpty() ) { paramsBuilder.withDataApprovalLevels( approvalLevels ); log.debug( String.format( "User: %s constrained by data approval levels: %s", user.getUsername(), approvalLevels.values() ) ); } } return paramsBuilder.build(); }
/** * 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(); }
/** * Groups queries by their data type. * * @param params the data query parameters. * @return a list of {@link DataQueryParams}. */ private List<DataQueryParams> groupByDataType( DataQueryParams params ) { List<DataQueryParams> queries = new ArrayList<>(); if ( !params.getDataElements().isEmpty() ) { ListMap<DataType, DimensionalItemObject> dataTypeDataElementMap = QueryPlannerUtils.getDataTypeDataElementMap( params.getDataElements() ); for ( DataType dataType : dataTypeDataElementMap.keySet() ) { DataQueryParams query = DataQueryParams.newBuilder( params ) .withDataElements( dataTypeDataElementMap.get( dataType ) ) .withDataType( dataType ).build(); queries.add( query ); } } else { DataQueryParams query = DataQueryParams.newBuilder( params ) .withDataType( DataType.NUMERIC ).build(); queries.add( query ); } logQuerySplit( queries, "data type" ); return queries; }
@Override public DataQueryParams getFromAnalyticalObject( AnalyticalObject object ) { Assert.notNull( object, "Analytical object cannot be null" ); DataQueryParams.Builder params = DataQueryParams.newBuilder(); I18nFormat format = i18nManager.getI18nFormat(); IdScheme idScheme = IdScheme.UID; Date date = object.getRelativePeriodDate(); String userOrgUnit = object.getRelativeOrganisationUnit() != null ? object.getRelativeOrganisationUnit().getUid() : null; List<OrganisationUnit> userOrgUnits = getUserOrgUnits( null, userOrgUnit ); object.populateAnalyticalProperties(); for ( DimensionalObject column : object.getColumns() ) { params.addDimension( getDimension( column.getDimension(), getDimensionalItemIds( column.getItems() ), date, userOrgUnits, format, false, false, idScheme ) ); } for ( DimensionalObject row : object.getRows() ) { params.addDimension( getDimension( row.getDimension(), getDimensionalItemIds( row.getItems() ), date, userOrgUnits, format, false, false, idScheme ) ); } for ( DimensionalObject filter : object.getFilters() ) { params.addFilter( getDimension( filter.getDimension(), getDimensionalItemIds( filter.getItems() ), date, userOrgUnits, format, false, false, idScheme ) ); } return params .withCompletedOnly( object.isCompletedOnly() ) .withTimeField( object.getTimeField() ) .build(); }
/** * Adds data element values to the given grid based on the given data query * parameters. * * @param params the {@link DataQueryParams}. * @param grid the grid. */ private void addDataElementValues( DataQueryParams params, Grid grid ) { if ( !params.getAllDataElements().isEmpty() && !params.isSkipData() ) { DataQueryParams dataSourceParams = DataQueryParams.newBuilder( params ) .retainDataDimension( DataDimensionItemType.DATA_ELEMENT ) .withIncludeNumDen( false ).build(); Map<String, Object> aggregatedDataMap = getAggregatedDataValueMapObjectTyped( dataSourceParams ); for ( Map.Entry<String, Object> entry : aggregatedDataMap.entrySet() ) { Object value = AnalyticsUtils.getRoundedValueObject( params, entry.getValue() ); grid.addRow() .addValues( entry.getKey().split( DIMENSION_SEP ) ) .addValue( value ); if ( params.isIncludeNumDen() ) { grid.addNullValues( 5 ); } } } }
/** * Groups the given query in sub queries for each dimension period. This only applies * if the aggregation type is {@link AggregationType#LAST} or * {@link AggregationType#LAST_AVERAGE_ORG_UNIT}. In this case, each period must be * aggregated individually. * * @param params the data query parameters. * @return a list of {@link DataQueryParams}. */ private List<DataQueryParams> groupByPeriod( DataQueryParams params ) { List<DataQueryParams> queries = new ArrayList<>(); if ( params.getAggregationType().isLastPeriodAggregationType() && !params.getPeriods().isEmpty() ) { for ( DimensionalItemObject period : params.getPeriods() ) { String periodType = ((Period) period).getPeriodType().getName().toLowerCase(); DataQueryParams query = DataQueryParams.newBuilder( params ) .withPeriods( Lists.newArrayList( period ), periodType ).build(); queries.add( query ); } } else { queries.add( params ); } logQuerySplit( queries, "period" ); return queries; }