百分数
This commit is contained in:
parent
172856ede3
commit
36849a2549
@ -64,7 +64,8 @@ async def event_model(
|
|||||||
'groups': [],
|
'groups': [],
|
||||||
'values': [],
|
'values': [],
|
||||||
'sum': [],
|
'sum': [],
|
||||||
'event_name': item['event_name']
|
'event_name': item['event_name'],
|
||||||
|
'format': item['format']
|
||||||
}
|
}
|
||||||
sql = item['sql']
|
sql = item['sql']
|
||||||
groupby = item['groupby']
|
groupby = item['groupby']
|
||||||
|
@ -198,7 +198,7 @@ class BehaviorAnalysis:
|
|||||||
'unit_num': self.unit_num
|
'unit_num': self.unit_num
|
||||||
}
|
}
|
||||||
|
|
||||||
def custom_event(self, s):
|
def custom_event(self, s, format='float'):
|
||||||
def f(m):
|
def f(m):
|
||||||
if len(m) == 3:
|
if len(m) == 3:
|
||||||
event_name, attr, comp = m
|
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))
|
return func.sum(getattr(func, 'if')(getattr(self.event_tbl.c, '#event_name') == event_name, 1, 0))
|
||||||
elif comp == 'touch_user_count':
|
elif comp == 'touch_user_count':
|
||||||
return func.uniqCombined(getattr(func, 'if')(getattr(self.event_tbl.c, '#event_name') == event_name,
|
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':
|
elif comp == 'touch_user_avg':
|
||||||
return func.divide(
|
return func.divide(
|
||||||
func.sum(getattr(func, 'if')(getattr(self.event_tbl.c, '#event_name') == event_name, 1, 0)),
|
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,
|
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()
|
opt = ({'+', '-', '*', '/'} & set(s)).pop()
|
||||||
a, b = s.split(opt)
|
a, b = s.split(opt)
|
||||||
r1 = a.split('.')
|
r1 = a.split('.')
|
||||||
|
n = 1
|
||||||
|
decimal = 2
|
||||||
|
if format == 'percent':
|
||||||
|
n = 100
|
||||||
|
elif format == 'integer':
|
||||||
|
decimal = 0
|
||||||
if '.' in b:
|
if '.' in b:
|
||||||
r2 = b.split('.')
|
r2 = b.split('.')
|
||||||
return {'event_name': [r1[0], r2[0]],
|
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():
|
elif b.isdigit():
|
||||||
return {'event_name': [r1[0]],
|
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):
|
def event_model_sql(self):
|
||||||
@ -245,9 +251,11 @@ class BehaviorAnalysis:
|
|||||||
func.addHours(event_time_col, self.zone_time) <= self.end_date,
|
func.addHours(event_time_col, self.zone_time) <= self.end_date,
|
||||||
]
|
]
|
||||||
event_name_col = getattr(self.event_tbl.c, '#event_name')
|
event_name_col = getattr(self.event_tbl.c, '#event_name')
|
||||||
|
format = event.get('format') or 'float'
|
||||||
|
|
||||||
if event.get('customEvent'):
|
if event.get('customEvent'):
|
||||||
formula = event.get('customEvent')
|
formula = event.get('customEvent')
|
||||||
custom = self.custom_event(formula)
|
custom = self.custom_event(formula, format)
|
||||||
event_name = custom['event_name']
|
event_name = custom['event_name']
|
||||||
where = [event_name_col.in_(event_name)]
|
where = [event_name_col.in_(event_name)]
|
||||||
event_filter, _ = self.handler_filts(*event['filts'])
|
event_filter, _ = self.handler_filts(*event['filts'])
|
||||||
@ -301,6 +309,7 @@ class BehaviorAnalysis:
|
|||||||
'groupby': [i.key for i in self.groupby],
|
'groupby': [i.key for i in self.groupby],
|
||||||
'date_range': self.date_range,
|
'date_range': self.date_range,
|
||||||
'event_name': event_name_display or event_name,
|
'event_name': event_name_display or event_name,
|
||||||
|
'format': format
|
||||||
})
|
})
|
||||||
|
|
||||||
return sqls
|
return sqls
|
||||||
|
Loading…
Reference in New Issue
Block a user