ltv账号筛选条件

This commit is contained in:
wuaho 2021-09-13 12:17:47 +08:00
parent 74be7a6ed3
commit 39989a130f

View File

@ -25,11 +25,12 @@ class XAnalysis:
self.events = [] self.events = []
self.global_filters = [] self.global_filters = []
self.account_filters = []
def _get_global_filters(self): def _get_global_filters(self):
return self.event_view.get('filts') or [] return self.event_view.get('filts') or []
async def init(self,*args, **kwargs): async def init(self, *args, **kwargs):
if self.data_in.report_id: if self.data_in.report_id:
db = get_database() db = get_database()
report = await crud.report.get(db, id=self.data_in.report_id) report = await crud.report.get(db, id=self.data_in.report_id)
@ -54,11 +55,11 @@ class XAnalysis:
self.global_filters = self._get_global_filters() self.global_filters = self._get_global_filters()
# 用户自带过滤 # 用户自带过滤
if 'data_where' in kwargs: if 'data_where' in kwargs:
self.global_filters.extend(kwargs['data_where'].get(self.game, [])) self.account_filters = kwargs['data_where'].get(self.game, [])
def handler_filts(self): def handler_filts(self, filters):
where = [] where = []
for item in self.global_filters: for item in filters:
col = sa.Column(item['columnName']) col = sa.Column(item['columnName'])
@ -121,20 +122,27 @@ class XAnalysis:
sql = str(qry.compile(compile_kwargs={"literal_binds": True})) sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
where_str = sql.split('WHERE ')[1] where_str = sql.split('WHERE ')[1]
where_order = self.handler_filts() where_order = self.handler_filts(self.global_filters)
where_order_str = 1 where_order_str = 1
if where_order: if where_order:
qry = sa.select().where(*where_order) qry = sa.select().where(*where_order)
sql = str(qry.compile(compile_kwargs={"literal_binds": True})) sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
where_order_str = sql.split('WHERE ')[1] where_order_str = sql.split('WHERE ')[1]
where_account = self.handler_filts(self.account_filters)
where_account_str = 1
if where_account:
qry = sa.select().where(*where_account)
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
where_account_str = sql.split('WHERE ')[1]
sql = f"""SELECT toString(reg.date) as date, sql = f"""SELECT toString(reg.date) as date,
cnt1, cnt1,
{select_ltv_str} {select_ltv_str}
FROM (SELECT toDate(addHours(`#event_time`, `#zone_offset`)) as date, uniqExact(`{quota}`) cnt1 FROM (SELECT toDate(addHours(`#event_time`, `#zone_offset`)) as date, uniqExact(`{quota}`) cnt1
FROM {self.game}.event FROM {self.game}.event
where `#event_name` = 'create_account' where `#event_name` = 'create_account'
AND {where_str} AND {where_str} AND {where_account_str}
GROUP BY toDate(addHours(`#event_time`, `#zone_offset`))) as reg GROUP BY toDate(addHours(`#event_time`, `#zone_offset`))) as reg
left join left join
(select a.date, (select a.date,
@ -142,16 +150,16 @@ class XAnalysis:
from (SELECT toDate(addHours(`#event_time`, `#zone_offset`)) as date, `{quota}` from (SELECT toDate(addHours(`#event_time`, `#zone_offset`)) as date, `{quota}`
FROM {self.game}.event FROM {self.game}.event
where `#event_name` = 'create_account' where `#event_name` = 'create_account'
and {where_str}) as a AND {where_str} AND {where_account_str} ) as a
left join (select `{quota}`, unitPrice/100 as money, toDate(addHours(`#event_time`, `#zone_offset`)) as date left join (select `{quota}`, unitPrice/100 as money, toDate(addHours(`#event_time`, `#zone_offset`)) as date
from {self.game}.event from {self.game}.event
where `#event_name` = 'pay' and {where_order_str}) b where `#event_name` = 'pay' and {where_order_str} AND {where_account_str}) b
on a.`{quota}` = b.`{quota}` on a.`{quota}` = b.`{quota}`
group by a.date) log on reg.date = log.date group by a.date) log on reg.date = log.date
order by date order by date
""" """
print(sql) print(sql)
return {'sql': sql,'quota':quota, return {'sql': sql, 'quota': quota,
'start_date': self.event_view['startTime'][:10], 'start_date': self.event_view['startTime'][:10],
'end_date': self.event_view['endTime'][:10], 'end_date': self.event_view['endTime'][:10],
} }