1.优化设备ltv的计算逻辑,把诙谐的单独拿出来
2.优化底层,使得基础数据报表生成的sql是正确的
This commit is contained in:
parent
dc3844978a
commit
77d8bbfd98
@ -361,7 +361,7 @@ class BehaviorAnalysis:
|
||||
|
||||
return event_filters, user_filters
|
||||
|
||||
async def handler_filts(self, *filters):
|
||||
async def handler_filts(self, *filters,nu=0):
|
||||
"""
|
||||
|
||||
:param filters: (filts:list,relation:str)
|
||||
@ -400,8 +400,8 @@ class BehaviorAnalysis:
|
||||
# 字段名
|
||||
col = getattr(tbl.c, item['columnName'])
|
||||
# 判断是否是同一个事件
|
||||
yuan_event = self.events[0].get('eventName') or self.events[0].get('event_name') # 指标中的事件名
|
||||
biao_event = self.events[0].get('customEvent', '').split('.')[0]
|
||||
yuan_event = self.events[nu].get('eventName') or self.events[nu].get('event_name') # 指标中的事件名
|
||||
biao_event = self.events[nu].get('customEvent', '').split('.')[0]
|
||||
event = await get_event(item['columnName'], self.game) # 获取对应事件名或基础属性
|
||||
if event != yuan_event and event != biao_event and event != '基础属性' and self.game != 'debug':
|
||||
event_time_col = getattr(self.event_tbl.c, '#event_time')
|
||||
@ -568,7 +568,7 @@ class BehaviorAnalysis:
|
||||
"""事件分析生成sql会经过"""
|
||||
sqls = []
|
||||
event_time_col = getattr(self.event_tbl.c, '#event_time')
|
||||
for event in self.events:
|
||||
for idx,event in enumerate(self.events):
|
||||
operator_ = event.get('operator_val', '')
|
||||
# 排头显示名
|
||||
event_name_display = event.get('eventNameDisplay')
|
||||
@ -599,7 +599,7 @@ class BehaviorAnalysis:
|
||||
where = [event_name_col.in_(event_name)]
|
||||
event_filter, _ = await self.handler_filts((event['filts'], event.get('relation')),
|
||||
(self.global_filters, self.global_relation),
|
||||
self.ext_filters
|
||||
self.ext_filters,nu=idx
|
||||
)
|
||||
select_exprs.extend(self.groupby)
|
||||
qry = sa.select(
|
||||
@ -631,7 +631,7 @@ class BehaviorAnalysis:
|
||||
event_filter, user_filter = await self.handler_filts(
|
||||
(event['filts'], event.get('relation', 'and')),
|
||||
(self.global_filters, self.global_relation)
|
||||
, self.ext_filters
|
||||
, self.ext_filters,nu=idx
|
||||
)
|
||||
|
||||
u_account_id_col = getattr(self.user_tbl.c, '#account_id')
|
||||
|
@ -259,13 +259,21 @@ class XAnalysis:
|
||||
qry = sa.select().where(*where_account)
|
||||
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
|
||||
where_account_str = sql.split('WHERE ')[1]
|
||||
if self.game == 'huixie' and quota == '#distinct_id':
|
||||
event_n='new_device'
|
||||
else:
|
||||
event_n = 'create_account'
|
||||
if 'is_new_device = 1' in where_str:
|
||||
timed=where_str.replace('AND is_new_device = 1','',1)
|
||||
else:
|
||||
timed=where_str
|
||||
sql = f"""SELECT reg.date as date,
|
||||
cnt1,
|
||||
{select_ltv_str},
|
||||
{sum_money_str}
|
||||
FROM (SELECT toDate(addHours(`#event_time`, `#zone_offset`)) as date, uniqExact(`{quota}`) cnt1
|
||||
FROM {self.game}.event
|
||||
where `#event_name` = 'create_account'
|
||||
where `#event_name` = '{event_n}'
|
||||
AND {where_str} AND {where_account_str}
|
||||
GROUP BY toDate(addHours(`#event_time`, `#zone_offset`))) as reg
|
||||
left join
|
||||
@ -273,11 +281,11 @@ class XAnalysis:
|
||||
{sumpay_str}
|
||||
from (SELECT toDate(addHours(`#event_time`, `#zone_offset`)) as date, `{quota}`
|
||||
FROM {self.game}.event
|
||||
where `#event_name` = 'create_account'
|
||||
where `#event_name` = '{event_n}'
|
||||
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} AND {where_account_str}) b
|
||||
where {timed} and `#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
|
||||
|
Loading…
Reference in New Issue
Block a user