以文本方式查看主题

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

--  作者:洮沙
--  发布时间: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

--  作者:有点蓝
--  发布时间:2024/5/6 11:02:00
--  
没啥改进的了
--  作者:洮沙
--  发布时间:2024/5/6 14:38:00
--  
老师,我改用异步函数能够分别生成统计表了,麻烦问一下图表如何调用Build(True)生成的统计表数据?
--  作者:有点蓝
--  发布时间: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,看方法一

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

--  作者:有点蓝
--  发布时间:2024/5/6 14:53:00
--  
建一个全局变量,异步列里调用同步把生成的统计表赋值给全局变量
--  作者:洮沙
--  发布时间: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编辑过]

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

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