mirror of https://github.com/apache/superset.git
Now supporting multi-metric selection
This commit is contained in:
parent
8b175638cd
commit
d268b6b231
|
@ -19,7 +19,7 @@
|
|||
<hr>
|
||||
<form method="GET">
|
||||
<div>{{ form.viz_type.label }}: {{ form.viz_type(class_="form-control select2") }}</div>
|
||||
<div>{{ form.metric.label }}: {{ form.metric(class_="form-control select2") }}</div>
|
||||
<div>{{ form.metrics.label }}: {{ form.metrics(class_="form-control select2") }}</div>
|
||||
<div>{{ form.granularity.label }}: {{ form.granularity(class_="form-control select2_free_granularity") }}</div>
|
||||
<div class="row">
|
||||
<div class="form-group">
|
||||
|
|
|
@ -41,7 +41,7 @@ def form_factory(datasource, form_args=None):
|
|||
viz_type = SelectField(
|
||||
'Viz',
|
||||
choices=[(k, v.verbose_name) for k, v in viz.viz_types.items()])
|
||||
metric = SelectField('Metric', choices=datasource.metrics_combo)
|
||||
metrics = SelectMultipleField('Metrics', choices=datasource.metrics_combo)
|
||||
groupby = SelectMultipleField(
|
||||
'Group by', choices=[
|
||||
(s, s) for s in datasource.groupby_column_names])
|
||||
|
|
31
app/viz.py
31
app/viz.py
|
@ -23,7 +23,9 @@ class BaseViz(object):
|
|||
self.datasource = datasource
|
||||
self.form_class = form_class
|
||||
self.form_data = form_data
|
||||
self.metric = form_data.get('metric', 'count')
|
||||
self.metrics = form_data.getlist('metrics') or ['count']
|
||||
self.groupby = form_data.getlist('groupby') or []
|
||||
|
||||
self.df = self.bake_query()
|
||||
self.view = view
|
||||
if self.df is not None:
|
||||
|
@ -70,7 +72,7 @@ class BaseViz(object):
|
|||
granularity = utils.parse_human_timedelta(granularity).total_seconds() * 1000
|
||||
aggregations = {
|
||||
m.metric_name: m.json_obj
|
||||
for m in ds.metrics if m.metric_name == self.metric
|
||||
for m in ds.metrics if m.metric_name in self.metrics
|
||||
}
|
||||
limit = int(
|
||||
args.get("limit", config.ROW_LIMIT)) or config.ROW_LIMIT
|
||||
|
@ -94,7 +96,7 @@ class BaseViz(object):
|
|||
"type": "default",
|
||||
"limit": limit,
|
||||
"columns": [{
|
||||
"dimension": self.metric,
|
||||
"dimension": self.metrics[0],
|
||||
"direction": "descending",
|
||||
}],
|
||||
},
|
||||
|
@ -156,13 +158,12 @@ class TimeSeriesViz(HighchartsViz):
|
|||
chart_kind = "line"
|
||||
|
||||
def render(self):
|
||||
metric = self.metric
|
||||
metrics = self.metrics
|
||||
df = self.df
|
||||
df = df.pivot_table(
|
||||
index="timestamp",
|
||||
columns=[
|
||||
col for col in df.columns if col not in ["timestamp", metric]],
|
||||
values=[metric])
|
||||
columns=self.groupby,
|
||||
values=metrics)
|
||||
|
||||
chart_js = serialize(
|
||||
df, kind=self.chart_kind, stacked=self.stacked, **CHART_ARGS)
|
||||
|
@ -226,13 +227,11 @@ class DistributionBarViz(HighchartsViz):
|
|||
return d
|
||||
|
||||
def render(self):
|
||||
metric = self.metric
|
||||
df = self.df
|
||||
df = df.pivot_table(
|
||||
index=[
|
||||
col for col in df.columns if col not in ['timestamp', metric]],
|
||||
values=[metric])
|
||||
df = df.sort(metric, ascending=False)
|
||||
index=self.groupby,
|
||||
values=self.metrics)
|
||||
df = df.sort(self.metrics[0], ascending=False)
|
||||
chart_js = serialize(
|
||||
df, kind=self.chart_kind, **CHART_ARGS)
|
||||
return super(DistributionBarViz, self).render(chart_js=chart_js)
|
||||
|
@ -248,13 +247,11 @@ class DistributionPieViz(HighchartsViz):
|
|||
return d
|
||||
|
||||
def render(self):
|
||||
metric = self.metric
|
||||
df = self.df
|
||||
df = df.pivot_table(
|
||||
index=[
|
||||
col for col in df.columns if col not in ['timestamp', metric]],
|
||||
values=[metric])
|
||||
df = df.sort(metric, ascending=False)
|
||||
index=self.groupby,
|
||||
values=[self.metrics[0]])
|
||||
df = df.sort(self.metrics[0], ascending=False)
|
||||
chart_js = serialize(
|
||||
df, kind=self.chart_kind, **CHART_ARGS)
|
||||
return super(DistributionPieViz, self).render(chart_js=chart_js)
|
||||
|
|
Loading…
Reference in New Issue