Foxtable(狐表)用户栏目专家坐堂 → [求助]统计有误?


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

主题:[求助]统计有误?

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
[求助]统计有误?  发帖心情 Post By:2015/12/17 14:46:00 [只看该作者]

执行“督学测评统计表”代码,统计出来“得分”的结果与手工统计的结果有误差,不知怎么回事?代码错了吗?请指教。谢谢!

dr("得分") += (dr( XX &"是或好人")*rdr("A") + dr( XX &"否或不好人")* rdr("B"))/dr("调查人数")/7

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:教委考核专用统计程序.rar

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:督学统计.xls

[此贴子已经被作者于2015/12/17 15:17:03编辑过]

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


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

无语,你给的例子本身就不能运算。

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


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

两个表的类别,根本就不匹配。


请做一个可以正常统计的例子发上来。


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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2015/12/17 21:17:00 [只看该作者]

抱歉!“责任督学”表中的“类别”列未改转来,应将“班子成员”改为“A”、“普通教职工”改为“B”.

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:教委考核专用统计程序1.rar

[此贴子已经被作者于2015/12/17 21:17:56编辑过]

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


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

汗,你有手工计算过吗?代码没错啊

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


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

代码没错,绝对是你手工计算有问题。

 

StatusBar.Message1= "正在统计"
StatusBar.ProgressBar.Visible =True
StatusBar.ProgressBar.Minimum = 0
StatusBar.ProgressBar.Maximum =DataTables("答案2").datarows.count
Dim dtb As New DataTableBuilder("督学测评统计表")
dtb.AddDef("单位",Gettype(String),8)
dtb.AddDef("单位代码",Gettype(String),8)
dtb.AddDef("教职工数",Gettype(Double))
dtb.AddDef("类别",Gettype(String),8)
dtb.AddDef("调查人数",Gettype(Double))
dtb.AddDef("得分",Gettype(Decimal))
Dim djs() As String = {"是或好","否或不好"}
For i As Integer = 1 To 7
    For Each dj As String In djs
        dtb.AddDef("内容"& i & dj & "人",Gettype(Decimal),"","内容" & i & "_"& dj &"_人数")
        dtb.AddDef("内容"& i & dj & "%",Gettype(Decimal),"","内容" & i & "_"& dj &"_%")
    Next
Next
dtb.Build()

Tables("督学测评统计表").ResumeRedraw
Tables("督学测评统计表").StopRedraw
Dim lbs() As String = {"A","B"}
For Each lb As String In lbs
    Dim dr As DataRow
    For Each dw As String In DataTables("答案2").GetValues("单位", "")
        dr = DataTables( "督学测评统计表" ).datarows.addnew()
        dr("单位") = dw
        Dim ddr As DataRow = DataTables("校名设置").Find("单位 = '" & dw & "'")
        dr("单位代码") = ddr("单位代码")
        Dim jdr As DataRow = DataTables("教职工数").Find("单位 = '" & dw & "'")
        dr("教职工数") = jdr("教职工数")
        dr("类别") = lb
        dr("调查人数") = DataTables("答案2").Compute("count(单位)", "[单位] = '" & dw & "'And 类别 = '" & lb & "'And 备注 <> '0' ")
        Dim XXs() As String = {"内容1","内容2","内容3","内容4","内容5","内容6","内容7"}
        Dim rdr As DataRow = DataTables("分值").Find("表名 = '责任督学' And 类别 = '" & lb & "'")
        For Each XX As String In XXs
            dr( XX &"是或好人") = DataTables("答案2").Compute("Count(单位)", "[单位] = '" & dw & "'And 类别 = '" & lb & "'And " & XX & "= 'A'")
            dr( XX &"是或好%") = dr( XX &"是或好人")/dr("调查人数")*100
            dr( XX &"否或不好人") = DataTables("答案2").Compute("Count(单位)", "[单位] = '" & dw & "'And 类别 = '" & lb & "'And " & XX & "= 'B'")
            dr( XX &"否或不好%") = dr( XX &"否或不好人")/dr("调查人数")*100
            dr("得分") += dr( XX &"是或好人")*rdr("A") + dr( XX &"否或不好人")* rdr("B")
           
            Dim Nms() As String = {XX &"是或好%",XX &"否或不好%","得分"}
            For Each nm As String In nms
                If dr.IsNull(Nm) = False Then
                    dr(Nm) = Format(dr(Nm),"0.00") '确定小数位数
                End If
            Next
        Next
        dr("得分") = Format(dr("得分")/dr("调查人数")/7, "0.00")
    Next
Next


For Each zdr As DataRow In DataTables("督学测评统计表").DataRows
    For Each dc As DataCol In DataTables("督学测评统计表").datacols
        If dc.IsNumeric Then
            If zdr(dc.name) = 0 Then
                zdr(dc.name) = Nothing
            End If
        End If
    Next
Next

 

Dim lms() As String = {"单位","单位代码","教职工数","调查人数","教职工数","类别"}
For Each lm As String In lms
    Tables("督学测评统计表").Cols(""& lm &"").TextAlign = TextAlignEnum.Center
Next
Tables("督学测评统计表").Sort = "单位"
Tables("督学测评统计表").AutoSizeCols() '默认自动列宽
e.Form.Controls("Label1").text ="统计结束,请导出数据!否则数据会丢失!"
Tables("督学测评统计表").ResumeRedraw


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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2015/12/18 9:57:00 [只看该作者]

谢谢!

你已经帮我这个代码

dr("得分") += (dr( XX &"是或好人")*rdr("A") + dr( XX &"否或不好人")* rdr("B"))/dr("调查人数")/7

修改成

dr("得分") += dr( XX &"是或好人")*rdr("A") + dr( XX &"否或不好人")* rdr("B")  (只求和)

 

dr("得分") = Format(dr("得分")/dr("调查人数")/7, "0.00")  (求平均,再格式化了)

这个了。

我还没相通,这两个代码执行有误差。请指教。谢谢!


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


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

1、你手工计算的肯定有错;

 

2、相加以后在平均误差会小一点,不然每次计算都丢失精度


 回到顶部