=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/analytics/AggregationType.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/analytics/AggregationType.java 2014-09-23 12:47:54 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/analytics/AggregationType.java 2014-09-24 07:43:19 +0000 @@ -35,7 +35,9 @@ { SUM( "sum" ), AVERAGE_SUM_INT( "avg_sum_int" ), // Sum in organisation unit hierarchy - AVERAGE_SUM_INT_DISAGGREGATION( "avg_sum_int_disaggregation" ), + AVERAGE_SUM_INT_DISAGGREGATION( "avg_sum_int_disaggregation" ), // Sum in organisation unit hierarchy + AVERAGE_INT( "avg_int" ), + AVERAGE_INT_DISAGGREGATION( "avg_int_disaggregation" ), AVERAGE_BOOL( "avg" ), COUNT( "count" ), STDDEV( "stddev" ), === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElement.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElement.java 2014-09-23 07:43:22 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElement.java 2014-09-24 07:43:19 +0000 @@ -100,6 +100,7 @@ public static final String AGGREGATION_OPERATOR_SUM = "sum"; public static final String AGGREGATION_OPERATOR_AVERAGE_SUM = "average"; // Sum in organisation unit + public static final String AGGREGATION_OPERATOR_AVERAGE = "avg"; public static final String AGGREGATION_OPERATOR_COUNT = "count"; public static final String AGGREGATION_OPERATOR_STDDEV = "stddev"; public static final String AGGREGATION_OPERATOR_VARIANCE = "variance"; === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2014-09-23 11:41:51 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2014-09-24 07:43:19 +0000 @@ -29,6 +29,7 @@ */ import static org.hisp.dhis.analytics.AggregationType.AVERAGE_SUM_INT_DISAGGREGATION; +import static org.hisp.dhis.analytics.AggregationType.AVERAGE_INT_DISAGGREGATION; import static org.hisp.dhis.common.DimensionType.DATASET; import static org.hisp.dhis.common.DimensionType.ORGANISATIONUNIT; import static org.hisp.dhis.common.DimensionType.ORGANISATIONUNIT_GROUPSET; @@ -649,6 +650,14 @@ } /** + * Indicates whether the aggregation type is of type disaggregation. + */ + public boolean isDisaggregation() + { + return isAggregationType( AVERAGE_SUM_INT_DISAGGREGATION ) || isAggregationType( AVERAGE_INT_DISAGGREGATION ); + } + + /** * Replaces the periods of this query with the corresponding data periods. * Sets the period type to the data period type. This method is relevant only * when then the data period type has lower frequency than the aggregation @@ -657,7 +666,7 @@ */ public void replaceAggregationPeriodsWithDataPeriods( ListMap dataPeriodAggregationPeriodMap ) { - if ( isAggregationType( AVERAGE_SUM_INT_DISAGGREGATION ) && dataPeriodType != null ) + if ( isDisaggregation() && dataPeriodType != null ) { this.periodType = this.dataPeriodType.getName(); === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2014-09-23 11:41:51 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2014-09-24 07:43:19 +0000 @@ -28,9 +28,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import static org.hisp.dhis.analytics.AggregationType.AVERAGE_BOOL; -import static org.hisp.dhis.analytics.AggregationType.AVERAGE_SUM_INT; -import static org.hisp.dhis.analytics.AggregationType.AVERAGE_SUM_INT_DISAGGREGATION; import static org.hisp.dhis.analytics.AggregationType.SUM; import static org.hisp.dhis.analytics.DataQueryParams.LEVEL_PREFIX; import static org.hisp.dhis.common.DimensionalObject.CATEGORYOPTIONCOMBO_DIM_ID; @@ -39,10 +36,13 @@ import static org.hisp.dhis.common.DimensionalObject.INDICATOR_DIM_ID; import static org.hisp.dhis.common.DimensionalObject.ORGUNIT_DIM_ID; import static org.hisp.dhis.common.DimensionalObject.PERIOD_DIM_ID; +import static org.hisp.dhis.dataelement.DataElement.AGGREGATION_OPERATOR_AVERAGE; import static org.hisp.dhis.dataelement.DataElement.AGGREGATION_OPERATOR_AVERAGE_SUM; import static org.hisp.dhis.dataelement.DataElement.VALUE_TYPE_BOOL; +import static org.hisp.dhis.dataelement.DataElement.VALUE_TYPE_INT; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Set; @@ -81,6 +81,8 @@ implements QueryPlanner { private static final Log log = LogFactory.getLog( DefaultQueryPlanner.class ); + + private static final List AVERAGE_AGG_OPERATORS = Arrays.asList( AGGREGATION_OPERATOR_AVERAGE_SUM, AGGREGATION_OPERATOR_AVERAGE ); @Autowired private OrganisationUnitService organisationUnitService; @@ -242,7 +244,7 @@ for ( DataQueryParams byAggregationType : groupedByAggregationType ) { - if ( AVERAGE_SUM_INT_DISAGGREGATION.equals( byAggregationType.getAggregationType() ) ) + if ( byAggregationType.isDisaggregation() ) { List groupedByDataPeriodType = groupByDataPeriodType( byAggregationType ); @@ -719,7 +721,37 @@ PeriodType aggregationPeriodType, PeriodType dataPeriodType ) { AggregationType aggregationType = null; - + + boolean disaggregation = isDisaggregation( aggregationOperator, aggregationPeriodType, dataPeriodType ); + boolean number = VALUE_TYPE_INT.equals( valueType ); + + if ( AVERAGE_AGG_OPERATORS.contains( aggregationOperator ) && VALUE_TYPE_BOOL.equals( valueType ) ) + { + aggregationType = AggregationType.AVERAGE_BOOL; + } + else if ( DataElement.AGGREGATION_OPERATOR_AVERAGE_SUM.equals( aggregationOperator ) && number && disaggregation ) + { + aggregationType = AggregationType.AVERAGE_SUM_INT_DISAGGREGATION; + } + else if ( DataElement.AGGREGATION_OPERATOR_AVERAGE_SUM.equals( aggregationOperator ) && number ) + { + aggregationType = AggregationType.AVERAGE_SUM_INT; + } + else if ( DataElement.AGGREGATION_OPERATOR_AVERAGE.equals( aggregationOperator ) && number && disaggregation ) + { + aggregationType = AggregationType.AVERAGE_INT_DISAGGREGATION; + } + else if ( DataElement.AGGREGATION_OPERATOR_AVERAGE.equals( aggregationOperator ) && number ) + { + aggregationType = AggregationType.AVERAGE_INT; + } + else + { + aggregationType = AggregationType.fromValue( aggregationOperator ); + } + + // + /* if ( AGGREGATION_OPERATOR_AVERAGE_SUM.equals( aggregationOperator ) ) { if ( VALUE_TYPE_BOOL.equals( valueType ) ) @@ -741,12 +773,21 @@ else { aggregationType = AggregationType.fromValue( aggregationOperator ); - } + }*/ return aggregationType; } /** + * Indicates whether disaggregation is allowed for the given input. + */ + private boolean isDisaggregation( String aggregationOperator, + PeriodType aggregationPeriodType, PeriodType dataPeriodType ) + { + return dataPeriodType != null && aggregationPeriodType != null && aggregationPeriodType.getFrequencyOrder() < dataPeriodType.getFrequencyOrder(); + } + + /** * Creates a mapping between the period type and the data element for the * given data elements. */ === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java 2014-09-23 11:41:51 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java 2014-09-24 07:43:19 +0000 @@ -29,8 +29,9 @@ */ import static org.hisp.dhis.analytics.AggregationType.AVERAGE_BOOL; +import static org.hisp.dhis.analytics.AggregationType.AVERAGE_INT; +import static org.hisp.dhis.analytics.AggregationType.AVERAGE_INT_DISAGGREGATION; import static org.hisp.dhis.analytics.AggregationType.AVERAGE_SUM_INT; -import static org.hisp.dhis.analytics.AggregationType.AVERAGE_SUM_INT_DISAGGREGATION; import static org.hisp.dhis.analytics.AggregationType.COUNT; import static org.hisp.dhis.analytics.AggregationType.MAX; import static org.hisp.dhis.analytics.AggregationType.MIN; @@ -161,7 +162,7 @@ public void replaceDataPeriodsWithAggregationPeriods( Map dataValueMap, DataQueryParams params, ListMap dataPeriodAggregationPeriodMap ) { - if ( params.isAggregationType( AVERAGE_SUM_INT_DISAGGREGATION ) ) + if ( params.isDisaggregation() ) { int periodIndex = params.getPeriodDimensionIndex(); @@ -231,6 +232,10 @@ sql += "sum(daysxvalue) / " + days; } + else if ( params.isAggregationType( AVERAGE_INT ) || params.isAggregationType( AVERAGE_INT_DISAGGREGATION ) ) + { + sql += "avg(value)"; + } else if ( params.isAggregationType( AVERAGE_BOOL ) ) { sql += "sum(daysxvalue) / sum(daysno) * 100"; @@ -255,7 +260,7 @@ { sql += "max(value)"; } - else // SUM, AVERAGE_INT_DISAGGREGATION and undefined //TODO + else // SUM, AVERAGE_SUM_INT_DISAGGREGATION and undefined //TODO { sql += "sum(value)"; } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/org/hisp/dhis/dd/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/org/hisp/dhis/dd/i18n_module.properties 2014-09-23 07:43:22 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/org/hisp/dhis/dd/i18n_module.properties 2014-09-24 07:43:19 +0000 @@ -239,4 +239,4 @@ category_option_combo = Category Option Combo intro_category_option_combo = View and edit data element category option combos. Category Option Combo are fine-grained break-downs of catagory. edit_data_element_category_option_combo = Edit data element category option combo -average_sum_in_org_unit_hierarchy=Average (Sum in org unit hierarchy) \ No newline at end of file +average_sum_in_org_unit_hierarchy=Average (sum in org unit hierarchy) \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/dataElementForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/dataElementForm.vm 2014-09-23 07:43:22 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/dataElementForm.vm 2014-09-24 07:43:19 +0000 @@ -128,6 +128,7 @@