以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]组合多个统计结果,问,要按日期的月份统计,应该怎么写?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=179976)

--  作者:fengwenliuyan
--  发布时间:2022/9/21 14:39:00
--  [求助]组合多个统计结果,问,要按日期的月份统计,应该怎么写?
组合多个统计结果,如何将按日期的月份,进行统计,帮助文件中的示例中是这样写的:
(问,要按日期的月份统计,应该怎么写?

Dim bd1 As New GroupTableBuilder("统计表1",DataTables("进货单"))
Dim
dt1 As fxDataSource
bd1
.Groups.AddDef("型号") \'根据型号分组
bd1
.Totals.AddDef("数量","进货_数量") \'对数量进行统计
bd1
.Totals.AddDef("金额","进货_金额") \'对金额进行统计
dt1
= bd1.BuildDataSource()

Dim
bd2 As New GroupTableBuilder("统计表2",DataTables("销售单"))
Dim
dt2  As fxDataSource
bd2
.Groups.AddDef("型号") \'根据型号分组
bd2
.Totals.AddDef("数量","销售_数量") \'对数量进行统计
bd2
.Totals.AddDef("金额","销售_金额") \'对金额进行统计
dt2
= bd2.BuildDataSource()

Dim bd3 As New GroupTableBuilder("统计表3",DataTables("退货单"))
Dim
dt3 As fxDataSource
bd3
.Groups.AddDef("型号") \'根据型号分组
bd3
.Totals.AddDef("数量","退货_数量") \'对数量进行统计
bd3
.Totals.AddDef("金额","退货_金额") \'对金额进行统计
dt3 = bd3.BuildDataSource()

dt1.Combine("型号",dt2,"型号") \'将销售统计数据组合到进货统计数据
dt1
.Combine("型号",dt3,"型号") \'将退货统计数据组合到进货统计数据

Tables("窗口1_Table1").DataSource = dt1 \'将统计结果绑定到Table
With
DataTables("窗口1_Table1").DataCols  \'用表达式列计算库存数据
   
.Add("库存_数量",Gettype(Integer), "IsNull([进货_数量],0) - ISNULL([销售_数量],0) - ISNULL([退货_数量],0)")
   
.Add("库存_金额",Gettype(Double), "[库存_数量] /[进货_数量] * [进货_金额]"
End With


--  作者:有点蓝
--  发布时间:2022/9/21 14:41:00
--  
http://www.foxtable.com/webhelp/topics/3284.htm

示例二,统计不同月份的销售数量和金额 

将下面的代码复制到命令窗口: 

Dim b As New GroupTableBuilder("统计表1",DataTables("订单"))
b.Groups.AddDef(
"日期","月份"\'添加日期列用于分组,并用"月份"代替原名称
b.Totals.AddDef(
"数量"\'添加数量列用于统计
b.Totals.AddDef("金额"\'添加金额列用于统计
b.Build 
\'生成统计表
MainTable = Tables("统计表1"\'打开生成的统计表


--  作者:fengwenliuyan
--  发布时间:2022/9/21 16:13:00
--  
以下是引用有点蓝在2022/9/21 14:41:00的发言:
http://www.foxtable.com/webhelp/topics/3284.htm

示例二,统计不同月份的销售数量和金额 

将下面的代码复制到命令窗口: 

Dim b As New GroupTableBuilder("统计表1",DataTables("订单"))
b.Groups.AddDef(
"日期","月份"\'添加日期列用于分组,并用"月份"代替原名称
b.Totals.AddDef(
"数量"\'添加数量列用于统计
b.Totals.AddDef("金额"\'添加金额列用于统计
b.Build 
\'生成统计表
MainTable = Tables("统计表1"\'打开生成的统计表




改这一行吗?

bd1.Groups.AddDef("型号","月份") \'根据型号分组?

但是提示错误,没有发现“型号”?


--  作者:有点蓝
--  发布时间:2022/9/21 16:19:00
--  
有"型号"这个名称的列?是日期型列?
--  作者:fengwenliuyan
--  发布时间:2022/9/22 11:03:00
--  
Dim bd1 As New GroupTableBuilder("统计表1", DataTables("入库表"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("入库日期", "入库月份") 
bd1.Groups.AddDef("品名") \'根据品名分组
bd1.Totals.AddDef("入库数量", "入库_数量") \'对数量进行统计
bd1.Totals.AddDef("入库金额", "入库_金额") \'对金额进行统计
dt1 = bd1.BuildDataSource()

Dim bd2 As New GroupTableBuilder("统计表2", DataTables("出库表"))
Dim dt2 As fxDataSource
bd2.Groups.AddDef("领用日期", "领用月份") 
bd2.Groups.AddDef("品名") \'根据品名分组
bd2.Totals.AddDef("领用数量", "领用_数量") \'对数量进行统计
bd2.Totals.AddDef("领用金额", "领用_金额") \'对金额进行统计
dt2 = bd2.BuildDataSource()

Dim bd3 As New GroupTableBuilder("统计表3", DataTables("库存表"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("品名") \'根据品名分组
bd3.Totals.AddDef("初始库存", "初始_库存") \'对数量进行统计
\'bd3.Totals.AddDef("金额", "退货_金额") \'对金额进行统计
dt3 = bd3.BuildDataSource()

dt1.Combine("品名", dt2, "品名") \'将销售统计数据组合到进货统计数据
dt1.Combine("品名", dt3, "品名") \'将退货统计数据组合到进货统计数据
Tables("按月统计表窗口_按月统计表").DataSource = dt1 \'将统计结果绑定到Table
With DataTables("按月统计表窗口_按月统计表").DataCols \'用表达式列计算库存数据
    .Add("库存_数量", GetType(Integer), "IsNull([入库_数量],0) - ISNULL([领用_数量],0) + ISNULL([初始_库存],0)")
    .Add("库存_金额", GetType(Double), "[库存_数量] /[入库_数量] * [入库_金额]") 
End With

以上红色字体标识的部分,就是添加的分组,
目的是想要达到,讲入库和领用的日期,添加到最终的统计表中,应该怎么改?

这是提示的错误描述:
An item with the same key has already been added.
[此贴子已经被作者于2022/9/22 11:06:23编辑过]

--  作者:有点蓝
--  发布时间:2022/9/22 11:11:00
--  
多个分组列参考:http://www.foxtable.com/webhelp/topics/2392.htm

另外这种合并统计,所有统计表的分组个数必须一致,也就是"统计表3"也必须增加一个月份的分组,否则无法关联

--  作者:fengwenliuyan
--  发布时间:2022/9/22 13:23:00
--  
Dim bd1 As New GroupTableBuilder("统计表1", DataTables("入库表"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("入库日期", "月份") 
bd1.Groups.AddDef("品名") \'根据品名分组
bd1.Totals.AddDef("入库数量", "入库_数量") \'对数量进行统计
bd1.Totals.AddDef("入库金额", "入库_金额") \'对金额进行统计
dt1 = bd1.BuildDataSource()

Dim bd2 As New GroupTableBuilder("统计表2", DataTables("出库表"))
Dim dt2 As fxDataSource
bd2.Groups.AddDef("领用日期", "月份") 
bd2.Groups.AddDef("品名") \'根据品名分组
bd2.Totals.AddDef("领用数量", "领用_数量") \'对数量进行统计
bd2.Totals.AddDef("领用金额", "领用_金额") \'对金额进行统计
dt2 = bd2.BuildDataSource()

dt1.Combine("品名", dt2, "品名") \'将销售统计数据组合到进货统计数据
Tables("按月统计表窗口_按月统计表").DataSource = dt1 \'将统计结果绑定到Table
With DataTables("按月统计表窗口_按月统计表").DataCols \'用表达式列计算库存数据
    .Add("库存_数量", GetType(Integer), "IsNull([入库_数量],0) - ISNULL([领用_数量],0)")
    .Add("库存_金额", GetType(Double), "[库存_数量] /[入库_数量] * [入库_金额]") 
End With

这种合并统计,所有统计表的分组个数必须一致,也就是"统计表3"也必须增加一个月份的分组,否则无法关联
既然要一致,我索性把统计表3内容全去掉了。
但是,结果还是出现错误提示:
An item with the same key has already been added.

--  作者:有点蓝
--  发布时间:2022/9/22 13:29:00
--  
多个分组列参考:http://www.foxtable.com/webhelp/topics/2392.htm
--  作者:fengwenliuyan
--  发布时间:2022/9/22 13:41:00
--  
Dim bd1 As New GroupTableBuilder("统计表1", DataTables("入库表"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("品名") \'根据品名分组
bd1.Groups.AddDef("入库日期", "月份") \'根据月份分组
bd1.Totals.AddDef("入库数量", "入库_数量") \'对数量进行统计
bd1.Totals.AddDef("入库金额", "入库_金额") \'对金额进行统计
dt1 = bd1.BuildDataSource() 

Dim bd2 As New GroupTableBuilder("统计表2", DataTables("出库表"))
Dim dt2 As fxDataSource
bd2.Groups.AddDef("品名") \'根据品名分组
bd2.Groups.AddDef("领用日期", "月份") \'根据月份分组
bd2.Totals.AddDef("领用数量", "领用_数量") \'对数量进行统计
bd2.Totals.AddDef("领用金额", "领用_金额") \'对金额进行统计
dt2 = bd2.BuildDataSource()

Dim nms As String() = {"品名", "月份"} \'指定连接列
dt1.Combine(nms, dt2, nms) \'将销售统计数据组合到进货统计数据
dt1.Show("统计表1") \'显示统计结果

结果,显示不出统计结果:

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


--  作者:有点蓝
--  发布时间:2022/9/22 13:53:00
--  
dt1.Show("统计表1") 是显示为主表的,绑定到窗口,参考:http://www.foxtable.com/webhelp/topics/2305.htm