← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 2265: Minor performance improvement in datamart

 

------------------------------------------------------------
revno: 2265
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Thu 2010-12-02 22:52:11 +0100
message:
  Minor performance improvement in datamart
modified:
  dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntAggregator.java
  dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntSingleValueAggregator.java
  dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/SumIntAggregator.java
  dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/engine/DefaultDataMartEngine.java


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntAggregator.java'
--- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntAggregator.java	2010-07-04 11:11:30 +0000
+++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntAggregator.java	2010-12-02 21:52:11 +0000
@@ -165,6 +165,7 @@
                                 "', for data element with id: '" + entry.getKey() +
                                 "', for period with id: '" + crossTabValue.getPeriodId() +
                                 "', for source with id: '" + crossTabValue.getSourceId() + "'" );
+                            continue;
                         }
                         
                         if ( currentStartDate.compareTo( startDate ) >= 0 && currentEndDate.compareTo( endDate ) <= 0 ) // Value is within period

=== modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntSingleValueAggregator.java'
--- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntSingleValueAggregator.java	2010-07-04 11:50:16 +0000
+++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/AverageIntSingleValueAggregator.java	2010-12-02 21:52:11 +0000
@@ -153,6 +153,7 @@
                                 "', for data element with id: '" + entry.getKey() +
                                 "', for period with id: '" + crossTabValue.getPeriodId() +
                                 "', for source with id: '" + crossTabValue.getSourceId() + "'" );
+                            continue;
                         }
     
                         if ( currentStartDate.compareTo( endDate ) <= 0 && currentEndDate.compareTo( startDate ) >= 0 ) // Value is intersecting

=== modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/SumIntAggregator.java'
--- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/SumIntAggregator.java	2010-07-04 11:11:30 +0000
+++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/aggregation/dataelement/SumIntAggregator.java	2010-12-02 21:52:11 +0000
@@ -155,6 +155,7 @@
                                 "', for data element with id: '" + entry.getKey() +
                                 "', for period with id: '" + crossTabValue.getPeriodId() +
                                 "', for source with id: '" + crossTabValue.getSourceId() + "'" );
+                            continue;
                         }
                         
                         if ( currentStartDate.compareTo( startDate ) >= 0 && currentEndDate.compareTo( endDate ) <= 0 ) // Value is within period

=== modified file 'dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/engine/DefaultDataMartEngine.java'
--- dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/engine/DefaultDataMartEngine.java	2010-12-02 21:24:43 +0000
+++ dhis-2/dhis-services/dhis-service-datamart-default/src/main/java/org/hisp/dhis/datamart/engine/DefaultDataMartEngine.java	2010-12-02 21:52:11 +0000
@@ -221,13 +221,21 @@
         log.info( "Deleted existing aggregated data: " + TimeUtils.getHMS() );
 
         // ---------------------------------------------------------------------
+        // Get objects
+        // ---------------------------------------------------------------------
+
+        Collection<Indicator> indicators = indicatorService.getIndicators( indicatorIds );
+        Collection<Period> periods = periodService.getPeriods( periodIds );
+        Collection<OrganisationUnit> organisationUnits = organisationUnitService.getOrganisationUnits( organisationUnitIds );
+
+        // ---------------------------------------------------------------------
         // Filter and get operands
         // ---------------------------------------------------------------------
 
         final Set<Integer> nonCalculatedDataElementIds = filterCalculatedDataElementIds( dataElementIds, false );
         final Set<Integer> calculatedDataElementIds = filterCalculatedDataElementIds( dataElementIds, true );
 
-        final Set<Integer> dataElementInIndicatorIds = getDataElementIdsInIndicators( indicatorIds );
+        final Set<Integer> dataElementInIndicatorIds = getDataElementIdsInIndicators( indicators );
         final Set<Integer> dataElementInCalculatedDataElementIds = getDataElementIdsInCalculatedDataElements( calculatedDataElementIds );
 
         final Set<Integer> allDataElementIds = new HashSet<Integer>();
@@ -294,14 +302,6 @@
         log.info( "Trimmed crosstab table: " + TimeUtils.getHMS() );
 
         // ---------------------------------------------------------------------
-        // Get objects
-        // ---------------------------------------------------------------------
-
-        Collection<Period> periods = periodService.getPeriods( periodIds );
-        Collection<OrganisationUnit> organisationUnits = organisationUnitService.getOrganisationUnits( organisationUnitIds );
-        Collection<Indicator> indicators = indicatorService.getIndicators( indicatorIds );
-
-        // ---------------------------------------------------------------------
         // Data element export
         // ---------------------------------------------------------------------
 
@@ -330,8 +330,7 @@
             count += dataElementDataMart.exportDataValues( averageIntDataElementOperands, periods,
                 organisationUnits, averageIntSingleValueAggregator, key );
 
-            log
-                .info( "Exported values for data element operands with average aggregation operator with single value of type number ("
+            log.info( "Exported values for data element operands with average aggregation operator with single value of type number ("
                     + averageIntDataElementOperands.size() + "): " + TimeUtils.getHMS() );
         }
 
@@ -364,7 +363,7 @@
             count += indicatorDataMart.exportIndicatorValues( indicators, periods, organisationUnits,
                 dataElementInIndicatorOperands, key );
 
-            log.info( "Exported values for indicators (" + indicatorIds.size() + "): " + TimeUtils.getHMS() );
+            log.info( "Exported values for indicators (" + indicators.size() + "): " + TimeUtils.getHMS() );
         }
 
         state.setMessage( "exporting_data_for_calculated_data_elements" );
@@ -422,14 +421,12 @@
      * Returns all data element identifiers included in the indicators in the
      * given identifier collection.
      */
-    private Set<Integer> getDataElementIdsInIndicators( final Collection<Integer> indicatorIds )
+    private Set<Integer> getDataElementIdsInIndicators( final Collection<Indicator> indicators )
     {
-        final Set<Integer> identifiers = new HashSet<Integer>( indicatorIds.size() );
+        final Set<Integer> identifiers = new HashSet<Integer>( indicators.size() );
 
-        for ( final Integer id : indicatorIds )
+        for ( final Indicator indicator : indicators )
         {
-            final Indicator indicator = indicatorService.getIndicator( id );
-
             identifiers.addAll( getDataElementIdsInExpression( indicator.getNumerator() ) );
             identifiers.addAll( getDataElementIdsInExpression( indicator.getDenominator() ) );
         }