diff --git a/api/api_v1/endpoints/data_auth.py b/api/api_v1/endpoints/data_auth.py index 354ff60..a20afde 100644 --- a/api/api_v1/endpoints/data_auth.py +++ b/api/api_v1/endpoints/data_auth.py @@ -117,12 +117,13 @@ async def my_event(request: Request, # my_data_auth = await crud.data_auth.get(db, ObjectId(data_auth_id)) # my_data_auth = my_data_auth['data'] - event_show_name = await crud.event_mana.get_all_show_name(db, game) + event_show_name, event_show_label_id= await crud.event_mana.get_all_show_name(db, game) event_list.append({'id': 'event', 'title': '全部事件', 'category': []}) for item in my_data_auth: event_list[-1]['category'].append({ 'event_name': item, - 'event_desc': event_show_name.get(item, item) + 'event_desc': event_show_name.get(item, item), + 'event_label':event_show_label_id.get(item,'') }) event_list[-1]['category'].append({'event_name': '*', 'event_desc': '任意事件'}) event_list.sort() diff --git a/api/api_v1/endpoints/event_mana.py b/api/api_v1/endpoints/event_mana.py index d390a6e..db2b2d8 100644 --- a/api/api_v1/endpoints/event_mana.py +++ b/api/api_v1/endpoints/event_mana.py @@ -45,7 +45,8 @@ async def event_list( 'show_name': event_meta.get(name, {}).get('show_name', ''), 'is_show': event_meta.get(name, {}).get('is_show', True), 'desc': event_meta.get(name, {}).get('desc', ''), - 'event_count': event_count.get(name, {}).get('v') + 'event_count': event_count.get(name, {}).get('v'), + 'label_id' : event_meta.get(name, {}).get('label_id', '') } ) return schemas.Msg(code=0, msg='ok', data=res) diff --git a/api/api_v1/endpoints/query.py b/api/api_v1/endpoints/query.py index 423f20e..a5c5fae 100644 --- a/api/api_v1/endpoints/query.py +++ b/api/api_v1/endpoints/query.py @@ -1004,13 +1004,15 @@ async def scatter_model( start_date=analysis.start_date where=analysis.events[-1]['quotaname'] sql = res['sql'] + #columnName = analysis.events[-1]['label_id'] #查询买量渠道owner为kuaiyou3的日注册玩家等级分布 # sql_list=sql.split("GROUP BY") # sql01 = """and xiangsu.event.owner_name='kuaiyou3'GROUP BY""""" # new_sql=sql_list[0]+sql01+sql_list[1] - - + # if columnName != '': + # sql = sql.replace('SELECT', f'SELECT {columnName},', 1) + # sql += f',{columnName}' df = await ckdb.query_dataframe(sql) if df.empty: return schemas.Msg(code=-9, msg='无数据', data=None) @@ -1184,8 +1186,11 @@ async def scatter_model( sql=res['sql'] columnName = analysis.event_view['groupBy'][-1]['columnName'] if analysis.event_view['groupBy'] != []: - sql=sql.replace(f'toDate(addHours({game}.event."#event_time", 8)) AS date', f'max(`{columnName}`) as va', 1) - sql=sql.replace(f'toDate(addHours({game}.event."#event_time", 8)),','',1) + + if columnName != '': + sql = sql.replace(f'toDate(addHours({game}.event."#event_time", 8)) AS date', f'{columnName} as va', + 1) + sql = sql.replace(f'toDate(addHours({game}.event."#event_time", 8))', columnName, 1) df = await ckdb.query_dataframe(sql) if df.empty: return schemas.Msg(code=-9, msg='无数据', data=None) @@ -1205,6 +1210,7 @@ async def scatter_model( df['date'] = '合计' if analysi != 'number_of_days' and interval_type != 'discrete': + #默认区间 max_v = int(df['values'].max()) min_v = int(df['values'].min()) interval = (max_v - min_v) // 10 or 1 @@ -1214,7 +1220,11 @@ async def scatter_model( 'time_particle': res['time_particle'], 'biaotou':columnName } - + if 'float' in str(df.dtypes['va']): + df['va'] = df['va'].astype(int) + if 'list' in str(type(df['va'][0])): + f = lambda x: x[0] + df['va'] = df['va'].map(f) if not quota_interval_arr: resp['label'] = [f'[{i},{i + interval})' for i in range(min_v, max_v, interval)] bins = [i for i in range(min_v, max_v + interval, interval)] @@ -1225,16 +1235,16 @@ async def scatter_model( for i, v in enumerate(quota_interval_arr[1:]): resp['label'].append(f'[{quota_interval_arr[i]},{v})') bins.append(v) - if 'float' in str(df.dtypes['va']): - df['va'] = df['va'].astype(int) - if 'list' in str(type(df['va'][0])): - f = lambda x: x[0] - df['va'] = df['va'].map(f) + # if 'float' in str(df.dtypes['va']): + # df['va'] = df['va'].astype(int) + # if 'list' in str(type(df['va'][0])): + # f = lambda x: x[0] + # df['va'] = df['va'].map(f) # 这是分组的 for key, tmp_df in df.groupby('va'): bins_s = pd.cut(tmp_df['values'], bins=bins, - right=False).value_counts() + right=True,include_lowest=True).value_counts() bins_s.sort_index(inplace=True) total = int(bins_s.sum()) if res['time_particle'] == 'total': @@ -1248,6 +1258,17 @@ async def scatter_model( for i in range(len(p)): if str(p[i]) == 'nan': p[i] = 0 + #映射对应的埋点数据 + re = await crud.select_map.get_list(db, game) + re_list=[i['attr_name'] for i in re] + if columnName in re_list: + for i in re: + if columnName == i['attr_name']: + for datas in i['map_']: + if key == datas['id']: + key=datas['title'] + break + break if 'time' not in columnName: resp['list'][key] = dict() resp['list'][key] = {'n': bins_s.to_list(), 'total': total, @@ -1266,6 +1287,7 @@ async def scatter_model( return Download return schemas.Msg(code=0, msg='ok', data=resp) else: + #离散数字 resp = {'list': {}, 'label': [], 'start_date': res['start_date'], 'end_date': res['end_date'], @@ -1282,6 +1304,17 @@ async def scatter_model( if res['time_particle'] == 'total': dt = '合计' else: + #映射对应的埋点数据 + re = await crud.select_map.get_list(db, game) + re_list=[i['attr_name'] for i in re] + if columnName in re_list: + for i in re: + if columnName == i['attr_name']: + for datas in i['map_']: + if key == datas['id']: + key=datas['title'] + break + break dt = key #dt = key.strftime('%Y-%m-%d') #dt='合计' diff --git a/crud/crud_event_mana.py b/crud/crud_event_mana.py index 79691c2..5a2ad94 100644 --- a/crud/crud_event_mana.py +++ b/crud/crud_event_mana.py @@ -22,9 +22,11 @@ class CRUDEventMap(CRUDBase): async def get_all_show_name(self, db: AsyncIOMotorDatabase, game: str): cursor = self.find(db, {'game': game}) res = {} + res1= {} async for item in self.to_list(cursor): res[item['event_name']] = item['show_name'] - return res + res1[item['event_name']] = item.get('label_id','') + return res,res1 async def create_index(self, db: AsyncIOMotorDatabase): await db[self.coll_name].create_index( diff --git a/models/behavior_analysis.py b/models/behavior_analysis.py index ca2e780..06ce549 100644 --- a/models/behavior_analysis.py +++ b/models/behavior_analysis.py @@ -679,6 +679,10 @@ ORDER BY level .where(and_(*where)) \ .group_by(event_date_col,e_account_id_col) sql = str(qry.compile(compile_kwargs={"literal_binds": True})) + columnName = event['label_id'] + if columnName != '': + sql = sql.replace('SELECT', f'SELECT {columnName},', 1) + sql += f',{columnName}' print(sql) return { 'sql': sql, diff --git a/schemas/event_mana.py b/schemas/event_mana.py index 806c2d8..a79c1da 100644 --- a/schemas/event_mana.py +++ b/schemas/event_mana.py @@ -6,3 +6,4 @@ class EventMateEdit(BaseModel): show_name: str is_show: bool desc: str + label_id:str