=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/Indicator.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/Indicator.java 2013-02-13 03:57:52 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/Indicator.java 2013-03-07 15:02:47 +0000 @@ -178,6 +178,16 @@ { attributeValues.clear(); } + + public String getExplodedNumeratorFallback() + { + return explodedNumerator != null ? explodedNumerator : numerator; + } + + public String getExplodedDenominatorFallback() + { + return explodedDenominator != null ? explodedDenominator : denominator; + } // ------------------------------------------------------------------------- // Getters and setters === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2013-03-04 10:41:11 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2013-03-07 15:02:47 +0000 @@ -106,7 +106,7 @@ private static final String VALUE_HEADER_NAME = "Value"; private static final int PERCENT = 100; - private static final int MAX_QUERIES = 8; //TODO increase? + private static final int MAX_QUERIES = 8; //TODO completeness on time //TODO make sure data x dims are successive @@ -177,7 +177,9 @@ { int indicatorIndex = params.getIndicatorDimensionIndex(); List indicators = asTypedList( params.getIndicators() ); - + + expressionService.explodeAndSubstituteExpressions( indicators, null ); + DataQueryParams dataSourceParams = new DataQueryParams( params ); dataSourceParams.removeDimension( DATAELEMENT_DIM_ID ); dataSourceParams.removeDimension( DATASET_DIM_ID ); === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java 2013-03-07 14:10:37 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java 2013-03-07 15:02:47 +0000 @@ -145,16 +145,16 @@ public Double getIndicatorValue( Indicator indicator, Period period, Map valueMap, Map constantMap, Integer days ) { - if ( indicator == null || indicator.getNumerator() == null || indicator.getDenominator() == null ) + if ( indicator == null || indicator.getExplodedNumeratorFallback() == null || indicator.getExplodedDenominatorFallback() == null ) { return null; } - final double denominatorValue = calculateExpression( generateExpression( indicator.getDenominator(), valueMap, constantMap, days, false ) ); + final double denominatorValue = calculateExpression( generateExpression( indicator.getExplodedDenominatorFallback(), valueMap, constantMap, days, false ) ); if ( !isEqual( denominatorValue, 0d ) ) { - final double numeratorValue = calculateExpression( generateExpression( indicator.getNumerator(), valueMap, constantMap, days, false ) ); + final double numeratorValue = calculateExpression( generateExpression( indicator.getExplodedNumeratorFallback(), valueMap, constantMap, days, false ) ); final double annualizationFactor = period != null ? DateUtils.getAnnualizationFactor( indicator, period.getStartDate(), period.getEndDate() ) : 1d; final double factor = indicator.getIndicatorType().getFactor();