以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]交叉统计问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=184355)

--  作者:cherryjing
--  发布时间:2022/12/4 21:54:00
--  [求助]交叉统计问题
原本用CrossTableBuilder代码如下:
Dim g As New CrossTableBuilder("交叉统计表1", DataTables("设备材料表"))
If rdoUnit1.Checked Then
    g.HGroups.AddDef("主项编号")
    g.VGroups.AddDef("专业", "{0}_金额")
Else
    g.HGroups.AddDef("专业")
    g.VGroups.AddDef("主项编号", "{0}_金额")
End If

g.Totals.AddDef("金额", "金额")
g.HorizontalTotal = True
g.VerticalTotal = True
g.HorizontalProportion = True
g.Build()
Tables("Form_Stastistics_tbl_Stastistics").DataSource = g.BuildDataSource()

运行正常,但我为了将主项编号变为主项名称,修改代码如下:

Dim b As New SQLCrossTableBuilder("交叉统计表1", "设备材料表") 
\'b.C
b.AddTable("设备材料表", "主项编号", "主项表", "主项编号") \'添加统计表
If rdoUnit1.Checked Then
    b.HGroups.AddDef("主项名称") \'添加主项名称列用于水平分组
    b.VGroups.AddDef("专业", "{0}_金额") \'添加专业列用于垂直分组,并设置了Pattern参数
Else
    b.HGroups.AddDef("专业") \'添加专业列用于水平分组
    b.VGroups.AddDef("主项名称", "{0}_金额") \'添加主项名称列用于垂直分组,并设置了Pattern参数
End If

b.Totals.AddDef("金额", "金额") \'添加数量列用于统计
b.HorizontalTotal = True
b.VerticalTotal = True
b.HorizontalProportion = True
b.Build \'生成统计表
Tables("Form_Stastistics_tbl_Stastistics").DataSource = b.BuildDataSource()

运行错误:
统计错误,错误原因:在查询定义的SELECT列表中,别名‘金额’循环引用

--  作者:有点蓝
--  发布时间:2022/12/4 22:00:00
--  
参考:http://www.foxtable.com/webhelp/topics/3299.htm
--  作者:cherryjing
--  发布时间:2022/12/4 22:04:00
--  
金额列为表达式列,表达式为[单价]*[数量]


--  作者:有点蓝
--  发布时间:2022/12/4 22:11:00
--  
表达式列使用AddExp


b.Totals.AddExp("金额", "[单价]*[数量]")

--  作者:cherryjing
--  发布时间:2022/12/4 22:20:00
--  
修改代码如下:
Dim b As New SQLCrossTableBuilder("交叉统计表1", "设备材料表") 
\'b.C
b.AddTable("设备材料表", "主项编号", "主项表", "主项编号") \'添加统计表
If rdoUnit1.Checked Then
    b.HGroups.AddDef("{主项表}.主项名称") \'添加客户列用于水平分组
    b.VGroups.AddDef("{设备材料表}.专业", "{0}_{设备材料表}.金额") \'添加产品列用于垂直分组,并设置了Pattern参数
Else
    b.HGroups.AddDef("{设备材料表}.专业") \'添加客户列用于水平分组
    b.VGroups.AddDef("{主项表}.主项名称", "{0}_{设备材料表}.金额") \'添加产品列用于垂直分组,并设置了Pattern参数
End If
Output.Show ("chart 2: CrossTableBuilder")
b.Totals.AddDef("{设备材料表}.金额") \'添加数量列用于统计
b.HorizontalTotal = True
b.VerticalTotal = True
b.HorizontalProportion = True
b.Build \'生成统计表

这次错误变成了:至少一个参数没有被指定值

--  作者:有点蓝
--  发布时间:2022/12/4 22:44:00
--  
b.VGroups.AddDef("{设备材料表}.专业", "{0}_金额") 
b.VGroups.AddDef("{主项表}.主项名称", "{0}_金额")

--  作者:cherryjing
--  发布时间:2022/12/5 16:25:00
--  
问题解决,就是表达式列的问题。接着有个新问题,就是如何把主项名称和主项编号同时显示出来,形如:
主项名称(主项编号)
[此贴子已经被作者于2022/12/5 16:39:43编辑过]

--  作者:有点蓝
--  发布时间:2022/12/5 16:41:00
--  
2个列都添加到分组里即可