以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- [求助]查询和统计结果结合图表的应用 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=69156)
|
-- 作者:chnfo
-- 发布时间:2015/5/31 20:25:00
-- [求助]查询和统计结果结合图表的应用
如附件所示,如何将交叉统计的结果生成图表。例如将当期的值形成柱状图,同时将累计的值形成折线图?
查看了帮助,发现生成图表要绑定表的列值,但是交叉表的列不一样啊,咋个整法?
|
-- 作者:大红袍
-- 发布时间:2015/5/31 20:45:00
--
呃,首先,横坐标是什么,纵坐标是什么?
而且,谁说一定要绑定列值? 看示例二
http://www.foxtable.com/help/topics/0968.htm
http://www.foxtable.com/help/topics/0970.htm
|
-- 作者:chnfo
-- 发布时间:2015/5/31 21:48:00
--
图表会按照PID来过滤,即要么生成P1,要么生成P2,所以,我在里面加了个条件PID=‘P1’然后是横坐标是per,纵坐标是V和累计的V值,要分Class类型。
问题是: 1、Per中没有=201403的值,为什么横坐标会自动插一个201403的值进来呢? 2、我是想V用柱状图,累计的V用折线图,也就是用双图来表示。 3、还有,这个图例看着很怪异,那个V_Up_1的“UP”让人看着很怪异,能不能显示为V_累计_1这样的呢?-----这个把Series.Text = c.name 改为Series.Text = c.caption就可以了
[此贴子已经被作者于2015/5/31 22:51:08编辑过]
|
-- 作者:chnfo
-- 发布时间:2015/5/31 22:04:00
--
|
-- 作者:大红袍
-- 发布时间:2015/5/31 23:10:00
--
Dim DT As fxDataSource Dim tbl As Table = e.Form.Controls("Table1").Table Dim b As New SQLCrossTableBuilder("AA","D") b.HGroups.AddDef("PID") \'b.HGroups.AddDef("CID") b.HGroups.AddDef("Per") b.VGroups.AddDef("Class") b.Totals.AddDef("V") b.Totals.AddDef("V","累计",True) \' b.Filter = "PID = \'P1\'" Dt = b.BuildDataSource() tbl.DataSource = DT
Dim Chart As WinForm.Chart \'定义一个图表变量 Dim Series As WinForm.ChartSeries \'定义一个图系变量 Chart = e.Form.Controls("Chart1") \' 引用窗口中的图表 Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形) Chart.ChartType2 = ChartTypeEnum.XYPlot Chart.DataSource = tbl.Name \'设置绑定表 Chart.SeriesList.Clear() \'清除图表原来的图系 Chart.SeriesList2.Clear() \'清除图表原来的图系 For Each c As Col In tbl.Cols If c.Name <> "PID" And c.Name <> "CID" And c.Name <> "Per" And c.Name <> "Class" Then If c.Caption Like "*V*" Then Series = Chart.SeriesList.Add() \'增加一个图系 Series.Text = c.Caption \'设置图系的标题 Series.X.DataField = "Per" \'X轴绑定到产品列 Series.Y.DataField = c.name \'设置Y轴的绑定列 ElseIf c.Caption Like "*累计*" Then Series = Chart.SeriesList2.Add() \'给图表2增加一个图系 Series.Text = c.Caption \'设置图系的标题 Series.X.DataField = "Per" \'X轴绑定到产品列 Series.Y.DataField = c.Name \'设置Y轴的绑定列 End If End If Next Chart.VisualEffect = True \'加上这一行,让你的图表更漂亮 Chart.LegendVisible = True \'显示图列 Chart.LegendCompass= CompassEnum.South \'图列显示在南方(底端)
|
-- 作者:chnfo
-- 发布时间:2015/5/31 23:23:00
--
理解了。关键点在这里Chart.SeriesList.Clear() \'清除图表原来的图系 Chart.SeriesList2.Clear() \'清除图表原来的图系
1、Per中没有=201403的值,为什么横坐标会自动插一个201403的值进来呢? ----如果per的列类型为字符就没有问题,为什么是数字就不行?如何解决之?
|
-- 作者:大红袍
-- 发布时间:2015/6/1 9:29:00
--
回复6楼,方法1,把类型转成字符类型;方法2,不要绑定列的方式生成表,用代码一个一个赋值,看2楼
|
-- 作者:chnfo
-- 发布时间:2015/6/1 16:56:00
--
红袍兄,参考了二楼做法,为什么绑定列就可以正常出图,写代码指定值不行呢?
|
-- 作者:大红袍
-- 发布时间:2015/6/1 17:12:00
--
要指定长度
Dim DT As fxDataSource Dim tbl As Table = e.Form.Controls("Table1").Table Dim b As New SQLCrossTableBuilder("AA","D") b.HGroups.AddDef("PID") \'b.HGroups.AddDef("CID") b.HGroups.AddDef("Per") b.VGroups.AddDef("Class") b.Totals.AddDef("V","本期") b.Totals.AddDef("V","累计",True) \' b.Filter = "PID = \'P1\'" Dt = b.BuildDataSource() tbl.DataSource = DT
Dim Chart As WinForm.Chart \'定义一个图表变量 Dim Series As WinForm.ChartSeries \'定义一个图系变量 Chart = e.Form.Controls("Chart1") \' 引用窗口中的图表 Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形) Chart.ChartType2 = ChartTypeEnum.XYPlot Chart.DataSource = tbl.Name \'设置绑定表 Chart.SeriesList.Clear() \'清除图表原来的图系 Chart.SeriesList2.Clear() \'清除图表原来的图系
For Each c As Col In tbl.Cols If c.Name <> "PID" And c.Name <> "CID" And c.Name <> "Per" And c.Name <> "Class" Then If c.Caption Like "*本期*" Then Series = Chart.SeriesList.Add() \'增加一个图系 Else Series = Chart.SeriesList2.Add() \'给图表2增加一个图系 End If Series.Text = c.caption \'设置图系的标题 series.Length = tbl.Rows.Count For i As Integer = 0 To tbl.Rows.Count - 1 series.x(i) = i series.y(i) = tbl.Rows(i)(c.Name) Chart.AxisX.SetValueLabel(i,tbl.Rows(i)("Per")) Next \'------------数据绑定列的做法 \'Series.X.DataField = "Per" \'X轴绑定到产品列 \'Series.Y.DataField = c.Name \'设置Y轴的绑定列 \'--------------数据绑定列的做法结束 End If Next
Chart.AxisX.AnnoWithLabels = True Chart.VisualEffect = True \'加上这一行,让你的图表更漂亮 Chart.LegendVisible = True \'显示图列 Chart.LegendCompass= CompassEnum.South \'图列显示在南方(底端)
|
-- 作者:chnfo
-- 发布时间:2015/6/2 16:46:00
--
再请教,如何解决左侧切换行时图的横坐标的重叠问题?
|