Adding the MetricsControl to the timeseries_limit_metric field

This commit is contained in:
Michelle Thomas 2018-05-23 18:16:27 -07:00
parent d322e48c57
commit 6f05b48385
3 changed files with 20 additions and 6 deletions

View File

@ -959,12 +959,14 @@ export const controls = {
},
timeseries_limit_metric: {
type: 'SelectControl',
type: 'MetricsControl',
label: t('Sort By'),
default: null,
description: t('Metric used to define the top series'),
mapStateToProps: state => ({
choices: (state.datasource) ? state.datasource.metrics_combo : [],
columns: state.datasource ? state.datasource.columns : [],
savedMetrics: state.datasource ? state.datasource.metrics : [],
datasourceType: state.datasource && state.datasource.type,
}),
},

View File

@ -1148,6 +1148,11 @@ class DruidDatasource(Model, BaseDatasource):
metric['column']['type'].upper() == 'FLOAT'
):
metric['column']['type'] = 'DOUBLE'
if (
utils.is_adhoc_metric(timeseries_limit_metric) and
timeseries_limit_metric['column']['type'].upper() == 'FLOAT'
):
timeseries_limit_metric['column']['type'] = 'DOUBLE'
aggregations, post_aggs = DruidDatasource.metrics_and_post_aggs(
metrics,
@ -1203,7 +1208,7 @@ class DruidDatasource(Model, BaseDatasource):
logging.info('Running two-phase topn query for dimension [{}]'.format(dim))
pre_qry = deepcopy(qry)
if timeseries_limit_metric:
order_by = timeseries_limit_metric
order_by = utils.get_metric_name(timeseries_limit_metric)
aggs_dict, post_aggs_dict = DruidDatasource.metrics_and_post_aggs(
[timeseries_limit_metric],
metrics_dict)
@ -1272,7 +1277,7 @@ class DruidDatasource(Model, BaseDatasource):
order_by = pre_qry_dims[0]
if timeseries_limit_metric:
order_by = timeseries_limit_metric
order_by = utils.get_metric_name(timeseries_limit_metric)
aggs_dict, post_aggs_dict = DruidDatasource.metrics_and_post_aggs(
[timeseries_limit_metric],
metrics_dict)

View File

@ -675,8 +675,15 @@ class SqlaTable(Model, BaseDatasource):
ob = inner_main_metric_expr
if timeseries_limit_metric:
timeseries_limit_metric = metrics_dict.get(timeseries_limit_metric)
ob = timeseries_limit_metric.sqla_col
if utils.is_adhoc_metric(timeseries_limit_metric):
ob = self.adhoc_metric_to_sa(timeseries_limit_metric, cols)
elif timeseries_limit_metric in metrics_dict:
timeseries_limit_metric = metrics_dict.get(
timeseries_limit_metric,
)
ob = timeseries_limit_metric.sqla_col
else:
raise Exception(_("Metric '{}' is not valid".format(m)))
direction = desc if order_desc else asc
subq = subq.order_by(direction(ob))
subq = subq.limit(timeseries_limit)