mirror of https://github.com/apache/superset.git
Merge pull request #65 from mistercrunch/custom_having
Adding custom HAVING clause
This commit is contained in:
commit
5968344613
|
@ -155,6 +155,7 @@ class FormFactory(object):
|
||||||
default=default_metric,
|
default=default_metric,
|
||||||
choices=datasource.metrics_combo),
|
choices=datasource.metrics_combo),
|
||||||
'where': TextField('Custom WHERE clause', default=''),
|
'where': TextField('Custom WHERE clause', default=''),
|
||||||
|
'having': TextField('Custom HAVING clause', default=''),
|
||||||
'compare_lag': TextField('Comparison Period Lag',
|
'compare_lag': TextField('Comparison Period Lag',
|
||||||
description="Based on granularity, number of time periods to compare against"),
|
description="Based on granularity, number of time periods to compare against"),
|
||||||
'compare_suffix': TextField('Comparison suffix',
|
'compare_suffix': TextField('Comparison suffix',
|
||||||
|
@ -287,8 +288,9 @@ class FormFactory(object):
|
||||||
|
|
||||||
# datasource type specific form elements
|
# datasource type specific form elements
|
||||||
if datasource.__class__.__name__ == 'SqlaTable':
|
if datasource.__class__.__name__ == 'SqlaTable':
|
||||||
QueryForm.field_order += ['where']
|
QueryForm.field_order += ['where', 'having']
|
||||||
setattr(QueryForm, 'where', px_form_fields['where'])
|
setattr(QueryForm, 'where', px_form_fields['where'])
|
||||||
|
setattr(QueryForm, 'having', px_form_fields['having'])
|
||||||
|
|
||||||
if 'granularity' in viz.form_fields:
|
if 'granularity' in viz.form_fields:
|
||||||
setattr(
|
setattr(
|
||||||
|
|
|
@ -435,6 +435,7 @@ class SqlaTable(Model, Queryable, AuditMixinNullable):
|
||||||
if inner_to_dttm:
|
if inner_to_dttm:
|
||||||
inner_time_filter[1] = timestamp <= inner_to_dttm.isoformat()
|
inner_time_filter[1] = timestamp <= inner_to_dttm.isoformat()
|
||||||
where_clause_and = []
|
where_clause_and = []
|
||||||
|
having_clause_and = []
|
||||||
for col, op, eq in filter:
|
for col, op, eq in filter:
|
||||||
col_obj = cols[col]
|
col_obj = cols[col]
|
||||||
if op in ('in', 'not in'):
|
if op in ('in', 'not in'):
|
||||||
|
@ -449,7 +450,10 @@ class SqlaTable(Model, Queryable, AuditMixinNullable):
|
||||||
where_clause_and.append(cond)
|
where_clause_and.append(cond)
|
||||||
if extras and 'where' in extras:
|
if extras and 'where' in extras:
|
||||||
where_clause_and += [text(extras['where'])]
|
where_clause_and += [text(extras['where'])]
|
||||||
|
if extras and 'having' in extras:
|
||||||
|
having_clause_and += [text(extras['having'])]
|
||||||
qry = qry.where(and_(*(time_filter + where_clause_and)))
|
qry = qry.where(and_(*(time_filter + where_clause_and)))
|
||||||
|
qry = qry.having(and_(*having_clause_and))
|
||||||
qry = qry.order_by(desc(main_metric_expr))
|
qry = qry.order_by(desc(main_metric_expr))
|
||||||
qry = qry.limit(row_limit)
|
qry = qry.limit(row_limit)
|
||||||
|
|
||||||
|
|
|
@ -159,7 +159,8 @@ class BaseViz(object):
|
||||||
# extras are used to query elements specific to a datasource type
|
# extras are used to query elements specific to a datasource type
|
||||||
# for instance the extra where clause that applies only to Tables
|
# for instance the extra where clause that applies only to Tables
|
||||||
extras = {
|
extras = {
|
||||||
'where': form_data.get("where", '')
|
'where': form_data.get("where", ''),
|
||||||
|
'having': form_data.get("having", ''),
|
||||||
}
|
}
|
||||||
d = {
|
d = {
|
||||||
'granularity': granularity,
|
'granularity': granularity,
|
||||||
|
|
Loading…
Reference in New Issue