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