def _get_aggregated_results(self, start, limit): query = self._get_aggregated_query(start, limit) hits = getattr(query.aggregations, self.aggregation_columns[0]).raw hits = hits[self.aggregation_columns[0]]['buckets'][start:] ret = [] for row in hits: r = {} for report_column in self.top_level_columns: if report_column.type == 'expanded': # todo aggregation only supports # of docs matching for sub_col in get_expanded_column_config( self.config, report_column, 'en').columns: # todo move interpretation of data into column config r[sub_col.ui_alias] = row[ sub_col.es_alias]['doc_count'] elif report_column.field == self.aggregation_columns[0]: r[report_column.column_id] = row['key'] elif report_column.aggregation == 'sum': r[report_column.column_id] = int( row[report_column.field]['value']) else: r[report_column.column_id] = row[ report_column.field]['doc_count'] ret.append(r) return ret
def get_expanded_columns(column_configs, data_source_config): return { column_config.column_id: [ sql_col.slug for sql_col in get_expanded_column_config( data_source_config, column_config, 'en').columns ] for column_config in column_configs if column_config.type == 'expanded' }
def get_expanded_columns(column_configs, data_source_config): return { column_config.column_id: [ sql_col.slug for sql_col in get_expanded_column_config( data_source_config, column_config, 'en' ).columns ] for column_config in column_configs if column_config.type == 'expanded' }
def _get_aggregated_query(self, start, limit): max_size = (start or 0) + (limit or 0) query = HQESQuery(self.table_name).size(0) for filter in self.filters: query = query.filter(filter) top_agg = TermsAggregation(self.aggregation_columns[0], self.aggregation_columns[0], size=max_size) for agg_column in self.aggregation_columns[1:]: # todo support multiple aggregations pass aggregations = [] for col in self.top_level_columns: if col.type == 'expanded': for sub_col in get_expanded_column_config( self.config, col, 'en').columns: aggregations.append(sub_col.aggregation) elif col.type == 'field': if col.aggregation == 'sum': # todo push this to the column aggregations.append(SumAggregation(col.field, col.field)) for agg in aggregations: top_agg = top_agg.aggregation(agg) if self.order_by: # todo sort by more than one column # todo sort by by something other than the first aggregate column col, desc = self.order_by[0] if col == self.aggregation_columns[ 0] or col == self.top_level_columns[0].field: top_agg = top_agg.order('_count', desc) query = query.aggregation(top_agg) return query.run()
def get_column_config(self, data_source_config, lang): return get_expanded_column_config(data_source_config, self, lang)