百分数

This commit is contained in:
wuaho 2021-07-30 10:43:03 +08:00
parent 172856ede3
commit 36849a2549
2 changed files with 17 additions and 7 deletions

View File

@ -64,7 +64,8 @@ async def event_model(
'groups': [],
'values': [],
'sum': [],
'event_name': item['event_name']
'event_name': item['event_name'],
'format': item['format']
}
sql = item['sql']
groupby = item['groupby']

View File

@ -198,7 +198,7 @@ class BehaviorAnalysis:
'unit_num': self.unit_num
}
def custom_event(self, s):
def custom_event(self, s, format='float'):
def f(m):
if len(m) == 3:
event_name, attr, comp = m
@ -211,24 +211,30 @@ class BehaviorAnalysis:
return func.sum(getattr(func, 'if')(getattr(self.event_tbl.c, '#event_name') == event_name, 1, 0))
elif comp == 'touch_user_count':
return func.uniqCombined(getattr(func, 'if')(getattr(self.event_tbl.c, '#event_name') == event_name,
getattr(self.event_tbl.c, 'binduid'), ''))
getattr(self.event_tbl.c, '#account_id'), ''))
elif comp == 'touch_user_avg':
return func.divide(
func.sum(getattr(func, 'if')(getattr(self.event_tbl.c, '#event_name') == event_name, 1, 0)),
func.uniqCombined(getattr(func, 'if')(getattr(self.event_tbl.c, '#event_name') == event_name,
getattr(self.event_tbl.c, 'binduid'), '')))
getattr(self.event_tbl.c, '#account_id'), '')))
opt = ({'+', '-', '*', '/'} & set(s)).pop()
a, b = s.split(opt)
r1 = a.split('.')
n = 1
decimal = 2
if format == 'percent':
n = 100
elif format == 'integer':
decimal = 0
if '.' in b:
r2 = b.split('.')
return {'event_name': [r1[0], r2[0]],
'select': func.round(settings.ARITHMETIC[opt](f(r1), f(r2)), 2).label('values')
'select': func.round(settings.ARITHMETIC[opt](f(r1) * n, f(r2)), decimal).label('values')
}
elif b.isdigit():
return {'event_name': [r1[0]],
'select': func.round(settings.ARITHMETIC[opt](f(r1), int(b)), 2).label('values')
'select': func.round(settings.ARITHMETIC[opt](f(r1) * n, int(b)), decimal).label('values')
}
def event_model_sql(self):
@ -245,9 +251,11 @@ class BehaviorAnalysis:
func.addHours(event_time_col, self.zone_time) <= self.end_date,
]
event_name_col = getattr(self.event_tbl.c, '#event_name')
format = event.get('format') or 'float'
if event.get('customEvent'):
formula = event.get('customEvent')
custom = self.custom_event(formula)
custom = self.custom_event(formula, format)
event_name = custom['event_name']
where = [event_name_col.in_(event_name)]
event_filter, _ = self.handler_filts(*event['filts'])
@ -301,6 +309,7 @@ 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
})
return sqls