Foxtable(狐表)用户栏目专家坐堂 → [求助]统计表效率问题


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

主题:[求助]统计表效率问题

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


加好友 发短信
等级:四尾狐 帖子:837 积分:7217 威望:0 精华:0 注册:2017/8/31 12:07:00
[求助]统计表效率问题  发帖心情 Post By:2024/5/6 11:00:00 [只看该作者]

有以下统计表代码,关于效率问题,麻烦问一下老师是否有改进的的方法或者思路?

因为同时需要生成的统计表比较多,整体上感觉特慢。


'左边图表1
If FrWidth >= 1600 Then
    '业务统计图表数据生成
    Dim g As New SQLGroupTableBuilder("日常业务按年统计", "任务指派")
    g.C
    g.Filter = "申报期_年 > 2017"
    g.Groups.AddDef("申报期_年", "年份")
    g.Totals.AddDef("业务编号", AggregateEnum.Count, "业务量")
    g.Build()
    If DataTables.Contains("日常业务按年统计") = True Then
        Dim sum As Integer = DataTables("日常业务按年统计").Compute("sum(业务量)")
        Dim n As Integer = DataTables("日常业务按年统计").DataRows.Count
        Dim Chart As WinForm.Chart '定义一个图表变量
        Dim Series As WinForm.ChartSeries '定义一个图系变量
        Chart = fr.Controls("Chart1") ' 引用窗口中的图表
        'Chart.ChartType = ChartTypeEnum.Bar '设置图表类型为柱状
        Chart.ChartType = ChartTypeEnum.XYPlot '设置图表类型为折线
        Chart.VisualEffect = True '改变样式
        Chart.DataSource = "日常业务按年统计" '设置绑定表
        Chart.SeriesList.Clear() '清除图表原来的图系
        Chart.AxisX.GridMajorVisible = False '不显示网格线
        Chart.AxisY.GridMajorVisible = False '不显示网格线
        Chart.AxisY.Min = 0 '指定Y轴的最小值
        Chart.AxisX.Text = "年份(共" & n & "年)"
        Chart.AxisY.Text = "业务量" & vbcrlf & "(" & sum & ")"
        Series = Chart.SeriesList.Add() '增加一个图系
        Series.X.DataField = "年份" 'X轴绑定到月份列
        Series.Y.DataField = "业务量" 'Y轴绑定到数量列
        Series.DataLabelText = "{#YVAL}"
    End If
End If

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/5/6 11:02:00 [只看该作者]

没啥改进的了

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


加好友 发短信
等级:四尾狐 帖子:837 积分:7217 威望:0 精华:0 注册:2017/8/31 12:07:00
  发帖心情 Post By:2024/5/6 14:38:00 [只看该作者]

老师,我改用异步函数能够分别生成统计表了,麻烦问一下图表如何调用Build(True)生成的统计表数据?

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/5/6 14:42:00 [只看该作者]

方法1、http://www.foxtable.com/webhelp/topics/0985.htm
Chart.DataSource = "日常业务按年统计" '设置绑定表
改为
Chart.DataTable =  Build(True)生成的统计表

2、改为遍历:http://www.foxtable.com/webhelp/topics/0967.htm,看方法一

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


加好友 发短信
等级:四尾狐 帖子:837 积分:7217 威望:0 精华:0 注册:2017/8/31 12:07:00
  发帖心情 Post By:2024/5/6 14:52:00 [只看该作者]

这两种方法都不能用,因为异步生成的统计表不显示,请老师帮忙!

帮助中:

要在异步函数中正常使用这四个类,必须将Build方法的可选参数设置为True,这样生成的表就不会出现在主界面中,例如:

Dim g As New SQLGroupTableBuilder("统计表1""订单")
g
.Groups.AddDef("日期", DateGroupEnum.Quarter, "季")
g
.Totals.AddDef("数量")
Dim
 dt As DataTable = g.Build(True' 一定要将参数设置为True

[此贴子已经被作者于2024/5/6 14:52:16编辑过]

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/5/6 14:53:00 [只看该作者]

建一个全局变量,异步列里调用同步把生成的统计表赋值给全局变量

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


加好友 发短信
等级:四尾狐 帖子:837 积分:7217 威望:0 精华:0 注册:2017/8/31 12:07:00
  发帖心情 Post By:2024/5/6 15:20:00 [只看该作者]

老师按照指点修改后执行代码不报错了,但是绑定表不执行(红色代码分别测试后不行),不知什么原因?

'统计生成
Dim g As New SQLGroupTableBuilder("日常业务按年统计", "任务指派")
g.C
g.Filter = "申报期_年 > 2017"
g.Groups.AddDef("申报期_年", "年份")
g.Totals.AddDef("业务编号", AggregateEnum.Count, "业务量")
_TJtable1 = g.Build(True)
Functions.BeginSyncExecute("主页数据刷新_左边图表1")

'主页数据刷新_左边图表1函数
Dim n As Integer = _TJtable1.DataRows.Count
If n > 0 Then
    Dim sum As Integer = _TJtable1.Compute("sum(业务量)")
    Dim Chart As WinForm.Chart '定义一个图表变量
    Dim Series As WinForm.ChartSeries '定义一个图系变量
    Chart = fr.Controls("Chart1") ' 引用窗口中的图表
    Chart.ChartType = ChartTypeEnum.XYPlot '设置图表类型为折线
    Chart.VisualEffect = True '改变样式
    Chart.DataSource = "日常业务按年统计" '设置绑定表
    Chart.DataSource = _TJtable1.name  '设置绑定表
    Chart.SeriesList.Clear() '清除图表原来的图系
    Chart.AxisX.GridMajorVisible = False '不显示网格线
    Chart.AxisY.GridMajorVisible = False '不显示网格线
    Chart.AxisY.Min = 0 '指定Y轴的最小值
    Chart.AxisX.Text = "年份(共" & n & "年)"
    Chart.AxisY.Text = "业务量" & vbcrlf & "(" & sum & ")"
    Series = Chart.SeriesList.Add() '增加一个图系
    Series.X.DataField = "年份" 'X轴绑定到月份列
    Series.Y.DataField = "业务量" 'Y轴绑定到数量列
    Series.DataLabelText = "{#YVAL}"
End If
[此贴子已经被作者于2024/5/6 15:22:30编辑过]

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/5/6 15:36:00 [只看该作者]

'统计生成
Dim g As New SQLGroupTableBuilder("日常业务按年统计", "任务指派")
g.C
g.Filter = "申报期_年 > 2017"
g.Groups.AddDef("申报期_年", "年份")
g.Totals.AddDef("业务编号", AggregateEnum.Count, "业务量")
dim dt as datatable = g.Build(True)
Functions.BeginSyncExecute("主页数据刷新_左边图表1",dt )

'主页数据刷新_左边图表1函数
_TJtable1 = args(0)
Dim n As Integer = _TJtable1.DataRows.Count
If n > 0 Then
    Dim sum As Integer = _TJtable1.Compute("sum(业务量)")
……
    Chart.VisualEffect = True '改变样式
    Chart.DataTable =_TJtable1  '设置绑定表
    Chart.SeriesList.Clear() '清除图表原来的图系
……
[此贴子已经被作者于2024/5/6 15:37:03编辑过]

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


加好友 发短信
等级:四尾狐 帖子:837 积分:7217 威望:0 精华:0 注册:2017/8/31 12:07:00
  发帖心情 Post By:2024/5/6 17:06:00 [只看该作者]

合适了,谢谢老师!
问题出在:
Chart.DataSource = _TJtable1.name  '设置绑定表(显示的表)
Chart.DataTable =_TJtable1  '设置绑定表(内存中的表)
[此贴子已经被作者于2024/5/6 17:22:31编辑过]

 回到顶部