以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]子表如何引用父表数据,并在父表里进行计算,再赋值回子表?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=179708)

--  作者:rpg2813
--  发布时间:2022/9/5 3:14:00
--  [求助]子表如何引用父表数据,并在父表里进行计算,再赋值回子表?
成绩表的语文标准分为:500 + 100 * ([语文] - Avg([语文]))/StDev([语文])
想实现的效果是(以张三为例)
87+12=99之后,在成绩表里进行标准分计算,并把得到的标准分赋值到“错漏明细”的语文标准分里
其实就是让学生知道,如果空的题做了,错的题做了,相应会有什么成绩

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



图片点击可在新窗口打开查看此主题相关图片如下:2022-09-05.png
图片点击可在新窗口打开查看




--  作者:有点蓝
--  发布时间:2022/9/5 8:58:00
--  
没看懂,请举例说明一下,比如张三和李四,按什么公式进行计算,正确结果是多少?
--  作者:rpg2813
--  发布时间:2022/9/5 12:14:00
--  
父表的标准分是:500 + 100 * ([语文] - Avg([语文]))/StDev([语文])算出来的
就是: 500 + 100 * ([87]- Avg([87,67……102,86]))/StDev([[87,67……102,86]])=521.06
——
而子表的标准分希望的是(以语文为例)
500 + 100 * ([87+12]- Avg([(87+12),67……102,86]))/StDev([[(87+12),67……102,86]])=596.48
——
目的就是告诉张三,语文那12分不丢的话,你可以拿到596.48分



--  作者:有点蓝
--  发布时间:2022/9/5 13:40:00
--  
这种情况没有办法直接使用表达式计算。

方法1、在子表每个科目增加一个辅助列,比如列名叫【语文未扣分】,这个列等于父表语文+子表的语文求和。然后根据辅助列进行计算
2、使用代码计算

话说回来这种统计有点自欺欺人吧,【语文那12分不丢的话,你可以拿到596.48分】,还不如直接告诉学生一分都不丢的话,岂不都是满分了!

--  作者:rpg2813
--  发布时间:2022/9/5 14:08:00
--  
有意义的,标准分本来就是衡量一个成绩在一个范围内的分值,现在有的省份还在用做高考成绩统计
那12分是没有做,空着丢的,我算出来后,还得让对方明白
(596.48-521.06)/12=6.285,多拿1分可以多6.285标准分

这个帖子太老,然后可能他的算法更精确,我暂时用不到这么精确的算法(我的算法公式是从excel里改过来的)
[此贴子已经被作者于2022/9/5 14:11:28编辑过]

--  作者:rpg2813
--  发布时间:2022/9/5 22:25:00
--  
版主你好,我用了取巧的办法做是做出来了,但是用代码写3楼的的公式应该怎么写才对?就是以下红色部分
子表的datacolchanged
Select Case e.DataCol.Name
Case "语文" , "数学", "英语"
Dim dr As DataRow
Dim dt As DataTable = DataTables("成绩")
dr = dt.Find("学号 = \'" & e.DataRow("学号") & "\'")
If dr IsNot Nothing Then
Dim oldyw As Double = dr("语文")
Dim newyw As Double = dr("语文") + e.DataRow("语文")
dr("语文") = newyw
e.DataRow("标准分_语文") = dr("标准分_语文")
dr("语文") = oldyw
End If
End Select

--  作者:有点蓝
--  发布时间:2022/9/5 22:54:00
--  
看看:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=92787&skin=0
--  作者:rpg2813
--  发布时间:2022/9/6 0:30:00
--  
谢谢,看完之后,感觉取巧也挺好的……
我试试

--  作者:rpg2813
--  发布时间:2022/9/6 1:15:00
--  
ok,一开始感觉很复杂,照着链接中的链接,http://www.foxtable.com/help/topics/0545.htm
搞定了
谢谢版主
Dim p As Integer = Tables("成绩").Cols("语文").Index \'获得数量列的位置
Dim n As Integer = Tables("成绩").Rows.Count
Dim x As Double = Tables("成绩").Aggregate(AggregateEnum.Average, 0, p, n - 1, p)
Dim v As Double = Tables("成绩").Aggregate(AggregateEnum.Std, 0, p, n - 1, p)
Dim y As Double = 500 + 100 * (87 - x) / v
Output.Show(y)
[此贴子已经被作者于2022/9/6 1:16:21编辑过]