以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  关于表达式列的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=8624)

--  作者:reachtone
--  发布时间:2010/11/18 14:51:00
--  关于表达式列的问题

类似于下图中的表:


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

 

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

 

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

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

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

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


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

--  作者:blackzhu
--  发布时间:2010/11/18 16:31:00
--  
R版能不能加一个列,将所有的相同类的先相加,再算百分比
--  作者: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

 

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


--  作者:reachtone
--  发布时间: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
--  发布时间: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
--  发布时间:2010/11/18 17:25:00
--  
以下是引用reachtone在2010-11-18 17:01:00的发言:

 

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

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

blackzhu的代码可以放在:

 

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

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


--  作者:blackzhu
--  发布时间:2010/11/19 7:29:00
--  
mr-725兄,R版这种事情提出来,是自有它的道理,肯定是碰到他解决不了的难处,我们只是提供一下思路而已.