Foxtable(狐表)用户栏目专家坐堂 → 多值字段统计的问题请教?


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

主题:多值字段统计的问题请教?

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


加好友 发短信
等级:二尾狐 帖子:500 积分:5409 威望:0 精华:0 注册:2009/2/5 13:09:00
多值字段统计的问题请教?  发帖心情 Post By:2016/6/11 0:15:00 [只看该作者]

派工表有日期列,我想统计时按月统计,工号()的平均计分金额。下面代码中怎么添加日期按月统计。?

 

 

Dim dt As DataTable
 Dim dtb As New  DataTableBuilder("统计表")
dtb.AddDef("工号", Gettype(String), 16)
 dtb.AddDef("计分金额", Gettype(Double))
 dt = dtb.Build()
 '开始逐行累加统计
Dim lst As  New  Dictionary(of String ,DataRow) '定义一个字典,用于检索每个员工在统计表中对应的行
For Each dr1 As DataRow In DataTables("派工").DataRows
     If dr1.IsNull("工号") = False Then '如果工号列不为空
        Dim nms() As String = dr1("工号").Split(",") '将工号列内容拆分成数组
        Dim v As Double = dr1("计分金额") / nms.Length '获得平均之后每个工号的生产计分金额
        For Each nm As String In nms  '遍历参与加工此产品的每个工号
            Dim  dr2 As  DataRow
             If  lst.ContainsKey(nm) '如果集合中包括此工号对应的行
                dr2=  lst(nm) '将此行赋值给变量dr2
             Else
                 dr2 = dt.AddNew() '否则增加一行.
                 dr2("工号") = nm  '新增行的工号列设置为此工号
                lst.add(nm,dr2) '将新增行添加到字典中,以便接下来检索
            End If
             dr2("计分金额") = dr2("计分金额") + v  '加上平均后的产量
        Next
     End If
 Next
Tables("窗口3_统计表").DataSource = DataTables("统计")

'设置月份的列宽
For Each c As Col In Tables("窗口3_统计表").Cols
     If c.DataCol.IsNumeric Then
        c.Width = 58
     End If
Next


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


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

 比较麻烦,你做个有数据的例子发上来。

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


加好友 发短信
等级:二尾狐 帖子:500 积分:5409 威望:0 精华:0 注册:2009/2/5 13:09:00
  发帖心情 Post By:2016/6/11 0:21:00 [只看该作者]

立即马上,就传

 


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


加好友 发短信
等级:二尾狐 帖子:500 积分:5409 威望:0 精华:0 注册:2009/2/5 13:09:00
  发帖心情 Post By:2016/6/11 0:31:00 [只看该作者]

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

窗口里的日期统计,1、除了客户本月和季度统计?2、是否可以做成自定义时段统计。感谢!
[此贴子已经被作者于2016/6/11 11:36:50编辑过]

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


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

Dim sd As Date = "2016-04-10"
Dim ed As Date = "2016-05-20"

Dim dt As DataTable
Dim dtb As New  DataTableBuilder("统计表")
dtb.AddDef("工号", Gettype(String), 16)
dtb.AddDef("计分金额", Gettype(Double))
dt = dtb.Build()
'开始逐行累加统计
Dim lst As  New  Dictionary(of String ,DataRow) '定义一个字典,用于检索每个员工在统计表中对应的行
For Each dr1 As DataRow In DataTables("派单").Select("日期>=#" & sd & "# and 日期 <#" & ed.AddDays(1) & "#")
    If dr1.IsNull("工号") = False Then '如果工号列不为空
        Dim nms() As String = dr1("工号").Split(",") '将工号列内容拆分成数组
        Dim v As Double = dr1("计分金额") / nms.Length '获得平均之后每个工号的生产计分金额
        For Each nm As String In nms  '遍历参与加工此产品的每个工号
            Dim  dr2 As  DataRow
            If  lst.ContainsKey(nm) '如果集合中包括此工号对应的行
                dr2=  lst(nm) '将此行赋值给变量dr2
            Else
                dr2 = dt.AddNew() '否则增加一行.
                dr2("工号") = nm  '新增行的工号列设置为此工号
                lst.add(nm,dr2) '将新增行添加到字典中,以便接下来检索
            End If
            dr2("计分金额") = dr2("计分金额") + v  '加上平均后的产量
        Next
    End If
Next

 

http://www.foxtable.com/help/topics/2720.htm

 



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


加好友 发短信
等级:二尾狐 帖子:500 积分:5409 威望:0 精华:0 注册:2009/2/5 13:09:00
  发帖心情 Post By:2016/6/11 20:17:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:统计多值(1).table

还是没弄对。麻烦您再看看呢?我想用两个选项来实现统计多值统计。感谢!

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


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

Dim sd As Date = e.Form.Controls("DateTimePicker1").Value
Dim ed As Date = e.Form.Controls("DateTimePicker2").Value

Dim dt As DataTable
Dim dtb As New  DataTableBuilder("统计表")
dtb.AddDef("员工", Gettype(String), 16)
dtb.AddDef("计分金额", Gettype(Double))
dt = dtb.Build()
'开始逐行累加统计
Dim lst As  New  Dictionary(of String ,DataRow) '定义一个字典,用于检索每个员工在统计表中对应的行
For Each dr1 As DataRow In DataTables("派单").Select("日期>=#" & sd & "# and 日期 <#" & ed.AddDays(1) & "#")
    If dr1.IsNull("员工") = False Then '如果员工列不为空
        Dim nms() As String = dr1("员工").Split(",") '将员工列内容拆分成数组
        Dim v As Double = dr1("计分金额") / nms.Length '获得平均之后每个员工的生产计分金额
        For Each nm As String In nms  '遍历参与加工此产品的每个员工
            Dim  dr2 As  DataRow
            If  lst.ContainsKey(nm) '如果集合中包括此员工对应的行
                dr2=  lst(nm) '将此行赋值给变量dr2
            Else
                dr2 = dt.AddNew() '否则增加一行.
                dr2("员工") = nm  '新增行的员工列设置为此员工
                lst.add(nm,dr2) '将新增行添加到字典中,以便接下来检索
            End If
            dr2("计分金额") = dr2("计分金额") + v  '加上平均后的产量
        Next
    End If
Next
e.Form.Controls("统计表").Table.DataSource = DataTables("统计表")


 回到顶部