This commit is contained in:
wuaho 2021-08-24 10:08:58 +08:00
parent 040487fac9
commit 5325b31466
3 changed files with 33 additions and 10 deletions

View File

@ -76,6 +76,15 @@ async def event_model(
if df.shape[0] == 0:
continue
# return schemas.Msg(code=0, msg='ok', data=[q])
if item['time_particle'] == 'total':
# for group, df_group in df.groupby(groupby):
# df_group.reset_index(drop=True, inplace=True)
q['groups'].append(groupby)
q['values'].append(df['values'].to_list())
q['sum'].append(int(df['values'].sum()))
q['date_range']=[f'{i[0]}-{i[1]}' for i in df.set_index(['svrindex','name']).index]
res.append(q)
continue
if groupby:
# 有分组
@ -103,6 +112,11 @@ async def event_model(
df.sort_values('date', inplace=True)
q['values'].append(df['values'].to_list())
q['sum'].append(int(df['values'].sum()))
if item['time_particle'] in ('P1D', 'P1W'):
q['date_range'] = [d.strftime('%Y-%m-%d') for d in q['date_range']]
elif item['time_particle'] in ('P1M',):
q['date_range'] = [d.strftime('%Y-%m') for d in q['date_range']]
else:
q['date_range'] = [d.strftime('%Y-%m-%d %H:%M:%S') for d in q['date_range']]
# q['eventNameDisplay']=item['event_name_display']
res.append(q)

View File

@ -262,6 +262,7 @@ class Settings(BaseSettings):
"P1D": "D",
"P1W": "W",
"P1M": "MS",
"total": "D",
}
TIME_GRAIN_EXPRESSIONS = {
@ -271,7 +272,8 @@ class Settings(BaseSettings):
'PT10M': lambda col, zone: func.toStartOfTenMinutes(func.addHours(col, zone)).label('date'),
'PT15M': lambda col, zone: func.toStartOfFifteenMinutes(func.addHours(col, zone)).label('date'),
'PT1H': lambda col, zone: func.toStartOfHour(func.addHours(col, zone)).label('date'),
'P1D': lambda col, zone: func.toStartOfDay(func.addHours(col, zone)).label('date'),
'P1D': lambda col, zone: func.toDate(func.addHours(col, zone)).label('date'),
'total': lambda col, zone: func.toStartOfDay(func.addHours(col, zone)).label('date'),
'P1W': lambda col, zone: func.toStartOfWeek(func.addHours(col, zone)).label('date'),
'P1M': lambda col, zone: func.toStartOfMonth(func.addHours(col, zone)).label('date'),
}

View File

@ -147,9 +147,10 @@ class BehaviorAnalysis:
end_date: str = self.event_view.get('endTime')
date_range = pd.date_range(start_date, end_date, freq=settings.PROPHET_TIME_GRAIN_MAP[self.time_particle],
tz='UTC').tolist()
if self.time_particle in ('P1M','P1W'):
if self.time_particle in ('P1D', 'P1W', 'P1M'):
date_range = [item.date() for item in date_range]
# start_date = date_range[0].strftime('%Y-%m-%d')
# end_date = date_range[-1].strftime('%Y-%m-%d')
return start_date, end_date, date_range
@ -284,8 +285,10 @@ class BehaviorAnalysis:
for event in self.events:
event_name_display = event.get('eventNameDisplay')
select_exprs = [
settings.TIME_GRAIN_EXPRESSIONS[self.time_particle](event_time_col, self.zone_time)]
select_exprs = []
if self.time_particle != 'total':
select_exprs.append(
settings.TIME_GRAIN_EXPRESSIONS[self.time_particle](event_time_col, self.zone_time))
base_where = [
func.addHours(event_time_col, self.zone_time) >= self.start_date,
@ -342,7 +345,10 @@ class BehaviorAnalysis:
qry = sa.select(selectd).where(and_(*event_filter, *base_where))
qry = qry.group_by(*select_exprs)
if self.time_particle != 'total':
qry = qry.order_by(sa.Column('date'))
else:
qry = qry.order_by(sa.Column('values').desc())
qry = qry.limit(1000)
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
@ -351,7 +357,8 @@ class BehaviorAnalysis:
'groupby': [i.key for i in self.groupby],
'date_range': self.date_range,
'event_name': event_name_display or event_name,
'format': format
'format': format,
'time_particle': self.time_particle
})
return sqls
@ -440,7 +447,7 @@ ORDER BY level
qry = sa.select(event_date_col, *self.groupby, values_col) \
.where(and_(*where)) \
.group_by(event_date_col, *self.groupby, e_account_id_col)
.group_by(event_date_col, *self.groupby)
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
print(sql)