Foxtable(狐表)用户栏目专家坐堂 → 如何设计“单项平均”公式?


  共有25491人关注过本帖树形打印复制链接

主题:如何设计“单项平均”公式?

帅哥哟,离线,有人找我吗?
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/11/7 15:18:00 [显示全部帖子]

虽然可以实现,但是表结构有问题,这是一个原始评分数据表,通常不应该在这里头进行统计,而是有一个单独的统计表,同级每一个教师的平均得分和排名。


另外,请不要用这么复杂的列名,表头应该考虑用列标题来实现。

 


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/11/7 15:26:00 [显示全部帖子]

我利用命令窗口设置了两项的计算,大概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万行全部被修改过,存盘的速度可想而知。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/11/7 15:30:00 [显示全部帖子]

看3楼啊,我给了代码,直接在命令窗口执行即可算出其中两个单项平均。
[此贴子已经被作者于2008-11-7 15:33:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/11/7 15:34:00 [显示全部帖子]

最好改变结构,如果不想改,将三楼的代码设计成一个按钮,以后但及这个按钮计算单项平均。

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/11/7 15:43:00 [显示全部帖子]

你应该删除学生评分中的所有单项平均列,直接在教师得分表中加上单项平均栏目,在这里进行统计。

好的表结构是一个好系统的基础,就像房子的地基。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/11/7 15:56:00 [显示全部帖子]

以下是引用hbfnmxb在2008-11-7 15:53:00的发言:

提醒的对,那么用三楼的代码,需要改些什么??


先设计好表结构,然后尝试自己设计一下,搞不定的话,再上来提问吧。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/11/7 16:18:00 [显示全部帖子]

我同样设置了两项,按钮也做好了,其余的自己增加即可。
现在不到一秒,即可出结果:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:学生评教表.rar


注意窗口在教室得分表,我在这个表增加了两个单项平均栏目。
[此贴子已经被作者于2008-11-7 16:19:19编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/11/7 16:51:00 [显示全部帖子]

其实这样的统计,易表完全能够胜任的,只是你之前的表结构设计有问题。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/11/7 17:22:00 [显示全部帖子]

其实不存在这一列:
老师是否按时上下课课准备是否充分_合计

正确的列名称是:
老师是否按时上下课,课准备是否充分_合计

但是这个列名称居然有一个逗号,不符号要求,必须加上方括号:

所以正确的代码是:
Sum = DataTables("学生评分表").Compute("Sum([老师是否按时上下课,课准备是否充分_合计])","[教师姓名] = '" & dr("教师姓名") & "'")
 
我建议你以后设计系统的时候,列名称规范一点,否则自寻烦恼。


 回到顶部