Foxtable(狐表)用户栏目专家坐堂 → [求助]查询和统计结果结合图表的应用


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

主题:[求助]查询和统计结果结合图表的应用

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


加好友 发短信
等级:九尾狐 帖子:2199 积分:18081 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]查询和统计结果结合图表的应用  发帖心情 Post By:2015/5/31 20:25:00 [只看该作者]

如附件所示,如何将交叉统计的结果生成图表。
例如将当期的值形成柱状图,同时将累计的值形成折线图?

查看了帮助,发现生成图表要绑定表的列值,但是交叉表的列不一样啊,咋个整法?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目28.foxdb


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/31 20:45:00 [只看该作者]

 呃,首先,横坐标是什么,纵坐标是什么?

 

 而且,谁说一定要绑定列值? 看示例二

 

http://www.foxtable.com/help/topics/0968.htm

 

http://www.foxtable.com/help/topics/0970.htm

 


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


加好友 发短信
等级:九尾狐 帖子:2199 积分:18081 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2199 积分:18081 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2015/5/31 22:04:00 [只看该作者]

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


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2199 积分:18081 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2015/5/31 23:23:00 [只看该作者]

理解了。关键点在这里
Chart.SeriesList.Clear() '清除图表原来的图系
Chart.SeriesList2.Clear() '清除图表原来的图系


1、Per中没有=201403的值,为什么横坐标会自动插一个201403的值进来呢?
----如果per的列类型为字符就没有问题,为什么是数字就不行?如何解决之?

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/6/1 9:29:00 [只看该作者]

 回复6楼,方法1,把类型转成字符类型;方法2,不要绑定列的方式生成表,用代码一个一个赋值,看2楼

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


加好友 发短信
等级:九尾狐 帖子:2199 积分:18081 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2015/6/1 16:56:00 [只看该作者]

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

红袍兄,参考了二楼做法,为什么绑定列就可以正常出图,写代码指定值不行呢?

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2199 积分:18081 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2015/6/2 16:46:00 [只看该作者]

再请教,如何解决左侧切换行时图的横坐标的重叠问题?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:27.zip


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