以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多值字段统计的问题请教?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=86110)

--  作者:manyifuwu
--  发布时间: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


--  作者:大红袍
--  发布时间:2016/6/11 0:19:00
--  
 比较麻烦,你做个有数据的例子发上来。
--  作者:manyifuwu
--  发布时间:2016/6/11 0:21:00
--  

立即马上,就传

 


--  作者:manyifuwu
--  发布时间:2016/6/11 0:31:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:统计多值.table

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

--  作者:大红袍
--  发布时间: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
--  发布时间:2016/6/11 20:17:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:统计多值(1).table

还是没弄对。麻烦您再看看呢?我想用两个选项来实现统计多值统计。感谢!
--  作者:大红袍
--  发布时间: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("统计表")