Foxtable(狐表)用户栏目专家坐堂 → 如何动态增加列并按要求统计?


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

主题:如何动态增加列并按要求统计?

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


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
如何动态增加列并按要求统计?  发帖心情 Post By:2013/5/12 14:56:00 [只看该作者]

有三表,《回款表》、《进度应收》、《开piao》,三表都可通过“合同编号”列关联(但没关联),都有金额、日期列,随着项目进展,会不断增加日期值,如何动态生成下图的统计表:即按月统计相关表并汇总到一个临时表,用combin做了好久,一直没成功。

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

主要难在动态增加列,如本月是201305,下月就要统计到201306了,再下月就要统计到201307,通过窗口按钮统计到一个临时表中

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


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
  发帖心情 Post By:2013/5/12 20:17:00 [只看该作者]

刚做了个简单的例子,总和能统计出来,就是不知按所有的月份动态增加,哪位大师帮忙看看。

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
例子:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:从明细统计.table



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


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
  发帖心情 Post By:2013/5/12 21:48:00 [只看该作者]

用combin不能动态增加月份进行统计,代码如下: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("开piao"))
Dim dt3 As fxDataSource
bd3.Groups.AddDef("项目名称") '根据型号分组
bd3.Groups.AddDef("月份","开piao_月份") '根据型号分组
bd3.Totals.AddDef("金额","开piao_金额") '对金额进行统计
dt3 = bd3.BuildDataSource()
dt1.Combine("项目名称",dt2,"项目名称") '将销售统计数据组合到进货统计数据
dt1.Combine("项目名称",dt3,"项目名称") '将退货统计数据组合到进货统计数据
Tables("窗口2_table1").DataSource =dt1

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


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
  发帖心情 Post By:2013/5/12 22:14:00 [只看该作者]

如何将月份移到垂直统计列呢?(即每个项目只有唯一一行)

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


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


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
  发帖心情 Post By:2013/5/12 22:34:00 [只看该作者]

基本成功,一个人慢慢研究的感觉真的很好,感谢UHUA老师,要会举一反三,把COMBINE代码中的GROUPTABLEBULID改为CROSS,就行了,只不过,显示不是很友善没有多层表头,还得高人指点指点:
效果如下:

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

Dim bd1 As new  CrossTableBuilder("统计表1",DataTables("收款"))
Dim dt1 As fxDataSource
bd1.hGroups.AddDef("项目名称") '根据型号分组
bd1.vGroups.AddDef("月份","收款_月份")  '根据型号分组
bd1.Totals.AddDef("金额","收款_金额") '对金额进行统计
dt1 = bd1.BuildDataSource()
Dim bd2 As New crossTableBuilder("统计表2",DataTables("应收"))
Dim dt2  As fxDataSource
bd2.hGroups.AddDef("项目名称") '根据型号分组
bd2.vGroups.AddDef("月份","应收_月份") '根据型号分组
bd2.Totals.AddDef("金额","应收_金额") '对金额进行统计
dt2 = bd2.BuildDataSource()
Dim bd3 As New crossTableBuilder("统计表3",DataTables("开piao"))
Dim dt3 As fxDataSource
bd3.hGroups.AddDef("项目名称") '根据型号分组
bd3.vGroups.AddDef("月份","开piao_月份") '根据型号分组
bd3.Totals.AddDef("金额","开piao_金额") '对金额进行统计
dt3 = bd3.BuildDataSource()
dt1.Combine("项目名称",dt2,"项目名称") '将销售统计数据组合到进货统计数据
dt1.Combine("项目名称",dt3,"项目名称") '将退货统计数据组合到进货统计数据
dt1.show("统计表1")
[此贴子已经被作者于2013-5-12 22:35:15编辑过]

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2013/5/12 23:47:00 [只看该作者]

Dim dt1,dt2,dt3 As fxDataSource
Dim dts As fxDataSource() ={dt1,dt2,dt3}
Dim v1 As String() ={"收款","应收","开piao"}
Dim g As  CrossTableBuilder
Dim n1 As Integer
Dim s1,s2,SQL As String
s2 =" Union All Select 项目名称,金额 From{@}"

For Each s1  In v1
    g = New CrossTableBuilder("统计", DataTables(s1))
    g.HGroups.AddDef("项目名称")
    g.VGroups.AddDef("日期", DateGroupEnum.Year, s1 & "_{0}年")
    g.VGroups.AddDef("日期", "{0}月")
    g.Totals.AddDef("金额", "金额")
    g.HorizontalTotal = True
    dts(n1) = g.BuildDataSource()
    SQL+ = s2.replace("@",s1)
    n1=n1+1
Next

Dim g1 As New GroupTableBuilder("统计",SQL.Substring(11),"")
g1.Groups.AddDef("项目名称")
g1.Totals.AddDef("金额","总计")
dt1 = g1.BuildDataSource()

Dim nns As String = "项目名称"
dts(0).Combine(nns,dts(1),nns)
dts(0).Combine(nns,dts(2),nns)
dts(0).Combine(nns,dt1,nns)
Dim t1 As Table = Tables("窗口2_table1")
t1.DataSource =dts(0)
With t1.DataTable
    .DataCols("合计").Caption = "收款_小计"
    .DataCols("合计1").Caption = "应收_小计"
    .DataCols("合计2").Caption = "开piao_小计"
    .BuildHeader()
End With

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


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
回复:(don)Dim dt1,dt2,dt3 As fxDataSourceDim dt...  发帖心情 Post By:2013/5/13 7:11:00 [只看该作者]

谢谢指点,完美解决。

再请教一个问题:为什么我将这段代码中的窗口2改窗口3,就报错呢?(窗口3同样有按钮与table1)

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


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
  发帖心情 Post By:2013/5/13 7:26:00 [只看该作者]

将此例移到其它项目,出现下面错误,估计哪儿做错了?

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


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


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2013/5/13 9:21:00 [只看该作者]

用户已被锁定

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2013/5/13 11:23:00 [只看该作者]

如你採用外部數據源,需要指出數據源,這應該不用人家幫你的,否則還是認真看幾次幫助,弄清原理才是王道!
Dim g1 As New GroupTableBuilder("统计",SQL.Substring(11),"")     

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