From 77d8bbfd98158c81ad541a9d11733a35c18b201e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BC=9F?= <250213850@qq.com> Date: Mon, 22 Aug 2022 18:06:39 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E8=AE=BE=E5=A4=87ltv?= =?UTF-8?q?=E7=9A=84=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8A=8A?= =?UTF-8?q?=E8=AF=99=E8=B0=90=E7=9A=84=E5=8D=95=E7=8B=AC=E6=8B=BF=E5=87=BA?= =?UTF-8?q?=E6=9D=A5=202.=E4=BC=98=E5=8C=96=E5=BA=95=E5=B1=82=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E5=BE=97=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E7=94=9F=E6=88=90=E7=9A=84sql=E6=98=AF=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/behavior_analysis.py | 12 ++++++------ models/x_analysis.py | 14 +++++++++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/models/behavior_analysis.py b/models/behavior_analysis.py index b5e4a91..cfba173 100644 --- a/models/behavior_analysis.py +++ b/models/behavior_analysis.py @@ -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') diff --git a/models/x_analysis.py b/models/x_analysis.py index ce20433..9b7a4a3 100644 --- a/models/x_analysis.py +++ b/models/x_analysis.py @@ -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