以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] CrossTableBuilder 耗时的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=174165) |
||||
-- 作者:km007 -- 发布时间:2022/1/5 3:06:00 -- [求助] CrossTableBuilder 耗时的问题 交叉统计一年(大概 几十万行数据)销售数据,交叉统计后得出的统计表有 三万多行,如下代码 耗时 667 秒 这效率实在是快奔溃了 请问如何才能 优化 或 提高统计效率? \'代码如下:-------------------------------------------------------------------------------------------------------------------------------------- Dim st As Date = Date.Now Dim jb As New SQLJoinTableBuilder("临时测试表1","测试表A") jb.ConnectionName = _sjymc jb.AddExp("年份","year(日期)",True) jb.AddExp("月份","month(日期)",True) jb.AddExp("客户id","btypeid",True) jb.AddExp("产品id","PtypeId",True) \'-------------------------------------------------------------------------------------------------------------------------------------- jb.AddExp("金额","sum(金额)") jb.AddExp("数量","sum(数量)") jb.AddExp("毛利","sum(金额) - sum(成本)") \'-------------------------------------------------------------------------------------------------------------------------------------- jb.Filter = "日期 >= \'2021-01-01\' and 日期 <= \'2021-12-31\' and 编号 in (\'11\',\'26\',\'45\') and 类型 = \'2\'" \'-------------------------------------------------------------------------------------------------------------------------------------- Dim cb As new CrossTableBuilder("临时测试表",jb.BuildSQL,_sjymc) cb.HGroups.AddDef("年份") cb.HGroups.AddDef("月份") cb.HGroups.AddDef("产品id") cb.VGroups.AddDef("客户id") cb.Totals.Adddef("数量") cb.Totals.AddDef("实销") cb.Totals.AddDef("毛利") cb.Totals.AddDef("毛利率") cb.Build() \'-------------------------------------------------------------------------------------------------------------------------------------- output.show("耗时: " & (Date.Now - st).TotalSeconds & "秒") \'-------------------------------------------------------------------------------------------------------------------------------------- MainTable = Tables("临时测试表")
[此贴子已经被作者于2022/1/5 3:07:16编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2022/1/5 9:56:00 -- 1、减少统计的数据量 2、使用sql直接后台统计 |
||||
-- 作者:狐狸爸爸 -- 发布时间:2022/1/5 10:55:00 -- 建议直接用SQLGroupTableBuilder统计,可能会省点时间。 |
||||
-- 作者:km007 -- 发布时间:2022/1/5 12:17:00 -- 以下是引用狐狸爸爸在2022/1/5 10:55:00的发言: 建议直接用SQLGroupTableBuilder统计,可能会省点时间。 测试过了,效率没什么差异 这个问题搞了好几天 能想到的方法都测试过了 实在是奔溃吖 |
||||
-- 作者:狐狸爸爸 -- 发布时间:2022/1/5 14:00:00 -- 1、首先测试查询花了多少时间: Sel ect * Fr om 表名 日期 >= \'2021-01-01\' and 日期 <= \'2021-12-31\' and 编号 in (\'11\',\'26\',\'45\') and 类型 = \'2\' 2、其次不单单是数据量(行数),还要看分组数,假如有100个产品,1万个用户,1年12个月,统计一年的数据,就要进行1200万次汇总,可能要几个小时甚至几天才能完成。 可以将数据库和代码发上来,我看看是不是还有别的原因。 |
||||
-- 作者:km007 -- 发布时间:2022/1/5 16:26:00 -- 如下:直接用查询表 生成分组统计表,仅花了 7秒多时间 30多万行数据 分组统计行数:313,803 客户id数量:283 产品id数量:4,437 数据库发不上来,我是直接链接客户云服务器数据库的 此主题相关图片如下:qq图片20220105161849.png [此贴子已经被作者于2022/1/5 16:26:39编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2022/1/5 16:47:00 -- 把查询表数据导入access,做个项目例子发上来测试 |
||||
-- 作者:km007 -- 发布时间:2022/1/5 20:39:00 -- 由于论坛上传附件大小限制,仅能 将压缩包分压成 3个了 Access数据库里 明细表我添加了 50万数据 超级慢
[此贴子已经被作者于2022/1/5 20:41:10编辑过]
|
||||
-- 作者:狐狸爸爸 -- 发布时间:2022/1/6 8:26:00 -- 我这边测试340秒完成,我看看能否优化,提高一下速度,也许可以,也许不行。 但不管最后是否提速,你这个文件都不应该用交叉统计了,垂直分组列1250个左右,水平分组接近25000个,等于生成了一个1250列25000行的表,系统会随时崩溃,而其中超过90%的单元格是空(冗余)的。 建议采用分组统计,用折叠模式浏览统计结果,我们会改进一下普通数据的折叠模式,之前一列一个分组,改为可以将多列作为一个分组,方便查阅此类数据。
[此贴子已经被作者于2022/1/6 8:28:18编辑过]
|
||||
-- 作者:km007 -- 发布时间:2022/1/6 10:35:00 -- 里面的数据我是随意添加的 但生成报表格式就是这样的 横向分组为商品资料 垂直分组为客户名称 统计销售 这种格式很普遍的
|