我利用命令窗口设置了两项的计算,大概3秒左右可以出结果,其余的可以自己加进去。
Dim Names As List(Of String)
Names = DataTables("学生评分表").GetUniqueValues("","教师姓名")
For Each Name As String In Names
Dim Sum As Double = DataTables("学生评分表").Compute("Sum(你认为老师的教学态度_合计)","[教师姓名] = '" & Name & "'")
Dim Count As Integer = DataTables("学生评分表").Compute("Count(教师姓名)","[教师姓名] = '" & Name & "'")
Dim Drs As List(Of DataRow) = DataTables("学生评分表").Select("[教师姓名] = '" & Name & "'")
Dim Avg As Double = Math.Round(Sum / Count,3)
For Each dr As DataRow In Drs
dr("你认为老师的教学态度_单项平均") = avg
Next
Sum = DataTables("学生评分表").Compute("Sum(你认为老师创设的课堂情景_合计)","[教师姓名] = '" & Name & "'")
Count = DataTables("学生评分表").Compute("Count(教师姓名)","[教师姓名] = '" & Name & "'")
Drs = DataTables("学生评分表").Select("[教师姓名] = '" & Name & "'")
Avg = Math.Round(Sum / Count,3)
For Each dr As DataRow In Drs
dr("你认为老师创设的课堂情景_单项平均") = avg
Next
Next
不过这样的设计始终是有问题的,应该有单独的统计表,否则计算的耗时可以忍受,但是存盘就慢多了,可能要几分钟,因为foxtable只保存修改过的行,所以日常的应用存盘效率高过易表,但是你这样设计的话,等于每次计算后,11万行全部被修改过,存盘的速度可想而知。