Foxtable(狐表)用户栏目专家坐堂 → [求助]如何让统计表根据筛选出来的数据实时更新统计结果


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

主题:[求助]如何让统计表根据筛选出来的数据实时更新统计结果

帅哥哟,离线,有人找我吗?
大红袍
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/5 15:46:00 [只看该作者]

 直接赋值啊

 

vars("cks") = 3

 

然后乘以对应的分数线就可以啊。


 回到顶部
帅哥哟,离线,有人找我吗?
幸福地微笑
  22楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:71 积分:526 威望:0 精华:0 注册:2016/7/20 2:33:00
  发帖心情 Post By:2016/8/5 16:17:00 [只看该作者]

我还是上传实例吧!

 

待解决问题:1、如何获取到参考考试科目数再赋值给全局变量

                 2、当动态调用 分数线 表中的数据作为标准进行统计时,统计的结果就会出错!

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:成绩管理 - 副本.foxdb


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/5 17:27:00 [只看该作者]

 贴出你写的代码啊

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/5 17:34:00 [只看该作者]

直接赋值啊

 

vars("cks") = 3

 

然后乘以对应的分数线就可以啊。


 回到顶部
帅哥哟,离线,有人找我吗?
幸福地微笑
  25楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:71 积分:526 威望:0 精华:0 注册:2016/7/20 2:33:00
  发帖心情 Post By:2016/8/5 23:47:00 [只看该作者]

统计的代码如下,其中颜色标记的“入学年份”原来是“学年”,更改后统计的结果正确率提高,但总有一科或两科的结果是错的!但出错的科目并不是固定的!(最后一科“科学”好像全错)

 


图片点击可在新窗口打开查看此主题相关图片如下:结果1.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:结果2.png
图片点击可在新窗口打开查看
 

For Each dr As DataRow In DataTables("班级考情分析").Select("")
    Dim dt As Table = Tables("成绩记录")
    If dr("科目") =  "总分" Then
        dr("分布_40以下") = dt.Compute("Count(姓名)", dr("科目") & " < 160")
        dr("分布_40至60") = dt.Compute("Count(姓名)", dr("科目") & " >= 160 And " & dr("科目") & " < 240" )
        dr("分布_60分段") = dt.Compute("Count(姓名)", dr("科目") & " >= 240 And " & dr("科目") & " < 280" )
        dr("分布_70分段") = dt.Compute("Count(姓名)", dr("科目") & " >= 280 And " & dr("科目") & " < 320" )
        dr("分布_80分段") = dt.Compute("Count(姓名)", dr("科目") & " >= 320 And " & dr("科目") & " < 360" )
        dr("分布_90分段") = dt.Compute("Count(姓名)", dr("科目") & " >= 360 And " & dr("科目") & " < 400" )
        Dim filter1 As String = "1=2"
        Dim filter2 As String = "1=2"
        Dim filter3 As String = "1=2"
        For Each cdr As DataRow In DataTables("分数线").DataRows
            filter1 = filter1 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " > " & cdr("优秀分数")*4 
            filter2 = filter2 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " > " & cdr("及格分数")*4
            filter3 = filter3 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " < " & cdr("差生分数")*4
        Next
        msgbox(filter1) '临时检查用代码,用于查看优秀人数的判断分数公式有没有出错。
        dr("分布_满分") = dt.Compute("Count(姓名)", dr("科目") & " >= 400" )
        dr("优秀人数") = dt.Compute("Count(姓名)", filter1)
        dr("及格人数") = dt.Compute("Count(姓名)", filter2)
        dr("差生人数") = dt.Compute("Count(姓名)", filter3)
    Else
        dr("分布_40以下") = dt.Compute("Count(姓名)", dr("科目") & " < 40")
        dr("分布_40至60") = dt.Compute("Count(姓名)", dr("科目") & " >= 40 And " & dr("科目") & " < 60" )
        dr("分布_60分段") = dt.Compute("Count(姓名)", dr("科目") & " >= 60 And " & dr("科目") & " < 70" )
        dr("分布_70分段") = dt.Compute("Count(姓名)", dr("科目") & " >= 70 And " & dr("科目") & " < 80" )
        dr("分布_80分段") = dt.Compute("Count(姓名)", dr("科目") & " >= 80 And " & dr("科目") & " < 90" )
        dr("分布_90分段") = dt.Compute("Count(姓名)", dr("科目") & " >= 90 And " & dr("科目") & " < 100" )
        Dim filter1 As String = "1=2"
        Dim filter2 As String = "1=2"
        Dim filter3 As String = "1=2"
        For Each cdr As DataRow In DataTables("分数线").DataRows
            filter1 = filter1 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " > " & cdr("优秀分数")
            filter2 = filter2 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " > " & cdr("及格分数")
            filter3 = filter3 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " < " & cdr("差生分数")
        Next
        dr("分布_满分") = dt.Compute("Count(姓名)", dr("科目") & " >= 100" )
        dr("优秀人数") = dt.Compute("Count(姓名)", filter1)
        dr("及格人数") = dt.Compute("Count(姓名)", filter2)
        dr("差生人数") = dt.Compute("Count(姓名)", filter3)
    End If
    dr("最高分") = dt.Compute("Max(" & dr("科目") & ")")
    dr("最低分") = dt.Compute("Min(" & dr("科目") & ")")
    dr("总分") = dt.Compute("Sum(" & dr("科目") & ")")
    dr("平均分") = dt.Compute("Avg(" & dr("科目") & ")")
Next

 

通过在总分统计部分加入 msgbox(filter1)检查,输出以下结果:

 


图片点击可在新窗口打开查看此主题相关图片如下:运行结果.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2016/8/6 0:15:08编辑过]

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/6 10:31:00 [只看该作者]

For Each cdr As DataRow In DataTables("分数线").DataRows
            filter1 = filter1 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " >= " & cdr("优秀分数")
            filter2 = filter2 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " >= " & cdr("及格分数")
            filter3 = filter3 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " < " & cdr("差生分数")
        Next

 回到顶部
帅哥哟,离线,有人找我吗?
幸福地微笑
  27楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:71 积分:526 威望:0 精华:0 注册:2016/7/20 2:33:00
  发帖心情 Post By:2016/8/6 14:04:00 [只看该作者]

谢谢提点!犯这低级错误还真羞死了!这么明显的一直找都没发现!

 

For Each cdr As DataRow In DataTables("分数线").DataRows
        filter1 = filter1 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " >= " & cdr("优秀分数")*4
        filter2 = filter2 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " >= " & cdr("及格分数")*4 

       filter3 = filter3 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " and " & dr("科目") & " < " & cdr("差生分数")*4
Next


 

再请教:

 

由于不同年级或不同场次的考试的科目可能不一样,并不是固定的4科,如果是如上面代码中运算的,总分统计的结果在不达4科参考的情况下肯定是出错的,如何定义参加考试科目数这个全局变量? (用cks代表参考科目的数量)

 

vars("cks") = 你定义的值 (这个值应是 “年级考情分析”表中的相应的“参考人数”为0的个数 或“总分”为空的个数,要如何表述?)

 

[此贴子已经被作者于2016/8/6 14:08:10编辑过]

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/6 14:51:00 [只看该作者]

Dim Products As List(Of String)
DataTables("班级考情分析").GetValues("科目","参考人数 is not null")
Output.Show(Products.Count)

 回到顶部
帅哥哟,离线,有人找我吗?
幸福地微笑
  29楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:71 积分:526 威望:0 精华:0 注册:2016/7/20 2:33:00
  发帖心情 Post By:2016/8/6 17:08:00 [只看该作者]

可能是版本的问题,“GetValues”方法没找着,不改用“GetUniqueValues”才成功!

 

Dim cks As List(Of String)
cks = DataTables("班级考情分析").
GetUniqueValues("参考人数 = 0","科目")
Dim cksm As String = 4 - cks.Count

谢谢各位大师对本小白耐心的指导!


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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/6 17:31:00 [只看该作者]

嗯嗯,用的是盗版狐表吧。建议使用官方的试用版

 回到顶部
总数 30 上一页 1 2 3