diff --git a/api/api_v1/endpoints/query.py b/api/api_v1/endpoints/query.py index e00dd71..54cc652 100644 --- a/api/api_v1/endpoints/query.py +++ b/api/api_v1/endpoints/query.py @@ -653,13 +653,23 @@ async def scatter_model( return schemas.Msg(code=0, msg='ok', data=resp) - if interval_type == 'def' and analysis == 'number_of_days': + # elif analysis == 'number_of_days': + else: resp = {'list': {}} for key, tmp_df in df.groupby('date'): - total = round(tmp_df['values'].sum(), 2) + total = int(tmp_df['values'].sum()) resp['list'][key.strftime('%Y-%m-%d')] = {'n': total, 'total': total, 'p': 100} return schemas.Msg(code=0, msg='ok', data=resp) + # bins_s = pd.cut(tmp_df['values'], bins=bins, + # right=False).value_counts() + # bins_s.sort_index(inplace=True) + # total = int(bins_s.sum()) + # resp['list'][key.strftime('%Y-%m-%d')] = dict() + # resp['list'][key.strftime('%Y-%m-%d')]['总体'] = {'n': bins_s.to_list(), 'total': total, + # 'p': round(bins_s * 100 / total, 2).to_list(), + # 'title': '总体'} + @router.post("/trace_model_sql") async def trace_model_sql( diff --git a/core/config.py b/core/config.py index 715f521..05014f5 100644 --- a/core/config.py +++ b/core/config.py @@ -230,16 +230,20 @@ class Settings(BaseSettings): ], 'datetime': [ { - 'id': '==', - 'title': '绝对时间' + 'id': '>', + 'title': '大于' }, { - 'id': '==', - 'title': '相对当前日期' + 'id': '>=', + 'title': '大于等于' }, { - 'id': '==', - 'title': '相对事件发生时刻' + 'id': '<', + 'title': '小于' + }, + { + 'id': '<=', + 'title': '小于等于' }, { 'id': 'is not null', diff --git a/models/behavior_analysis.py b/models/behavior_analysis.py index 2a297cd..c4a99c7 100644 --- a/models/behavior_analysis.py +++ b/models/behavior_analysis.py @@ -135,15 +135,18 @@ class BehaviorAnalysis: report = await crud.report.get(db, id=self.data_in.report_id) self.event_view = report['query']['eventView'] self.events = report['query']['events'] - try: - e_days = self.event_view['e_days'] - s_days = self.event_view['s_days'] - except: - # 兼容以前的 - e_days, s_days = self.event_view['recentDay'].split('-') + if self.event_view.get('date_type') == 'static': + pass + else: + try: + e_days = self.event_view['e_days'] + s_days = self.event_view['s_days'] + except: + # 兼容以前的 + e_days, s_days = self.event_view['recentDay'].split('-') - self.event_view['endTime'] = arrow.get().shift(days=-int(e_days)).strftime('%Y-%m-%d 23:59:59') - self.event_view['startTime'] = arrow.get().shift(days=-int(s_days)).strftime('%Y-%m-%d 00:00:00') + self.event_view['endTime'] = arrow.get().shift(days=-int(e_days)).strftime('%Y-%m-%d 23:59:59') + self.event_view['startTime'] = arrow.get().shift(days=-int(s_days)).strftime('%Y-%m-%d 00:00:00') self.report_name = report["name"] @@ -415,6 +418,7 @@ class BehaviorAnalysis: for event in self.events: event_name_display = event.get('eventNameDisplay') + select_exprs = [] if self.time_particle != 'total': select_exprs.append( @@ -590,6 +594,7 @@ ORDER BY level event_name = event['eventName'] analysis = event['analysis'] e_account_id_col = getattr(self.event_tbl.c, '#account_id') + u_account_id_col = getattr(self.user_tbl.c, '#account_id') event_name_col = getattr(self.event_tbl.c, '#event_name') event_time_col = getattr(self.event_tbl.c, '#event_time').label('date') event_date_col = settings.TIME_GRAIN_EXPRESSIONS[self.time_particle](event_time_col, self.zone_time) @@ -601,11 +606,15 @@ ORDER BY level # event_date_col <= self.end_date, func.addHours(event_time_col, self.zone_time) >= self.start_date, func.addHours(event_time_col, self.zone_time) <= self.end_date, - event_name_col == event_name + ] - event_filter, _ = self.handler_filts((event['filts'], event.get('relation', 'and')), - (self.global_filters, self.global_relation) - , self.ext_filters) + if event_name != '*': + where.append(event_name_col == event_name) + event_filter, user_filter = self.handler_filts((event['filts'], event.get('relation', 'and')), + (self.global_filters, self.global_relation) + , self.ext_filters) + if user_filter: + where.append(e_account_id_col.in_(sa.select(u_account_id_col).where(*user_filter))) where.extend(event_filter) values_col = func.count().label('values') if analysis in ['number_of_days', 'number_of_hours']: diff --git a/sql/各渠道新增角色.sql b/sql/各渠道新增角色.sql new file mode 100644 index 0000000..677607b --- /dev/null +++ b/sql/各渠道新增角色.sql @@ -0,0 +1,6 @@ +with '2021-09-15' as date +select owner_name, uniqExact(`#account_id`) as n +from xiangsu.event +where `#event_name` = 'create_account' + and toDate(addHours(`#event_time`, 8)) = date +group by owner_name \ No newline at end of file