diff --git a/superset/assets/javascripts/explore/stores/visTypes.js b/superset/assets/javascripts/explore/stores/visTypes.js index 38ff52d23a..9d62eada88 100644 --- a/superset/assets/javascripts/explore/stores/visTypes.js +++ b/superset/assets/javascripts/explore/stores/visTypes.js @@ -1112,9 +1112,10 @@ export const visTypes = { }, secondary_metric: { label: t('Secondary Metric'), - description: t('This secondary metric is used to ' + + default: null, + description: t('[optional] this secondary metric is used to ' + 'define the color as a ratio against the primary metric. ' + - 'If the two metrics match, color is mapped level groups'), + 'When omitted, the color is categorical and based on labels'), }, groupby: { label: t('Hierarchy'), diff --git a/superset/assets/visualizations/sunburst.js b/superset/assets/visualizations/sunburst.js index 41859e3a2d..199d182a33 100644 --- a/superset/assets/visualizations/sunburst.js +++ b/superset/assets/visualizations/sunburst.js @@ -347,7 +347,7 @@ function sunburstVis(slice, payload) { let ext; const fd = slice.formData; - if (fd.metric !== fd.secondary_metric) { + if (fd.metric !== fd.secondary_metric && fd.secondary_metric) { colorByCategory = false; ext = d3.extent(nodes, d => d.m2 / d.m1); colorScale = d3.scale.linear() diff --git a/superset/viz.py b/superset/viz.py index d66884a3b6..4ab345c5d0 100644 --- a/superset/viz.py +++ b/superset/viz.py @@ -1407,24 +1407,22 @@ class SunburstViz(BaseViz): '@bl.ocks.org') def get_data(self, df): - - # if m1 == m2 duplicate the metric column - cols = self.form_data.get('groupby') - metric = self.form_data.get('metric') - secondary_metric = self.form_data.get('secondary_metric') - if metric == secondary_metric: - ndf = df - ndf.columns = [cols + ['m1', 'm2']] - else: - cols += [ - self.form_data['metric'], self.form_data['secondary_metric']] - ndf = df[cols] - return json.loads(ndf.to_json(orient='values')) # TODO fix this nonsense + fd = self.form_data + cols = fd.get('groupby') + metric = fd.get('metric') + secondary_metric = fd.get('secondary_metric') + if metric == secondary_metric or secondary_metric is None: + df.columns = cols + ['m1'] + df['m2'] = df['m1'] + return json.loads(df.to_json(orient='values')) def query_obj(self): qry = super(SunburstViz, self).query_obj() - qry['metrics'] = [ - self.form_data['metric'], self.form_data['secondary_metric']] + fd = self.form_data + qry['metrics'] = [fd['metric']] + secondary_metric = fd.get('secondary_metric') + if secondary_metric and secondary_metric != fd['metric']: + qry['metrics'].append(secondary_metric) return qry