以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  我测试的组合统计结果怎么就不行呢?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=10532)

--  作者:reachtone
--  发布时间:2011/6/10 17:25:00
--  我测试的组合统计结果怎么就不行呢?

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

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

 

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


--  作者:狐狸爸爸
--  发布时间:2011/6/10 17:33:00
--  

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

正在忙个功能,要等等。


--  作者:reachtone
--  发布时间:2011/6/10 17:41:00
--  

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

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


--  作者:reachtone
--  发布时间: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
--  发布时间: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
--  发布时间: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
--  发布时间:2011/6/11 7:25:00
--  

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

 

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

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

--  作者:狐狸爸爸
--  发布时间:2011/6/12 20:23:00
--  

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

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


--  作者:ybil
--  发布时间: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编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/6/12 20:45:00
--  
呵呵,希望Y版天天冲动几回。