diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 31f9cbb3d..0549b3985 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -806,6 +806,57 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a cell.Value.Rollup.Contents = append(cell.Value.Rollup.Contents, destVal.String()) } + + if nil != rollupKey.Rollup.Calc { + switch rollupKey.Rollup.Calc.Operator { + case av.CalcOperatorCountAll: + cell.Value.Rollup.Contents = []string{strconv.Itoa(len(cell.Value.Rollup.Contents))} + case av.CalcOperatorCountValues: + cell.Value.Rollup.Contents = []string{strconv.Itoa(len(cell.Value.Rollup.Contents))} + case av.CalcOperatorCountUniqueValues: + countUniqueValues := 0 + uniqueValues := map[string]bool{} + for _, v := range cell.Value.Rollup.Contents { + if !uniqueValues[v] { + uniqueValues[v] = true + countUniqueValues++ + } + } + cell.Value.Rollup.Contents = []string{strconv.Itoa(countUniqueValues)} + case av.CalcOperatorCountEmpty: + countEmpty := 0 + for _, v := range cell.Value.Rollup.Contents { + if "" == v { + countEmpty++ + } + } + cell.Value.Rollup.Contents = []string{strconv.Itoa(countEmpty)} + case av.CalcOperatorCountNotEmpty: + countNonEmpty := 0 + for _, v := range cell.Value.Rollup.Contents { + if "" != v { + countNonEmpty++ + } + } + cell.Value.Rollup.Contents = []string{strconv.Itoa(countNonEmpty)} + case av.CalcOperatorPercentEmpty: + countEmpty := 0 + for _, v := range cell.Value.Rollup.Contents { + if "" == v { + countEmpty++ + } + } + cell.Value.Rollup.Contents = []string{strconv.Itoa(countEmpty*100/len(cell.Value.Rollup.Contents)) + "%"} + case av.CalcOperatorPercentNotEmpty: + countNonEmpty := 0 + for _, v := range cell.Value.Rollup.Contents { + if "" != v { + countNonEmpty++ + } + } + cell.Value.Rollup.Contents = []string{strconv.Itoa(countNonEmpty*100/len(cell.Value.Rollup.Contents)) + "%"} + } + } case av.KeyTypeRelation: // 渲染关联列 relKey, _ := attrView.GetKey(cell.Value.KeyID) if nil != relKey && nil != relKey.Relation {