Foxtable(狐表)用户栏目专家坐堂 → 我测试的组合统计结果怎么就不行呢?


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

主题:我测试的组合统计结果怎么就不行呢?

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
我测试的组合统计结果怎么就不行呢?  发帖心情 Post By:2011/6/10 17:25:00 [只看该作者]

请看附件,统计列是表达式,怎么也组合不起来。

外部数据库用的是CaseStudy文件夹中的 订单.mdb

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目15.table


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


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

呵呵,收到,一般你搞不定的,应该就是bug了,我抽时间看看。

正在忙个功能,要等等。


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


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

用foxtable自带的例子试了下,只要把统计列改成表达式,就组合失败。

如:bd2.Totals.AddExp("金额","数量*单价","销售_金额")


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


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

另外建议,在用Combine组合时,可否增加以下参数:

Combine(LeftColName, LeftCols,RightDataSource, RightColName,RightCols,Name, Expression,Caption)
其中,LeftCols为左表要组合的列名集合,RightCols为右表要组合的列名集合,

      Name为新增列名,Expression为计算表达式,可以根据两表的相关列生成新的数据,Caption为新增列的别名。

 

[此贴子已经被作者于2011-6-10 17:55:00编辑过]

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


加好友 发短信 F6
等级:狐精 帖子:3036 积分:19229 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2011/6/10 19:12:00 [只看该作者]

以下是引用reachtone在2011-6-10 17:25:00的发言:

请看附件,统计列是表达式,怎么也组合不起来。

外部数据库用的是CaseStudy文件夹中的 订单.mdb

 

 下载信息  [文件大小:308.0 KB  下载次数:2]
图片点击可在新窗口打开查看点击浏览该文件:管理项目15.table

我刚才试运行一下,其实是你的代码有问题,原因在于,你将5个表达式统计列的名称设成一样了,

 

我稍微修改一下表达式列名称之后就可以了,参考如下:

 

Dim bd1 As New SQLGroupTableBuilder("tjb1","订单")
bd1.C
bd1.Filter = "客户='CS01'"
bd1.Groups.AddDef("产品")
bd1.Totals.AddExp("部门_CS01","数量*单价")
bd1.GroupProportion = True    '生成分组占比
Dim dt1 As fxDataSource = bd1.BuildDataSource

Dim bd2 As New SQLGroupTableBuilder("tjb2","订单")
bd2.C
bd2.Filter = "客户='CS02'"
bd2.Groups.AddDef("产品")
bd2.Totals.AddExp("部门_CS02","数量*单价")
bd2.GroupProportion = True    '生成分组占比
Dim dt2 As fxDataSource = bd2.BuildDataSource()

Dim bd3 As New SQLGroupTableBuilder("tjb3","订单")
bd3.C
bd3.Filter = "客户='CS03'"
bd3.Groups.AddDef("产品")
bd3.Totals.AddExp("部门_CS03","数量*单价")
bd3.GroupProportion = True    '生成分组占比
Dim dt3 As fxDataSource = bd3.BuildDataSource()

Dim bd4 As New SQLGroupTableBuilder("tjb4","订单")
bd4.C
bd4.Filter = "客户='CS04'"
bd4.Groups.AddDef("产品")
bd4.Totals.AddExp("部门_CS04","数量*单价")
bd4.GroupProportion = True    '生成分组占比
Dim dt4 As fxDataSource = bd4.BuildDataSource()

Dim bd5 As New SQLGroupTableBuilder("tjb5","订单")
bd5.C
bd5.Filter = "客户='CS05'"
bd5.Groups.AddDef("产品")
bd5.Totals.AddExp("部门_CS05","数量*单价")
bd5.GroupProportion = True    '生成分组占比
Dim dt5 As fxDataSource = bd5.BuildDataSource()


 


此主题相关图片如下:qq截图未命名.png
按此在新窗口浏览图片
[此贴子已经被作者于2011-6-10 19:49:43编辑过]

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


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

以下是引用kylin在2011-6-10 19:12:00的发言:

我刚才试运行一下,其实是你的代码有问题,原因在于,你将5个表达式统计列的名称设成一样了,

这个不能说是代码的问题。因为它们是属于不同的表,字段名称应该可以一样的,就象AddDef可以增加多个相同的统计字段名一样,如:

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()

 

Combine只是将不同的表组合起来而已,同样的字段名分布在不同的表中应该也可以组合起来的,就象sql的join,左表和右表即使字段名称全部相同,也照样可以组合到一起。而且,即使按照你这种方法,把统计列名称设置为不一样的,但AddExp中设置的别名依然无法正确显示。


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


加好友 发短信 F6
等级:狐精 帖子:3036 积分:19229 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2011/6/11 7:25:00 [只看该作者]

按照你这么个测试说明的话,应该是有Bug,呵呵

 

我的这个发现还不是问题的本质了,呵呵

[此贴子已经被作者于2011-6-11 7:29:05编辑过]

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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/6/12 20:23:00 [只看该作者]

这个问题,kylin兄的判断是正确的,必须用不同的列名的,既然是编码,分别制定名称吧。

join语句虽然允许同名列,但是会自动改名,还不如自己明确指定一个列名好。


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


加好友 发短信
等级:超级版主 帖子:521 积分:4916 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2011/6/12 20:39:00 [只看该作者]

以下是引用kylin在2011-6-10 19:12:00的发言:

我刚才试运行一下,其实是你的代码有问题,原因在于,你将5个表达式统计列的名称设成一样了,

 

我稍微修改一下表达式列名称之后就可以了,参考如下:

 

Dim bd1 As New SQLGroupTableBuilder("tjb1","订单")
bd1.C
bd1.Filter = "客户='CS01'"
bd1.Groups.AddDef("产品")
bd1.Totals.AddExp("部门_CS01","数量*单价")
bd1.GroupProportion = True    '生成分组占比
Dim dt1 As fxDataSource = bd1.BuildDataSource

Dim bd2 As New SQLGroupTableBuilder("tjb2","订单")
bd2.C
bd2.Filter = "客户='CS02'"
bd2.Groups.AddDef("产品")
bd2.Totals.AddExp("部门_CS02","数量*单价")
bd2.GroupProportion = True    '生成分组占比
Dim dt2 As fxDataSource = bd2.BuildDataSource()

Dim bd3 As New SQLGroupTableBuilder("tjb3","订单")
bd3.C
bd3.Filter = "客户='CS03'"
bd3.Groups.AddDef("产品")
bd3.Totals.AddExp("部门_CS03","数量*单价")
bd3.GroupProportion = True    '生成分组占比
Dim dt3 As fxDataSource = bd3.BuildDataSource()

Dim bd4 As New SQLGroupTableBuilder("tjb4","订单")
bd4.C
bd4.Filter = "客户='CS04'"
bd4.Groups.AddDef("产品")
bd4.Totals.AddExp("部门_CS04","数量*单价")
bd4.GroupProportion = True    '生成分组占比
Dim dt4 As fxDataSource = bd4.BuildDataSource()

Dim bd5 As New SQLGroupTableBuilder("tjb5","订单")
bd5.C
bd5.Filter = "客户='CS05'"
bd5.Groups.AddDef("产品")
bd5.Totals.AddExp("部门_CS05","数量*单价")
bd5.GroupProportion = True    '生成分组占比
Dim dt5 As fxDataSource = bd5.BuildDataSource()


 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图未命名.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2011-6-10 19:49:43编辑过]


看到长长的公式,忍不住简化的冲动:

Dim bd As SQLGroupTableBuilder
Dim dt1,dt2,dt3,dt4,dt5 As fxDataSource
Dim Ls() As fxDataSource = {dt1,dt2,dt3,dt4,dt5}
Dim s() As String = {"CS01","CS02","CS03","CS04","CS05"}

For i As Integer = 0 To 4
    bd = New SQLGroupTableBuilder("tj","订单")
    bd.Connection Name = "dd"
    bd.Filter = "客户='" & s(i) & "'"
    bd.Groups.AddDef("产品")
    bd.Totals.AddExp("部门_" & s(i),"数量*单价")
    bd.GroupProportion = True
    Ls(i) = bd.BuildDataSource
Next

For i As Integer = 1 To 4
    Ls(0).Combine("产品",Ls(i),"产品")
Next

Tables("窗口1_Table1").DataSource = Ls(0)








[此贴子已经被作者于2011-6-12 20:40:36编辑过]

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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/6/12 20:45:00 [只看该作者]

呵呵,希望Y版天天冲动几回。

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