/** * Returns true if an aggregation type is defined, and this is type is {@link #AggregationType.LAST} */ public boolean isLastPeriodAggregationType() { return getAggregationType() != null && getAggregationType().isLastPeriodAggregationType(); }
/** * Makes assertions on the query. * * @param params the data query parameters. */ private void assertQuery( DataQueryParams params ) { Assert.notNull( params.getDataType(), "Data type must be present" ); Assert.notNull( params.getAggregationType(), "Aggregation type must be present" ); Assert.isTrue( !( params.getAggregationType().isLastPeriodAggregationType() && params.getPeriods().size() > 1 ), "Max one dimension period can be present per query for last period aggregation" ); } }
/** * Groups the given query in sub queries for each dimension period. This only applies * if the aggregation type is {@link AggregationType#LAST} or * {@link AggregationType#LAST_AVERAGE_ORG_UNIT}. In this case, each period must be * aggregated individually. * * @param params the data query parameters. * @return a list of {@link DataQueryParams}. */ private List<DataQueryParams> groupByPeriod( DataQueryParams params ) { List<DataQueryParams> queries = new ArrayList<>(); if ( params.getAggregationType().isLastPeriodAggregationType() && !params.getPeriods().isEmpty() ) { for ( DimensionalItemObject period : params.getPeriods() ) { String periodType = ((Period) period).getPeriodType().getName().toLowerCase(); DataQueryParams query = DataQueryParams.newBuilder( params ) .withPeriods( Lists.newArrayList( period ), periodType ).build(); queries.add( query ); } } else { queries.add( params ); } logQuerySplit( queries, "period" ); return queries; }
/** * Generates the from clause of the query SQL. */ private String getFromClause( DataQueryParams params ) { String sql = "from "; if ( params.getAggregationType().isLastPeriodAggregationType() ) { sql += getLastValueSubquerySql( params ); } else if ( params.hasPreAggregateMeasureCriteria() && params.isDataType( DataType.NUMERIC ) ) { sql += getPreMeasureCriteriaSubquerySql( params ); } else { sql += getFromSourceClause( params ); } return sql + " as " + ANALYTICS_TBL_ALIAS + " "; }
if ( params.isAggregateData() && params.hasValueDimension() && params.getAggregationTypeFallback().isLastPeriodAggregationType() )
if ( params.getAggregationType().isLastPeriodAggregationType() )
if ( params.getAggregationTypeFallback().isLastPeriodAggregationType() )