Foxtable(狐表)用户栏目专家坐堂 → SQLCrossTableBuilder按日期统计时有点小问题


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

主题:SQLCrossTableBuilder按日期统计时有点小问题

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
SQLCrossTableBuilder按日期统计时有点小问题  发帖心情 Post By:2012/3/23 15:58:00 [只看该作者]

Dim g As New SQLCrossTableBuilder("统计表","明细数据")
g.C
g.HGroups.AddDef("日期", DateGroupEnum.None)
g.VGroups.AddDef("部门")
g.Totals.AddDef("数量", "数量")
g.VerticalTotal = True
g.Build()
MainTable = Tables("统计表")

 

重点在标出红线的那行代码,只要统计垂直汇总值,日期就变成这样了(取消此行正常!):


图片点击可在新窗口打开查看此主题相关图片如下:11.jpg
图片点击可在新窗口打开查看


 回到顶部
帅哥,在线噢!
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/3/23 16:01:00 [只看该作者]

改为用汇总模式吧:

 

Dim g As New SQLCrossTableBuilder("统计表","明细数据")
g.HGroups.AddDef("日期", DateGroupEnum.None)
g.VGroups.AddDef("部门")
g.Totals.AddDef("数量", "数量")
g.Subtotal = True
g.Build()
MainTable = Tables("统计表")


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2012/3/23 16:23:00 [只看该作者]

以下是引用狐狸爸爸在2012-3-23 16:01:00的发言:

改为用汇总模式吧:

 

Dim g As New SQLCrossTableBuilder("统计表","明细数据")
g.HGroups.AddDef("日期", DateGroupEnum.None)
g.VGroups.AddDef("部门")
g.Totals.AddDef("数量", "数量")
g.Subtotal = True
g.Build()
MainTable = Tables("统计表")

呵呵,生成汇总模式也不错,还可以展开目录树分级查看。如果用代码怎么写(打开目录树和关闭目录树)?


 回到顶部
帅哥,在线噢!
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/3/23 16:43:00 [只看该作者]

基本功能演示文件中就有:

 

 

Dim t As Table = Tables("订单")
Dim g As Subtotalgroup
t.StopRedraw()
t.SubtotalGroups.Clear()
t.GroupAboveData = True
t.TreeVisible = True
t.SpillNode = True

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "客户"
g.TotalOn = "数量,金额"
g.Caption = "{0} 小计"
t.SubtotalGroups.Add(g)

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "产品"
g.TotalOn = "数量,金额"
g.Caption = "{0} 合计"
t.SubtotalGroups.Add(g)

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "*"
g.TotalOn = "数量,金额"
g.Caption = "总计"
t.SubtotalGroups.Add(g)

t.Subtotal()
t.Grid.Tree.Show(1)
t.Grid.Tree.Show(0)
t.Grid.Rows(2).Node.Expanded = True
t.Grid.Rows(3).Node.Expanded = True
t.ResumeRedraw()


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2012/3/26 14:11:00 [只看该作者]

一楼问题仍然无解,对于通过BuildDataSource方法生成的统计结果,汇总模式无效。还是修正一下吧。。

 回到顶部
帅哥,在线噢!
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/3/26 14:14:00 [只看该作者]

绑定到Table控件之后,直接用代码生成汇总模式即可:


Tables("窗口1.Table1") = xxx.BuildDataSource
Dim t As Table = Tables("窗口1.Table1")
Dim g As SubtotalGroup
t.SubtotalGroups.Clear()
'定义客户分组
g = New SubtotalGroup '定义一个新的分组
g.Aggregate = AggregateEnum.Sum '统计类型为求和
g.GroupOn = "客户" '分组列为客户
g.TotalOn = "数量,金额" '统计数量和金额列
g.Caption = "{0} 小计" '设置标题
t.SubtotalGroups.Add(g) '加到分组集合中
'定义产品分组
g = New SubtotalGroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "产品"
g.TotalOn = "数量,金额"
g.Caption = "{0} 小计"
t.SubtotalGroups.Add(g)
'定义总计分组
g = New SubtotalGroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "*" '注意总计分组用符号*表示。
g.TotalOn = "数量,金额"
g.Caption = "总计"
t.SubtotalGroups.Add(g)
t.Subtotal() '生成汇总模式


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2012/3/26 14:23:00 [只看该作者]

晕,就为了日期的显示问题,要多写这么多代码,不必要吧?

能不能改一下SQLCrossTableBuilder,日期列就只按Date统计?


 回到顶部
帅哥,在线噢!
狐狸爸爸
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/3/26 14:25:00 [只看该作者]

呵呵,帖子已经收藏,有空再看了。

[此贴子已经被作者于2012-3-26 14:26:02编辑过]

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2012/3/26 14:42:00 [只看该作者]

SQLCrossTableBuilder最终也都是通过生成sql语句完成统计的,转换一下日期的类型应该是很简单的事。

在没解决之前,只好先不使用VerticalTotal属性了,自己通过代码增加合计行。


 回到顶部
帅哥,在线噢!
狐狸爸爸
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/3/26 14:47:00 [只看该作者]

问题没有表面这么简单的,这个本来是日期型,要垂直汇总后,只能改为字符型,因为最后一行“合计”两个字不是日期型。

就用代码生成汇总模式吧。


 回到顶部
总数 12 1 2 下一页