From d8a5735cea30a32e48e2d643110e52441959236e Mon Sep 17 00:00:00 2001 From: haoqiyue <1293971940@qq.com> Date: Tue, 28 Feb 2023 10:09:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E4=BB=98=E8=B4=B9=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/behavior_analysis.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/models/behavior_analysis.py b/models/behavior_analysis.py index a37bbc3..5454c5e 100644 --- a/models/behavior_analysis.py +++ b/models/behavior_analysis.py @@ -70,7 +70,7 @@ class CustomEvent: # 总次数 if comp == 'total_count': return func.sum(getattr(func, 'if')(getattr(self.tbl.c, '#event_name') == event_name, 1, 0)) - elif comp == 'touch_user_count': + elif comp == 'touch_user_count' or comp == 'touch_device_count': return func.uniqCombined(getattr(func, 'if')(getattr(self.tbl.c, '#event_name') == event_name, getattr(self.tbl.c, '#account_id'), None)) elif comp == 'touch_user_avg': @@ -684,7 +684,7 @@ class BehaviorAnalysis: # 聚合方式 if analysis == 'total_count': selectd = select_exprs + [func.count().label('values')] - elif analysis == 'touch_user_count': + elif analysis == 'touch_user_count' or analysis == 'touch_device_count': selectd = select_exprs + [func.count(sa.distinct(e_account_id_col)).label('values')] elif analysis == 'touch_user_avg': selectd = select_exprs + [ @@ -701,7 +701,7 @@ class BehaviorAnalysis: if analysis == 'total_count': selectd = select_exprs + [ settings.ARITHMETIC[operator](func.count(), operator_val).label('values')] - elif analysis == 'touch_user_count': + elif analysis == 'touch_user_count' or analysis == 'touch_device_count': selectd = select_exprs + [ settings.ARITHMETIC[operator](func.count(sa.distinct(e_account_id_col)), operator_val).label('values')] @@ -774,6 +774,19 @@ FROM {game}.event WHERE addHours({game}.event."#event_time", 8) >= '{stat_date}' AND addHours({game}.event."#event_time", 8) <= '{end_date}' GROUP BY toDate(addHours({game}.event."#event_time", 8))) as bb on aa.date = bb.date ORDER by date """ + # 单独设备付费率的拿出来 + if event.get('customEvent') == 'pay.touch_device_count/login.touch_device_count': + stat_date = self.start_date + end_date = self.end_date + game = self.game + sql = f""" + select toDate(addHours({game}.event."#event_time", 8)) AS date,round((uniqCombined(if({game}.event."#event_name" = 'pay',{game}.event.`#distinct_id`,NULL)) / uniqCombined(if({game}.event."#event_name" = 'login',{game}.event."#distinct_id",NULL))) * 100,2) AS values + FROM {game}.event + WHERE addHours({game}.event."#event_time", 8) >= '{stat_date}' + AND addHours({game}.event."#event_time", 8) <= '{end_date}' + AND {game}.event."#event_name" IN ('pay', 'login') + GROUP BY toDate(addHours({game}.event."#event_time", 8)) ORDER BY date LIMIT 100000 + """ # 单独把新增付费人数(以设备为维度)拿出来 if event.get('event_attr') == '触发用户数' and ['is_new_device', 'orderid'] == [i['columnName'] for i in event.get('filts')]: