Foxtable(狐表)用户栏目专家坐堂 → 急,后台交叉统计表达式求助


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

主题:急,后台交叉统计表达式求助

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


加好友 发短信
等级:三尾狐 帖子:759 积分:7038 威望:0 精华:1 注册:2008/9/2 20:04:00
急,后台交叉统计表达式求助  发帖心情 Post By:2010/3/21 13:02:00 [只看该作者]

在收费表中有一个窗口,功能是对收费和人员管理中后台数据进行交叉统计,但是我写的代码却发生错误。
以"李四"可用款为例:
正确的数据为:2000-156-(-840)=2684
但是,统计后显示的值为1904,原因可能在这段代码中有问题:g.Totals.AddExp("可用款","[收费金额]-[月扣款]-([收费金额]/[任务])*[上缴]")
这段代码里的[月扣款]应为156,但是却是以936参与计算,即以6*156=936参与了计算,请问如何在表达式中对[月扣款]取平均值参与计算?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:信息管理.rar




另:横向汇总合计后,如何在数字型列“月份”中显示“合计”,当然如果第一列是字符型列,可以自动出现“合计”
[此贴子已经被作者于2010-3-21 13:05:12编辑过]

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


加好友 发短信
等级:三尾狐 帖子:759 积分:7038 威望:0 精华:1 注册:2008/9/2 20:04:00
  发帖心情 Post By:2010/3/21 22:05:00 [只看该作者]

我简化了一下代码为:g.Totals.AddExp("可用款","[月扣款]"),即统计月扣款,“李四”1月份的可用款为936,说明在g.Totals.AddExp("可用款","[收费金额]-[月扣款]-([收费金额]/[任务])*[上缴]")中[月扣款]是以936参与计算导致数据错误,请问如何设置表达式,使[月扣款]等于156参与计算?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:信息管理.rar


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


加好友 发短信
等级:超级版主 帖子:485 积分:2996 威望:0 精华:10 注册:2008/9/12 14:37:00
  发帖心情 Post By:2010/3/21 22:21:00 [只看该作者]

看不懂,最好用简单的例子来表述问题。

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/22 12:37:00 [只看该作者]

楼主原代码简化一下,看出问题来了:


as New SQLCrossTableBuilder("费用核算表","收费")  '收费表是基表
g.C
g.AddTable("收费","任务人","人员管理","姓名")          '人员管理表是加入的要统计的表
g.AddCols("人员管理","任务","月扣款","上缴")
g.HGroups.AddDef("开piao日期", "月")                    '这是基表内容  费用核算表的垂直内容
g.VGroups.AddDef("任务人")            '这是基表内容  费用核算表的水平内容
g.Totals.AddDef("收费金额")             '结果是基表内容 合计 (同一人同年月)
g.Totals.AddDef("任务")                   '结果是添加表(人员管理)的该列合计  乘以 按基表中同一人同年月个数
g.Totals.AddDef("月扣款")                '结果是添加表(人员管理)的该列合计  乘以 按基表中同一人同年月个数
g.Totals.AddDef("上缴")                   '结果是添加表(人员管理)的该列合计  乘以 按基表中同一人同年月个数
g.HorizontalTotal=True '水平方向自动汇总.
g.VerticalTotal=True ' 垂直方向自动汇总.
g.Decimals=2 '整数型,用于设置统计结果要保留的小数位数.
g.Build '生成统计表
MainTable=Tables("费用核算表")

这是结果:图   1月有6个李四,2月有3个,3月有2个,12月有3个.(结果图中任务、月扣款、上缴都乘上了6、3、2

图片点击可在新窗口打开查看此主题相关图片如下:未命名.jpg
图片点击可在新窗口打开查看


楼主要的 (任务、) 月扣款 (、上缴) 只等于人员管理表中的该列的合计,而不要去 乘以 基表中同一人同年月个数  。
不知道我说的对不???

[此贴子已经被作者于2010-3-22 12:41:38编辑过]

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


加好友 发短信
等级:三尾狐 帖子:759 积分:7038 威望:0 精华:1 注册:2008/9/2 20:04:00
  发帖心情 Post By:2010/3/22 12:43:00 [只看该作者]

"表B“有9行数据,每个月每个人都只有一行数据,点击统计窗口按钮(该按钮里有后台数据交叉统计代码),出现”费用核算表“,收入-月扣款=可用款,逻辑关系正确。但是如果在“表B”中把9行数据复制后增加9行再粘贴,保存后,再点击统计按钮,在新的“费用核算表”中,收入-月扣款<>可用款,无法达到我的:收入-月扣款=可用款 要求。其原因是代码:g.Totals.AddExp("可用款","[收入]-[月扣款]")中的[月扣款]=表B中同一个人在同月份内的收入次数*“扣款表”[月扣款]。复制粘贴一次乘以2,再复制粘贴一次就乘以3了。请问如何实现参与计算[月扣款]等于“扣款表”[月扣款]?

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

[此贴子已经被作者于2010-3-22 12:43:47编辑过]

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


加好友 发短信
等级:三尾狐 帖子:759 积分:7038 威望:0 精华:1 注册:2008/9/2 20:04:00
  发帖心情 Post By:2010/3/22 12:45:00 [只看该作者]

4楼说的完全正确,请问如何实现

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/22 12:55:00 [只看该作者]

干脆这样直接再计算一次:
for i as integer = 0 to tables("费用核算表").count-1
    tables("费用核算表").rows(i)("可用款_1") = _
    tables("费用核算表").rows(i)("收费金额_1") - _
    tables("费用核算表").rows(i)("月扣款_1") - _
    tables("费用核算表").rows(i)("上缴_1")
next

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


加好友 发短信
等级:三尾狐 帖子:759 积分:7038 威望:0 精华:1 注册:2008/9/2 20:04:00
  发帖心情 Post By:2010/3/22 13:21:00 [只看该作者]

如果任务人数变动,就不好设置"可用款_1"列名,而且代码量会很长,没有SQLCrossTableBuilder简洁,最好是狐爸能让表达式中支持Avg之类函数,直接Avg([月扣款] )参与计算就好。


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/22 13:29:00 [只看该作者]

任务人数变动不是问题,只要排序规则一致即可。

当然狐爸愿意搞定,大家受益啊~~~ 但人员管理表如果复杂些(或要加入其他关联)就难办了。。。。
[此贴子已经被作者于2010-3-22 13:36:52编辑过]

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


加好友 发短信
等级:三尾狐 帖子:759 积分:7038 威望:0 精华:1 注册:2008/9/2 20:04:00
  发帖心情 Post By:2010/3/22 13:41:00 [只看该作者]

真是不好弄,后面我还有好几列都是一环环地套用前面列的数据来参与计算,用For Next来实现相当于交叉统计代码中“统计”功能无效了,仅仅是帮助我增加了这个列名而已


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