From cc0942ac988fc09538da14495f05411fcf2ac5e8 Mon Sep 17 00:00:00 2001 From: Gabe Lyons Date: Thu, 31 May 2018 23:34:48 -0700 Subject: [PATCH] updating adhoc metric filtering (#5105) --- .../components/MetricsControl_spec.jsx | 21 +++++++++++++++---- .../components/controls/MetricsControl.jsx | 4 ++-- superset/assets/src/explore/constants.js | 1 + 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx index 5d2e1e334..9aa553ca8 100644 --- a/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx +++ b/superset/assets/spec/javascripts/explore/components/MetricsControl_spec.jsx @@ -211,8 +211,8 @@ describe('MetricsControl', () => { expect(!!wrapper.instance().selectFilterOption( { - metric_name: 'a_metric', - optionName: 'a_metric', + metric_name: 'avg__metric', + optionName: 'avg__metric', expression: 'AVG(metric)', }, 'a', @@ -238,14 +238,27 @@ describe('MetricsControl', () => { expect(!!wrapper.instance().selectFilterOption( { - metric_name: 'a_metric', - optionName: 'a_metric', + metric_name: 'avg__metric', + optionName: 'avg__metric', expression: 'AVG(metric)', }, 'a', )).to.be.false; }); + it('includes custom made simple saved metrics', () => { + const { wrapper } = setup(); + + expect(!!wrapper.instance().selectFilterOption( + { + metric_name: 'my_fancy_sum_metric', + optionName: 'my_fancy_sum_metric', + expression: 'SUM(value)', + }, + 'sum', + )).to.be.true; + }); + it('excludes auto generated metrics', () => { const { wrapper } = setup(); diff --git a/superset/assets/src/explore/components/controls/MetricsControl.jsx b/superset/assets/src/explore/components/controls/MetricsControl.jsx index b7ed1f205..bc0b72a4d 100644 --- a/superset/assets/src/explore/components/controls/MetricsControl.jsx +++ b/superset/assets/src/explore/components/controls/MetricsControl.jsx @@ -13,7 +13,7 @@ import savedMetricType from '../../propTypes/savedMetricType'; import adhocMetricType from '../../propTypes/adhocMetricType'; import { AGGREGATES, - sqlaAutoGeneratedMetricRegex, + sqlaAutoGeneratedMetricNameRegex, druidAutoGeneratedMetricRegex, } from '../../constants'; @@ -210,7 +210,7 @@ export default class MetricsControl extends React.PureComponent { if (this.props.datasourceType === 'druid') { return druidAutoGeneratedMetricRegex.test(savedMetric.verbose_name); } - return sqlaAutoGeneratedMetricRegex.test(savedMetric.expression); + return sqlaAutoGeneratedMetricNameRegex.test(savedMetric.metric_name); } selectFilterOption(option, filterValue) { diff --git a/superset/assets/src/explore/constants.js b/superset/assets/src/explore/constants.js index 9a8acc804..39d706378 100644 --- a/superset/assets/src/explore/constants.js +++ b/superset/assets/src/explore/constants.js @@ -32,5 +32,6 @@ export const HAVING_OPERATORS = [ ]; export const MULTI_OPERATORS = [OPERATORS.in, OPERATORS['not in']]; +export const sqlaAutoGeneratedMetricNameRegex = /^(sum|min|max|avg|count|count_distinct)__.*$/i; export const sqlaAutoGeneratedMetricRegex = /^(LONG|DOUBLE|FLOAT)?(SUM|AVG|MAX|MIN|COUNT)\([A-Z0-9_."]*\)$/i; export const druidAutoGeneratedMetricRegex = /^(LONG|DOUBLE|FLOAT)?(SUM|MAX|MIN|COUNT)\([A-Z0-9_."]*\)$/i;