|
@@ -158,21 +158,25 @@ func GetPercentileData(chartInfoId int, startDate, endDate string, mappingInfo *
|
|
|
// 百分位数据个数算法
|
|
|
// 数据区间第一个和最后一个数据点的时间和数据分别为(T1,S1)(T2,S2); N=T1到T2指标数据个数, n=小于等于S2的数据个数
|
|
|
// 个数百分位=(n-1)/(N-1)
|
|
|
- maxDay := len(dataList) // 往前找数据的边界
|
|
|
+ var firstDate time.Time
|
|
|
+ if len(dataList) > 0 {
|
|
|
+ d, _ := time.ParseInLocation(utils.FormatDate, dataList[0].DataTime, time.Local)
|
|
|
+ firstDate = d
|
|
|
+ }
|
|
|
if percentType == utils.PercentCalculateTypeNum {
|
|
|
for i, d := range dataList {
|
|
|
// T2为当前日期
|
|
|
s2 := decimal.NewFromFloat(d.Value)
|
|
|
t2, _ := time.ParseInLocation(utils.FormatDate, d.DataTime, time.Local)
|
|
|
|
|
|
- // 计算N和n
|
|
|
+ // 往前找(时间长度)个有数据的
|
|
|
var bigN, tinyN int
|
|
|
- for k := 0; k < maxDay; k++ {
|
|
|
- // 往前找(时间长度)个有数据的, N理论上只有最前面几个日期<calculateDay, 后面的N=calculateDay
|
|
|
- if bigN >= calculateDay {
|
|
|
+ for k := 0; k < calculateDay; k++ {
|
|
|
+ tp := t2.AddDate(0, 0, -k)
|
|
|
+ if tp.Before(firstDate) {
|
|
|
break
|
|
|
}
|
|
|
- preVal, preOk := dataMap[t2.AddDate(0, 0, -k)]
|
|
|
+ preVal, preOk := dataMap[tp]
|
|
|
if !preOk {
|
|
|
continue
|
|
|
}
|