以文本方式查看主题
- 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
--
窗口里的日期统计,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
--
还是没弄对。麻烦您再看看呢?我想用两个选项来实现统计多值统计。感谢!
|
-- 作者:大红袍
-- 发布时间: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("统计表")
|