diff --git a/models/behavior_analysis.py b/models/behavior_analysis.py index 5454c5e..abc7356 100644 --- a/models/behavior_analysis.py +++ b/models/behavior_analysis.py @@ -763,29 +763,52 @@ class BehaviorAnalysis: stat_date = self.start_date end_date = self.end_date game = self.game - sql = f""" - select aa.date as date,round((a/b)*100,2) as values from - (select toDate(addHours({game}.event."#event_time", 8)) AS date,uniqCombined(if({game}.event."#event_name" = 'pay', {game}.event."#account_id", NULL)) as a 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"='pay' and orderid NOT LIKE '%GM%' GROUP BY toDate(addHours({game}.event."#event_time", 8))) as aa - LEFT join - (SELECT toDate(addHours({game}.event."#event_time", 8)) AS date, round(uniqExact({game}.event."#account_id"), 2) AS b -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 len(event_filter) > 0: + where_fil = str(and_(*event_filter, *base_where).compile(compile_kwargs={"literal_binds": True})) + sql = f""" + select aa.date as date,round((a/b)*100,2) as values from + (select toDate(addHours({game}.event."#event_time", 8)) AS date,uniqCombined(if({game}.event."#event_name" = 'pay', {game}.event."#account_id", NULL)) as a from {game}.event + WHERE {where_fil} + AND {game}.event."#event_name"='pay' and orderid NOT LIKE '%GM%' GROUP BY toDate(addHours({game}.event."#event_time", 8))) as aa + LEFT join + (SELECT toDate(addHours({game}.event."#event_time", 8)) AS date, round(uniqExact({game}.event."#account_id"), 2) AS b + FROM {game}.event + WHERE {where_fil} + GROUP BY toDate(addHours({game}.event."#event_time", 8))) as bb on aa.date = bb.date ORDER by date + """ + else: + sql = f""" + select aa.date as date,round((a/b)*100,2) as values from + (select toDate(addHours({game}.event."#event_time", 8)) AS date,uniqCombined(if({game}.event."#event_name" = 'pay', {game}.event."#account_id", NULL)) as a 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"='pay' and orderid NOT LIKE '%GM%' GROUP BY toDate(addHours({game}.event."#event_time", 8))) as aa + LEFT join + (SELECT toDate(addHours({game}.event."#event_time", 8)) AS date, round(uniqExact({game}.event."#account_id"), 2) AS b + 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 len(event_filter) > 0: + where_fil = str(and_(*event_filter, *base_where).compile(compile_kwargs={"literal_binds": True})) + 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 {where_fil} + AND {game}.event."#event_name" IN ('pay', 'login') + GROUP BY toDate(addHours({game}.event."#event_time", 8)) ORDER BY date LIMIT 100000 + """ + else: + 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