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.global_filters = []
self.account_filters = []
def _get_global_filters(self):
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:
db = get_database()
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()
# 用户自带过滤
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 = []
for item in self.global_filters:
for item in filters:
col = sa.Column(item['columnName'])
@ -121,20 +122,27 @@ class XAnalysis:
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
where_str = sql.split('WHERE ')[1]
where_order = self.handler_filts()
where_order = self.handler_filts(self.global_filters)
where_order_str = 1
if where_order:
qry = sa.select().where(*where_order)
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
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,
cnt1,
{select_ltv_str}
FROM (SELECT toDate(addHours(`#event_time`, `#zone_offset`)) as date, uniqExact(`{quota}`) cnt1
FROM {self.game}.event
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
left join
(select a.date,
@ -142,16 +150,16 @@ class XAnalysis:
from (SELECT toDate(addHours(`#event_time`, `#zone_offset`)) as date, `{quota}`
FROM {self.game}.event
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
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}`
group by a.date) log on reg.date = log.date
order by date
"""
print(sql)
return {'sql': sql,'quota':quota,
return {'sql': sql, 'quota': quota,
'start_date': self.event_view['startTime'][:10],
'end_date': self.event_view['endTime'][:10],
}