allow dimensions to provide custom query for members (fixes #15170)

This commit is contained in:
Benjamin Dauvergne 2017-02-21 15:31:24 +01:00
parent 1978ba356b
commit 573012169d
2 changed files with 12 additions and 8 deletions

View File

@ -43,14 +43,16 @@ class EngineDimension(object):
def members(self):
assert self.dimension.type != 'date'
cursor = self.engine.get_cursor()
if self.dimension.join:
join = self.engine_cube.get_join(self.dimension.join[-1])
sql = 'SELECT %s AS value, %s::text AS label FROM %s AS %s ORDER BY %s' % (
self.value, self.value_label or self.value, join.table, join.name, self.order_by or
self.value)
else:
sql = 'SELECT %s AS value, %s::text AS label FROM {fact_table} ORDER BY %s' % (
self.value, self.value_label or self.value, self.self.order_by or self.value)
sql = self.members_query
if not sql:
if self.dimension.join:
join = self.engine_cube.get_join(self.dimension.join[-1])
sql = 'SELECT %s AS value, %s::text AS label FROM %s AS %s ORDER BY %s' % (
self.value, self.value_label or self.value, join.table, join.name,
self.order_by or self.value)
else:
sql = 'SELECT %s AS value, %s::text AS label FROM {fact_table} ORDER BY %s' % (
self.value, self.value_label or self.value, self.self.order_by or self.value)
sql = sql.format(fact_table=self.engine_cube.fact_table)
self.engine.log.debug('SQL: %s', sql)
cursor.execute(sql)

View File

@ -139,6 +139,7 @@ class Dimension(Base):
'order_by': str,
'group_by': str,
'filter': bool,
'members_query': str,
}
label = None
@ -147,6 +148,7 @@ class Dimension(Base):
group_by = None
join = None
filter = True
members_query = None
@property
def dimensions(self):