以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  代码纠错。  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=59168)

--  作者:zbsdkq012890
--  发布时间:2014/10/30 11:02:00
--  代码纠错。

我下面的一大段代码是采用组合统计多个连接列编写的,测试后应用没有其他问题。只有一个问题很困扰我,就是根据月度分组时本该同年同月在一起分组的,但是这段代码是把不同年份相同月份的数据分组在一起了。个数据表中月度列的列属性我选择的都是日期时间,格式是DATE(2014-01-31),请大侠们帮我看看这段代码哪里有问题,小弟不胜感激啊

 

Dim bd1 As New GroupTableBuilder("统计表1",DataTables("营业收入"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("店面名称") \'根据店面名称分组
bd1.Groups.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("支出金额","支出总金额") \'对支出金额进行统计
dt2 = bd2.BuildDataSource()

Dim bd3 As New GroupTableBuilder("统计表3",DataTables("费用支出"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("店面名称") \'根据店面名称分组
bd3.Groups.AddDef("月度") \'根据月度分组
bd3.Totals.AddDef("费用金额","费用总金额") \'对费用金额进行统计
dt3 = bd3.BuildDataSource()

Dim bd4 As New GroupTableBuilder("统计表4",DataTables("成本支出"))
Dim dt4 As fxDataSource
bd4.Groups.AddDef("店面名称") \'根据店面名称分组
bd4.Groups.AddDef("月度") \'根据月度分组
bd4.Totals.AddDef("成本金额","成本总金额") \'对成本金额进行统计
dt4 = bd4.BuildDataSource()

Dim nms As String() = {"店面名称","月度"} \'指定连接列
dt1.Combine(nms,dt2,nms) \'将支出总金额组合到营业收入统计数据
dt1.Combine(nms,dt3,nms) \'将费用总金额组合到营业收入统计数据
dt1.Combine(nms,dt4,nms) \'将成本总金额组合到营业收入统计数据
Tables("窗口1_Table11").DataSource = dt1 \'将统计结果绑定到Table
With DataTables("窗口1_Table11").DataCols  \'用表达式列计算当月利润数据
    .Add("当月利润",Gettype(Integer), "IsNull([收入总金额],0) - ISNULL([支出总金额],0) - ISNULL([费用总金额],0) - ISNULL([成本总金额],0)")
End With

[此贴子已经被作者于2014-10-30 11:02:43编辑过]

--  作者:有点甜
--  发布时间:2014/10/30 11:07:00
--  

1、你要根据年、月一起分组;

 

2、最后,要根据店面、年、月一期合并。

 

在Groups集合中添加一个分组列的语法是: 

Groups.AddDef(Name)
Groups.AddDef(Name, NewName)
Groups.AddDef(Name, NewName, NewCaption)
Groups.AddDef(Name, DateGroup)
Groups.AddDef(Name, DateGroup, NewName)
Groups.AddDef(Name, DateGroup, NewName, NewCaption)

 

参数说明

Name:        字符型,指定分组列。
NewName:     字符型,用于给分组列指定一个新的名称,这个名称在统计表中显示。
NewCaption:  字符型,用于给分组列设置标题。
DateGroup:  DateGroupEnum型枚举,如果分组列是日期列,可用此属性指定如何根据日期进行分组,默认按月分组。

 

DateGroupEnum枚举的可选值:

None :     不分组
Year:      按年分组
Quarter:   按季度分组
Month:     按月分组
Week:      按周分组
Day:       按天分组,月中的某一天。
Hour:      按小时分组
Minute:    按分钟分组
Second:    按秒分组


--  作者:zbsdkq012890
--  发布时间:2014/10/30 11:38:00
--  
看了半天你的回复,非常感谢,但是我试着改了半天,还是改不对,而且越改越乱。小弟不才啊,还请兄台能帮忙具体指出小弟的那行代码应该改成什么样子吧。
--  作者:有点甜
--  发布时间:2014/10/30 11:50:00
--  

Dim bd1 As New GroupTableBuilder("统计表1",DataTables("营业收入"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("店面名称") \'根据店面名称分组
bd1.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd1.Groups.AddDef("月度") \'根据月度分组
bd1.Totals.AddDef("营业收入","收入总金额") \'对营业收入进行统计
dt1 = bd1.BuildDataSource()

Dim bd2 As New GroupTableBuilder("统计表2",DataTables("固定支出"))
Dim dt2 As fxDataSource
bd2.Groups.AddDef("店面名称") \'根据店面名称分组
bd2.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd2.Groups.AddDef("月度") \'根据月度分组
bd2.Totals.AddDef("支出金额","支出总金额") \'对支出金额进行统计
dt2 = bd2.BuildDataSource()

Dim bd3 As New GroupTableBuilder("统计表3",DataTables("费用支出"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("店面名称") \'根据店面名称分组
bd3.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd3.Groups.AddDef("月度") \'根据月度分组
bd3.Totals.AddDef("费用金额","费用总金额") \'对费用金额进行统计
dt3 = bd3.BuildDataSource()

Dim bd4 As New GroupTableBuilder("统计表4",DataTables("成本支出"))
Dim dt4 As fxDataSource
bd4.Groups.AddDef("店面名称") \'根据店面名称分组
bd4.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd4.Groups.AddDef("月度") \'根据月度分组
bd4.Totals.AddDef("成本金额","成本总金额") \'对成本金额进行统计
dt4 = bd4.BuildDataSource()

Dim nms As String() = {"店面名称","年度","月度"} \'指定连接列
dt1.Combine(nms,dt2,nms) \'将支出总金额组合到营业收入统计数据
dt1.Combine(nms,dt3,nms) \'将费用总金额组合到营业收入统计数据
dt1.Combine(nms,dt4,nms) \'将成本总金额组合到营业收入统计数据
Tables("窗口1_Table11").DataSource = dt1 \'将统计结果绑定到Table
With DataTables("窗口1_Table11").DataCols  \'用表达式列计算当月利润数据
    .Add("当月利润",Gettype(Integer), "IsNull([收入总金额],0) - ISNULL([支出总金额],0) - ISNULL([费用总金额],0) - ISNULL([成本总金额],0)")
End With


--  作者:zbsdkq012890
--  发布时间:2014/10/30 11:54:00
--  
非常感谢兄台。按你给的代码测试成功,你是真正的大侠!呵呵
--  作者:zbsdkq012890
--  发布时间:2014/10/31 10:13:00
--  
兄台多谢你帮着小弟做了个多列组合式的统计表,但是小弟现在又遇到个问题,就是针对这个统计表的查询设置怎么弄啊,我以前都是用目录树的方法做查询的,现在好像对统计表不管用了。一般的查询方式对统计表是不是都不管用啊?
--  作者:有点甜
--  发布时间:2014/10/31 10:16:00
--  
  不会啊。关键是你看一下这个表的表结构,有可能表名没写对。
--  作者:zbsdkq012890
--  发布时间:2014/10/31 10:50:00
--  
下面红色部分是加入表达式列,我好想做的不对,总是弹出错误。你帮我看看该怎么加入表达式列啊。
Dim bd1 As New GroupTableBuilder("利润表",DataTables("营业收入"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("店面名称") \'根据店面名称分组
bd1.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd1.Groups.AddDef("月度") \'根据月度分组
bd1.Totals.AddDef("营业收入","收入总金额") \'对营业收入进行统计
dt1 = bd1.BuildDataSource()
Dim bd2 As New GroupTableBuilder("统计表2",DataTables("固定支出"))
Dim dt2 As fxDataSource
bd2.Groups.AddDef("店面名称") \'根据店面名称分组
bd2.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd2.Groups.AddDef("月度") \'根据月度分组
bd2.Totals.AddDef("支出金额","支出总金额") \'对支出金额进行统计
dt2 = bd2.BuildDataSource()
Dim bd3 As New GroupTableBuilder("统计表3",DataTables("费用支出"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("店面名称") \'根据店面名称分组
bd3.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd3.Groups.AddDef("月度") \'根据月度分组
bd3.Totals.AddDef("费用金额","费用总金额") \'对费用金额进行统计
dt3 = bd3.BuildDataSource()
Dim bd4 As New GroupTableBuilder("统计表4",DataTables("成本支出"))
Dim dt4 As fxDataSource
bd4.Groups.AddDef("店面名称") \'根据店面名称分组
bd4.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd4.Groups.AddDef("月度") \'根据月度分组
bd4.Totals.AddDef("成本金额","成本总金额") \'对成本金额进行统计
dt4 = bd4.BuildDataSource()
Dim nms As String() = {"店面名称","年度","月度"} \'指定连接列
dt1.Combine(nms,dt2,nms) \'将支出总金额组合到营业收入统计数据
dt1.Combine(nms,dt3,nms) \'将费用总金额组合到营业收入统计数据
dt1.Combine(nms,dt4,nms) \'将成本总金额组合到营业收入统计数据

With DataTables("利润表").DataCols  \'用表达式列计算当月利润数据
    .Add("当月利润",Gettype(Integer), "IsNull([收入总金额],0) - ISNULL([支出总金额],0) - ISNULL([费用总金额],0) - ISNULL([成本总金额],0)")
End With
dt1.Show("利润表") \'显示统计结果

--  作者:zbsdkq012890
--  发布时间:2014/10/31 11:05:00
--  

下面红色部分是加入表达式列,我好像做的不对,总是弹出错误,但是把红色部分去掉,就一切正常了。你帮我看看该怎么加入表达式列啊。
Dim bd1 As New GroupTableBuilder("利润表",DataTables("营业收入"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("店面名称") \'根据店面名称分组
bd1.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd1.Groups.AddDef("月度") \'根据月度分组
bd1.Totals.AddDef("营业收入","收入总金额") \'对营业收入进行统计
dt1 = bd1.BuildDataSource()
Dim bd2 As New GroupTableBuilder("统计表2",DataTables("固定支出"))
Dim dt2 As fxDataSource
bd2.Groups.AddDef("店面名称") \'根据店面名称分组
bd2.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd2.Groups.AddDef("月度") \'根据月度分组
bd2.Totals.AddDef("支出金额","支出总金额") \'对支出金额进行统计
dt2 = bd2.BuildDataSource()
Dim bd3 As New GroupTableBuilder("统计表3",DataTables("费用支出"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("店面名称") \'根据店面名称分组
bd3.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd3.Groups.AddDef("月度") \'根据月度分组
bd3.Totals.AddDef("费用金额","费用总金额") \'对费用金额进行统计
dt3 = bd3.BuildDataSource()
Dim bd4 As New GroupTableBuilder("统计表4",DataTables("成本支出"))
Dim dt4 As fxDataSource
bd4.Groups.AddDef("店面名称") \'根据店面名称分组
bd4.Groups.AddDef("月度", DateGroupEnum.Year, "年度")
bd4.Groups.AddDef("月度") \'根据月度分组
bd4.Totals.AddDef("成本金额","成本总金额") \'对成本金额进行统计
dt4 = bd4.BuildDataSource()
Dim nms As String() = {"店面名称","年度","月度"} \'指定连接列
dt1.Combine(nms,dt2,nms) \'将支出总金额组合到营业收入统计数据
dt1.Combine(nms,dt3,nms) \'将费用总金额组合到营业收入统计数据
dt1.Combine(nms,dt4,nms) \'将成本总金额组合到营业收入统计数据

With DataTables("利润表").DataCols  \'用表达式列计算当月利润数据
    .Add("当月利润",Gettype(Integer), "IsNull([收入总金额],0) - ISNULL([支出总金额],0) - ISNULL([费用总金额],0) - ISNULL([成本总金额],0)")
End With
dt1.Show("利润表") \'显示统计结果


--  作者:有点甜
--  发布时间:2014/10/31 11:46:00
--  

 是不是生成的表没有这些对应的列?

 

 具体报什么错?