1
package org.hisp.dhis.datamart;
4
* Copyright (c) 2004-2007, University of Oslo
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions are met:
9
* * Redistributions of source code must retain the above copyright notice, this
10
* list of conditions and the following disclaimer.
11
* * Redistributions in binary form must reproduce the above copyright notice,
12
* this list of conditions and the following disclaimer in the documentation
13
* and/or other materials provided with the distribution.
14
* * Neither the name of the HISP project nor the names of its contributors may
15
* be used to endorse or promote products derived from this software without
16
* specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
import java.util.Collection;
31
import java.util.Date;
32
import java.util.HashSet;
33
import java.util.Iterator;
35
import org.hisp.dhis.DhisConvenienceTest;
36
import org.hisp.dhis.dataelement.DataElement;
37
import org.hisp.dhis.dataelement.DataElementCategory;
38
import org.hisp.dhis.dataelement.DataElementCategoryCombo;
39
import org.hisp.dhis.dataelement.DataElementCategoryComboService;
40
import org.hisp.dhis.dataelement.DataElementCategoryOption;
41
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
42
import org.hisp.dhis.dataelement.DataElementCategoryOptionComboService;
43
import org.hisp.dhis.dataelement.DataElementCategoryOptionService;
44
import org.hisp.dhis.dataelement.DataElementCategoryService;
45
import org.hisp.dhis.dataelement.DataElementService;
46
import org.hisp.dhis.datavalue.DataValueService;
47
import org.hisp.dhis.expression.Expression;
48
import org.hisp.dhis.indicator.Indicator;
49
import org.hisp.dhis.indicator.IndicatorService;
50
import org.hisp.dhis.indicator.IndicatorType;
51
import org.hisp.dhis.organisationunit.OrganisationUnit;
52
import org.hisp.dhis.organisationunit.OrganisationUnitService;
53
import org.hisp.dhis.period.Period;
54
import org.hisp.dhis.period.PeriodService;
55
import org.hisp.dhis.period.PeriodType;
58
* @author Lars Helge Overland
61
public class DataMartServiceMultiDimensionTest
62
extends DhisConvenienceTest
64
private final String T = "true";
65
private final String F = "false";
67
private DataMartInternalProcess dataMartInternalProcess;
69
private DataMartStore dataMartStore;
71
private DataElementCategoryOption categoryOptionA;
72
private DataElementCategoryOption categoryOptionB;
74
private DataElementCategory categoryA;
76
private DataElementCategoryCombo categoryComboA;
78
private DataElementCategoryOptionCombo categoryOptionComboA;
79
private DataElementCategoryOptionCombo categoryOptionComboB;
81
private Collection<Integer> dataElementIds;
82
private Collection<Integer> indicatorIds;
83
private Collection<Integer> periodIds;
84
private Collection<Integer> organisationUnitIds;
86
private DataElement dataElementA;
87
private DataElement dataElementB;
89
private Period periodA;
90
private Period periodB;
91
private Period periodC;
93
private OrganisationUnit unitA;
94
private OrganisationUnit unitB;
95
private OrganisationUnit unitC;
98
public void setUpTest()
100
// ---------------------------------------------------------------------
102
// ---------------------------------------------------------------------
104
dataMartInternalProcess = (DataMartInternalProcess) getBean( DataMartInternalProcess.ID );
106
dataMartStore = (DataMartStore) getBean( DataMartStore.ID );
108
categoryService = (DataElementCategoryService) getBean( DataElementCategoryService.ID );
110
categoryComboService = (DataElementCategoryComboService) getBean( DataElementCategoryComboService.ID );
112
categoryOptionService = (DataElementCategoryOptionService) getBean( DataElementCategoryOptionService.ID );
114
categoryOptionComboService = (DataElementCategoryOptionComboService) getBean( DataElementCategoryOptionComboService.ID );
116
dataElementService = (DataElementService) getBean( DataElementService.ID );
118
indicatorService = (IndicatorService) getBean( IndicatorService.ID );
120
periodService = (PeriodService) getBean( PeriodService.ID );
122
organisationUnitService = (OrganisationUnitService) getBean( OrganisationUnitService.ID );
124
dataValueService = (DataValueService) getBean( DataValueService.ID );
126
// ---------------------------------------------------------------------
127
// Setup identifier Collections
128
// ---------------------------------------------------------------------
130
dataElementIds = new HashSet<Integer>();
131
indicatorIds = new HashSet<Integer>();
132
periodIds = new HashSet<Integer>();
133
organisationUnitIds = new HashSet<Integer>();
135
// ---------------------------------------------------------------------
137
// ---------------------------------------------------------------------
139
categoryOptionA = new DataElementCategoryOption( "Male" );
140
categoryOptionB = new DataElementCategoryOption( "Female" );
142
categoryOptionService.addDataElementCategoryOption( categoryOptionA );
143
categoryOptionService.addDataElementCategoryOption( categoryOptionB );
145
categoryA = new DataElementCategory( "Gender" );
146
categoryA.getCategoryOptions().add( categoryOptionA );
147
categoryA.getCategoryOptions().add( categoryOptionB );
149
categoryService.addDataElementCategory( categoryA );
151
categoryComboA = new DataElementCategoryCombo( "Gender" );
152
categoryComboA.getCategories().add( categoryA );
154
categoryComboService.addDataElementCategoryCombo( categoryComboA );
156
categoryOptionComboService.generateOptionCombos( categoryComboA );
158
Iterator<DataElementCategoryOptionCombo> categoryOptionCombos = categoryOptionComboService.getAllDataElementCategoryOptionCombos().iterator();
160
categoryOptionCombos.next(); // Omit default
161
categoryOptionComboA = categoryOptionCombos.next();
162
categoryOptionComboB = categoryOptionCombos.next();
164
// ---------------------------------------------------------------------
165
// Setup DataElements
166
// ---------------------------------------------------------------------
168
dataElementA = createDataElement( 'A', categoryComboA );
169
dataElementB = createDataElement( 'B', categoryComboA );
171
dataElementIds.add( dataElementService.addDataElement( dataElementA ) );
172
dataElementIds.add( dataElementService.addDataElement( dataElementB ) );
174
// ---------------------------------------------------------------------
176
// ---------------------------------------------------------------------
178
PeriodType periodType = periodService.getAllPeriodTypes().iterator().next();
180
Date jul01 = getDate( 2005, 7, 1 );
181
Date jul31 = getDate( 2005, 7, 31 );
182
Date aug01 = getDate( 2005, 8, 1 );
183
Date aug31 = getDate( 2005, 8, 31 );
185
periodA = createPeriod( periodType, jul01, jul31 );
186
periodB = createPeriod( periodType, aug01, aug31 );
187
periodC = createPeriod( periodType, jul01, aug31 );
189
periodIds.add( periodService.addPeriod( periodA ) );
190
periodIds.add( periodService.addPeriod( periodB ) );
191
periodIds.add( periodService.addPeriod( periodC ) );
193
// ---------------------------------------------------------------------
194
// Setup OrganisationUnits
195
// ---------------------------------------------------------------------
197
unitA = createOrganisationUnit( 'A' );
198
unitB = createOrganisationUnit( 'B', unitA );
199
unitC = createOrganisationUnit( 'C', unitA );
201
organisationUnitIds.add( organisationUnitService.addOrganisationUnit( unitA ) );
202
organisationUnitIds.add( organisationUnitService.addOrganisationUnit( unitB ) );
203
organisationUnitIds.add( organisationUnitService.addOrganisationUnit( unitC ) );
205
organisationUnitService.addOrganisationUnitHierarchy( new Date() ); //TODO
208
public void testSumIntDataElementDataMart()
210
dataElementA.setType( DataElement.TYPE_INT );
211
dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
212
dataElementService.updateDataElement( dataElementA );
214
// ---------------------------------------------------------------------
216
// ---------------------------------------------------------------------
218
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, "40", categoryOptionComboA ) );
219
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, "20", categoryOptionComboB ) );
220
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "90", categoryOptionComboA ) );
221
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "10", categoryOptionComboB ) );
222
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "25", categoryOptionComboA ) );
223
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "20", categoryOptionComboB ) );
225
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, "40", categoryOptionComboA ) );
226
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, "80", categoryOptionComboB ) );
227
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "70", categoryOptionComboA ) );
228
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "30", categoryOptionComboB ) );
229
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "65", categoryOptionComboA ) );
230
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "40", categoryOptionComboB ) );
232
// ---------------------------------------------------------------------
234
// ---------------------------------------------------------------------
236
dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
238
assertEquals( 90.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitB ) );
239
assertEquals( 70.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitB ) );
240
assertEquals( 160.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitB ) );
241
assertEquals( 10.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitB ) );
242
assertEquals( 30.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitB ) );
243
assertEquals( 40.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitB ) );
245
assertEquals( 25.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitC ) );
246
assertEquals( 65.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitC ) );
247
assertEquals( 90.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitC ) );
248
assertEquals( 20.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitC ) );
249
assertEquals( 40.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitC ) );
250
assertEquals( 60.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitC ) );
252
assertEquals( 155.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitA ) );
253
assertEquals( 175.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitA ) );
254
assertEquals( 330.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitA ) );
255
assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitA ) );
256
assertEquals( 150.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitA ) );
257
assertEquals( 200.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitA ) );
260
public void testAverageIntDataElementDataMart()
262
dataElementA.setType( DataElement.TYPE_INT );
263
dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_AVERAGE );
264
dataElementService.updateDataElement( dataElementA );
266
// ---------------------------------------------------------------------
268
// ---------------------------------------------------------------------
270
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, "40", categoryOptionComboA ) );
271
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, "20", categoryOptionComboB ) );
272
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "90", categoryOptionComboA ) );
273
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "10", categoryOptionComboB ) );
274
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "25", categoryOptionComboA ) );
275
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "20", categoryOptionComboB ) );
277
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, "40", categoryOptionComboA ) );
278
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, "80", categoryOptionComboB ) );
279
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "70", categoryOptionComboA ) );
280
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "30", categoryOptionComboB ) );
281
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "65", categoryOptionComboA ) );
282
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "40", categoryOptionComboB ) );
284
// ---------------------------------------------------------------------
286
// ---------------------------------------------------------------------
288
dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
290
assertEquals( 90.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitB ) );
291
assertEquals( 70.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitB ) );
292
assertEquals( 80.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitB ) );
293
assertEquals( 10.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitB ) );
294
assertEquals( 30.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitB ) );
295
assertEquals( 20.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitB ) );
297
assertEquals( 25.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitC ) );
298
assertEquals( 65.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitC ) );
299
assertEquals( 45.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitC ) );
300
assertEquals( 20.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitC ) );
301
assertEquals( 40.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitC ) );
302
assertEquals( 30.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitC ) );
304
assertEquals( 155.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitA ) );
305
assertEquals( 175.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitA ) );
306
assertEquals( 165.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitA ) );
307
assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitA ) );
308
assertEquals( 150.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitA ) );
309
assertEquals( 100.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitA ) );
312
public void testSumBoolDataElement()
314
dataElementA.setType( DataElement.TYPE_BOOL );
315
dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
316
dataElementService.updateDataElement( dataElementA );
318
// ---------------------------------------------------------------------
320
// ---------------------------------------------------------------------
322
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, T, categoryOptionComboA ) );
323
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, F, categoryOptionComboB ) );
324
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, T, categoryOptionComboA ) );
325
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, F, categoryOptionComboB ) );
326
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, F, categoryOptionComboA ) );
327
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, T, categoryOptionComboB ) );
329
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, T, categoryOptionComboA ) );
330
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, T, categoryOptionComboB ) );
331
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, F, categoryOptionComboA ) );
332
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, T, categoryOptionComboB ) );
333
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, F, categoryOptionComboA ) );
334
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, F, categoryOptionComboB ) );
336
// ---------------------------------------------------------------------
338
// ---------------------------------------------------------------------
340
dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
342
assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitB ) );
343
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitB ) );
344
assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitB ) );
345
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitB ) );
346
assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitB ) );
347
assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitB ) );
349
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitC ) );
350
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitC ) );
351
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitC ) );
352
assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitC ) );
353
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitC ) );
354
assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitC ) );
356
assertEquals( 2.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitA ) );
357
assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitA ) );
358
assertEquals( 3.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitA ) );
359
assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitA ) );
360
assertEquals( 2.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitA ) );
361
assertEquals( 3.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitA ) );
364
public void testAverageBoolDataElement()
366
dataElementA.setType( DataElement.TYPE_BOOL );
367
dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_AVERAGE );
368
dataElementService.updateDataElement( dataElementA );
370
// ---------------------------------------------------------------------
372
// ---------------------------------------------------------------------
374
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, T, categoryOptionComboA ) );
375
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, F, categoryOptionComboB ) );
376
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, T, categoryOptionComboA ) );
377
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, F, categoryOptionComboB ) );
378
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, F, categoryOptionComboA ) );
379
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, T, categoryOptionComboB ) );
381
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, T, categoryOptionComboA ) );
382
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, T, categoryOptionComboB ) );
383
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, F, categoryOptionComboA ) );
384
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, T, categoryOptionComboB ) );
385
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, F, categoryOptionComboA ) );
386
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, F, categoryOptionComboB ) );
388
// ---------------------------------------------------------------------
390
// ---------------------------------------------------------------------
392
dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
394
assertEquals( 100.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitB ) );
395
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitB ) );
396
assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitB ) );
397
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitB ) );
398
assertEquals( 100.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitB ) );
399
assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitB ) );
401
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitC ) );
402
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitC ) );
403
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitC ) );
404
assertEquals( 100.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitC ) );
405
assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitC ) );
406
assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitC ) );
408
assertEquals( 66.7, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitA ) );
409
assertEquals( 33.3, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitA ) );
410
assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitA ) );
411
assertEquals( 33.3, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitA ) );
412
assertEquals( 66.7, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitA ) );
413
assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitA ) );
416
public void testIndicator()
418
dataElementA.setType( DataElement.TYPE_INT );
419
dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
420
dataElementService.updateDataElement( dataElementA );
422
// ---------------------------------------------------------------------
424
// ---------------------------------------------------------------------
426
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "9", categoryOptionComboA ) );
427
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "3", categoryOptionComboB ) );
428
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "1", categoryOptionComboA ) );
429
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "5", categoryOptionComboB ) );
431
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "3", categoryOptionComboA ) );
432
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "2", categoryOptionComboB ) );
433
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "7", categoryOptionComboA ) );
434
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "9", categoryOptionComboB ) );
436
// ---------------------------------------------------------------------
438
// ---------------------------------------------------------------------
440
IndicatorType indicatorType = createIndicatorType( 'A' ); // Factor = 100
442
indicatorService.addIndicatorType( indicatorType );
444
Indicator indicatorA = createIndicator( 'A', indicatorType );
446
String suffixA = Expression.SEPARATOR + categoryOptionComboA.getId();
447
String suffixB = Expression.SEPARATOR + categoryOptionComboB.getId();
449
indicatorA.setNumerator( "[" + dataElementA.getId() + suffixA + "]*[" + dataElementA.getId() + suffixB + "]" );
450
indicatorA.setNumeratorAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
452
indicatorA.setDenominator( "1" );
453
indicatorA.setDenominatorAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
455
indicatorIds.add( indicatorService.addIndicator( indicatorA ) );
457
// ---------------------------------------------------------------------
459
// ---------------------------------------------------------------------
461
dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
463
assertEquals( 2700.0, dataMartStore.getAggregatedValue( indicatorA, periodA, unitB ) );
464
assertEquals( 600.0, dataMartStore.getAggregatedValue( indicatorA, periodB, unitB ) );
465
assertEquals( 6000.0, dataMartStore.getAggregatedValue( indicatorA, periodC, unitB ) );
467
assertEquals( 500.0, dataMartStore.getAggregatedValue( indicatorA, periodA, unitC ) );
468
assertEquals( 6300.0, dataMartStore.getAggregatedValue( indicatorA, periodB, unitC ) );
469
assertEquals( 11200.0, dataMartStore.getAggregatedValue( indicatorA, periodC, unitC ) );
471
assertEquals( 8000.0, dataMartStore.getAggregatedValue( indicatorA, periodA, unitA ) );
472
assertEquals( 11000.0, dataMartStore.getAggregatedValue( indicatorA, periodB, unitA ) );
473
assertEquals( 38000.0, dataMartStore.getAggregatedValue( indicatorA, periodC, unitA ) );
476
public void testAnnualizedIndicator()
478
dataElementA.setType( DataElement.TYPE_INT );
479
dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
480
dataElementService.updateDataElement( dataElementA );
482
// ---------------------------------------------------------------------
484
// ---------------------------------------------------------------------
486
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "9", categoryOptionComboA ) );
487
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "3", categoryOptionComboB ) );
488
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "1", categoryOptionComboA ) );
489
dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "5", categoryOptionComboB ) );
491
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "3", categoryOptionComboA ) );
492
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "2", categoryOptionComboB ) );
493
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "7", categoryOptionComboA ) );
494
dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "9", categoryOptionComboB ) );
496
// ---------------------------------------------------------------------
498
// ---------------------------------------------------------------------
500
IndicatorType indicatorType = createIndicatorType( 'A' ); // Factor = 100
502
indicatorService.addIndicatorType( indicatorType );
504
Indicator indicatorA = createIndicator( 'A', indicatorType );
506
indicatorA.setAnnualized( true );
508
String suffixA = Expression.SEPARATOR + categoryOptionComboA.getId();
509
String suffixB = Expression.SEPARATOR + categoryOptionComboB.getId();
511
indicatorA.setNumerator( "[" + dataElementA.getId() + suffixA + "]*[" + dataElementA.getId() + suffixB + "]" );
512
indicatorA.setNumeratorAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
514
indicatorA.setDenominator( "1" );
515
indicatorA.setDenominatorAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
517
indicatorIds.add( indicatorService.addIndicator( indicatorA ) );
519
// ---------------------------------------------------------------------
521
// ---------------------------------------------------------------------
523
dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
525
assertEquals( 31790.3, dataMartStore.getAggregatedValue( indicatorA, periodA, unitB ) );
526
assertEquals( 7064.5, dataMartStore.getAggregatedValue( indicatorA, periodB, unitB ) );
527
assertEquals( 35322.6, dataMartStore.getAggregatedValue( indicatorA, periodC, unitB ) );
529
assertEquals( 5887.1, dataMartStore.getAggregatedValue( indicatorA, periodA, unitC ) );
530
assertEquals( 74177.4, dataMartStore.getAggregatedValue( indicatorA, periodB, unitC ) );
531
assertEquals( 65935.5, dataMartStore.getAggregatedValue( indicatorA, periodC, unitC ) );
533
assertEquals( 94193.5, dataMartStore.getAggregatedValue( indicatorA, periodA, unitA ) );
534
assertEquals( 129516.1, dataMartStore.getAggregatedValue( indicatorA, periodB, unitA ) );
535
assertEquals( 223709.7, dataMartStore.getAggregatedValue( indicatorA, periodC, unitA ) );