Foxtable(狐表)用户栏目专家坐堂 → 关于表达式列的问题


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

主题:关于表达式列的问题

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


加好友 发短信 一级勋章
等级:版主 帖子:1991 积分:19363 威望:0 精华:20 注册:2008/9/2 10:09:00
关于表达式列的问题  发帖心情 Post By:2010/11/18 14:51:00 [只看该作者]

类似于下图中的表:


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

 

现在想自动增加一个表达式列,数据结果为:每个数据值在相同类中的百分比。

 

这个问题如果用记录循环的方式,很好解决。但如果数据记录非常庞大,其计算效率可能会比较低。就尝试用一条表达式,结果总是出错,例子在这里:

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

如果用易表,一个刷新公式就搞定了:[值]/Sumfor("表1","值","类","=",[类])

为什么在foxtable中反而不能实现呢?


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/11/18 15:42:00 [只看该作者]

狐表表达式的几个函数太弱智,没有比较条件,看来你的问题用表达式直接运算是不可能的了。
[此贴子已经被作者于2010-11-18 15:49:12编辑过]

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2010/11/18 16:31:00 [只看该作者]

R版能不能加一个列,将所有的相同类的先相加,再算百分比

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2010/11/18 16:33:00 [只看该作者]

Dim Filter As String
Select Case e.DataCol.Name
    Case "类"
        If e.DataRow.IsNull("类") = False  AndAlso e.DataRow.IsNull("组") = False  Then
            Filter = "[类] = '" & e.DataRow("类") & "'"
            Dim Sum1 As Double = Tables("表A").Compute("Sum(值)",Filter)
             e.DataRow("总值")=sum1
             e.DataRow("百分比")=e.DataRow("值")/e.DataRow("总值")
        End If
   
End Select

 

  我做的,是放在刷新列里的,没有用动态加载列.


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


加好友 发短信 一级勋章
等级:版主 帖子:1991 积分:19363 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2010/11/18 17:01:00 [只看该作者]

以下是引用blackzhu在2010-11-18 16:33:00的发言:

Dim Filter As String
Select Case e.DataCol.Name
    Case "类"
        If e.DataRow.IsNull("类") = False  AndAlso e.DataRow.IsNull("组") = False  Then
            Filter = "[类] = '" & e.DataRow("类") & "'"
            Dim Sum1 As Double = Tables("表A").Compute("Sum(值)",Filter)
             e.DataRow("总值")=sum1
             e.DataRow("百分比")=e.DataRow("值")/e.DataRow("总值")
        End If
   
End Select

 

  我做的,是放在刷新列里的,没有用动态加载列.

 

这个方法在常规情况下进行处理是可以的,但一楼的例子在实际应用中是动态生成的统计表,生成统计表时还需要加个列,以便自动生成百分比数据。

老六已经说了,foxtable的表达式是没有办法的,只能用代码解决


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


加好友 发短信 一级勋章
等级:版主 帖子:1991 积分:19363 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2010/11/18 17:08:00 [只看该作者]

以下是引用czy在2010-11-18 15:42:00的发言:
狐表表达式的几个函数太弱智,没有比较条件,看来你的问题用表达式直接运算是不可能的了。
[此贴子已经被作者于2010-11-18 15:49:12编辑过]

 

郁闷的是,连replacefor都只能替换一个固定的值,无法用表达式!

只能用select得到记录集合然后逐行替换。晕。。

[此贴子已经被作者于2010-11-18 17:08:42编辑过]

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


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

以下是引用reachtone在2010-11-18 17:01:00的发言:

 

这个方法在常规情况下进行处理是可以的,但一楼的例子在实际应用中是动态生成的统计表,生成统计表时还需要加个列,以便自动生成百分比数据。

老六已经说了,foxtable的表达式是没有办法的,只能用代码解决

blackzhu的代码可以放在:

 

全局表事件  http://help.foxtable.com/topics/0671.htm

在项目属性中,除了可以设置项目事件,还可以设置全局表事件。
全局表事件对所有的表有效,包括通过代码增加的临时表
全局表事件的e参数和对应的表事件完全一样。


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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2010/11/19 7:29:00 [只看该作者]

mr-725兄,R版这种事情提出来,是自有它的道理,肯定是碰到他解决不了的难处,我们只是提供一下思路而已.

 回到顶部