use of org.hisp.dhis.analytics.DataQueryParams in project dhis2-core by dhis2.
the class DataQueryServiceTest method testGetFromUrlNoPeriodsAllowAllPeriods.
@Test
public void testGetFromUrlNoPeriodsAllowAllPeriods() {
Set<String> dimensionParams = new HashSet<>();
dimensionParams.add("dx:" + deA.getUid() + ";" + deB.getUid() + ";" + deC.getUid() + ";" + deD.getUid());
dimensionParams.add("pe");
DataQueryParams params = dataQueryService.getFromUrl(dimensionParams, null, null, null, null, null, null, false, false, false, false, false, false, false, false, false, false, null, null, null, false, null, null, null, true, null);
assertEquals(0, params.getPeriods().size());
}
use of org.hisp.dhis.analytics.DataQueryParams in project dhis2-core by dhis2.
the class DataQueryServiceTest method testGetFromUrlPeriodOrder.
@Test
public void testGetFromUrlPeriodOrder() {
Set<String> dimensionParams = new HashSet<>();
dimensionParams.add("dx:" + deA.getUid() + ";" + deB.getUid() + ";" + deC.getUid() + ";" + deD.getUid());
dimensionParams.add("pe:2013;2012Q4;2012S2");
Set<String> filterParams = new HashSet<>();
filterParams.add("ou:" + ouA.getUid());
DataQueryParams params = dataQueryService.getFromUrl(dimensionParams, filterParams, null, null, null, null, null, false, false, false, false, false, false, false, false, false, false, null, null, null, false, null, null, null, false, null);
List<DimensionalItemObject> periods = params.getPeriods();
assertEquals(3, periods.size());
assertEquals("2013", periods.get(0).getUid());
assertEquals("2012Q4", periods.get(1).getUid());
assertEquals("2012S2", periods.get(2).getUid());
}
use of org.hisp.dhis.analytics.DataQueryParams in project dhis2-core by dhis2.
the class DataQueryServiceTest method testGetFromUrlWithCodeB.
@Test
public void testGetFromUrlWithCodeB() {
Set<String> dimensionParams = new HashSet<>();
dimensionParams.add("dx:" + deA.getCode() + ";" + deB.getCode() + ";" + inA.getCode());
Set<String> filterParams = new HashSet<>();
filterParams.add("ou:" + ouA.getCode());
DataQueryParams params = dataQueryService.getFromUrl(dimensionParams, filterParams, null, null, null, null, null, false, false, false, false, false, false, false, false, false, false, null, null, IdScheme.CODE, false, null, null, null, false, null);
assertEquals(2, params.getDataElements().size());
assertEquals(1, params.getIndicators().size());
assertEquals(1, params.getFilterOrganisationUnits().size());
}
use of org.hisp.dhis.analytics.DataQueryParams in project dhis2-core by dhis2.
the class DataQueryServiceTest method testGetFromUrlRelativePeriods.
@Test
public void testGetFromUrlRelativePeriods() {
Set<String> dimensionParams = new HashSet<>();
dimensionParams.add("dx:" + deA.getDimensionItem() + ";" + deB.getDimensionItem() + ";" + deC.getDimensionItem() + ";" + deD.getDimensionItem());
dimensionParams.add("pe:LAST_12_MONTHS");
Set<String> filterParams = new HashSet<>();
filterParams.add("ou:" + ouA.getDimensionItem() + ";" + ouB.getDimensionItem());
DataQueryParams params = dataQueryService.getFromUrl(dimensionParams, filterParams, null, null, null, null, null, false, false, false, false, false, false, false, false, false, false, null, null, null, false, null, null, null, false, null);
assertEquals(4, params.getDataElements().size());
assertEquals(12, params.getPeriods().size());
assertEquals(2, params.getFilterOrganisationUnits().size());
}
use of org.hisp.dhis.analytics.DataQueryParams in project dhis2-core by dhis2.
the class DefaultAnalyticsService method addReportingRates.
/**
* Adds reporting rates to the given grid based on the given data query
* parameters and reporting rate metric.
*
* @param params the {@link DataQueryParams}.
* @param grid the grid.
* @param metric the reporting rate metric.
*/
private void addReportingRates(DataQueryParams params, Grid grid, ReportingRateMetric metric) {
if (!params.getReportingRates().isEmpty() && !params.isSkipData()) {
if (!COMPLETENESS_DIMENSION_TYPES.containsAll(params.getDimensionTypes())) {
return;
}
DataQueryParams targetParams = DataQueryParams.newBuilder(params).withSkipPartitioning(true).withTimely(false).withRestrictByOrgUnitOpeningClosedDate(true).withRestrictByCategoryOptionStartEndDate(true).withAggregationType(AggregationType.SUM).build();
Map<String, Double> targetMap = getAggregatedCompletenessTargetMap(targetParams);
Map<String, Double> dataMap = metric != EXPECTED_REPORTS ? getAggregatedCompletenessValueMap(params) : new HashMap<>();
Integer periodIndex = params.getPeriodDimensionIndex();
Integer dataSetIndex = DataQueryParams.DX_INDEX;
Map<String, PeriodType> dsPtMap = params.getDataSetPeriodTypeMap();
PeriodType filterPeriodType = params.getFilterPeriodType();
for (Map.Entry<String, Double> entry : targetMap.entrySet()) {
List<String> dataRow = Lists.newArrayList(entry.getKey().split(DIMENSION_SEP));
Double target = entry.getValue();
Double actual = dataMap.get(entry.getKey());
if (target != null && (actual != null || metric == EXPECTED_REPORTS)) {
// ---------------------------------------------------------
// Multiply target value by number of periods in time span
// ---------------------------------------------------------
PeriodType queryPt = filterPeriodType != null ? filterPeriodType : getPeriodTypeFromIsoString(dataRow.get(periodIndex));
PeriodType dataSetPt = dsPtMap.get(dataRow.get(dataSetIndex));
target = target * queryPt.getPeriodSpan(dataSetPt);
// ---------------------------------------------------------
// Calculate reporting rate and replace data set with rate
// ---------------------------------------------------------
Double value = 0d;
if (EXPECTED_REPORTS == metric) {
value = target;
} else if (ACTUAL_REPORTS == metric || ACTUAL_REPORTS_ON_TIME == metric) {
value = actual;
} else if (// REPORTING_RATE or REPORTING_RATE_ON_TIME
!MathUtils.isZero(target)) {
value = (actual * PERCENT) / target;
}
String reportingRate = DimensionalObjectUtils.getDimensionItem(dataRow.get(DX_INDEX), metric);
dataRow.set(DX_INDEX, reportingRate);
grid.addRow().addValues(dataRow.toArray()).addValue(params.isSkipRounding() ? value : MathUtils.getRounded(value));
if (params.isIncludeNumDen()) {
grid.addValue(actual).addValue(target).addValue(PERCENT);
}
}
}
}
}
Aggregations