예제 #1
0
    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
예제 #2
0
파일: util.py 프로젝트: xbryanc/commcare-hq
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'
    }
예제 #3
0
파일: util.py 프로젝트: dimagi/commcare-hq
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'
    }
예제 #4
0
    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()
예제 #5
0
 def get_column_config(self, data_source_config, lang):
     return get_expanded_column_config(data_source_config, self, lang)
예제 #6
0
파일: specs.py 프로젝트: dimagi/commcare-hq
 def get_column_config(self, data_source_config, lang):
     return get_expanded_column_config(data_source_config, self, lang)