Foxtable(狐表)用户栏目专家坐堂 → [求助]如何实现跨表的表达式列


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

主题:[求助]如何实现跨表的表达式列

美女呀,离线,留言给我吧!
cherryjing
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
[求助]如何实现跨表的表达式列  发帖心情 Post By:2022/9/1 10:33:00 [显示全部帖子]

一个表为合同表,包括合同名称、合同编号、签订日期等数据列;
另一个表为价格表,包括商品名称、型号、单价、数量、合同编号等数据列;
希望达到以下效果:在合同表里直接就可以看到每个合同的商品总价

 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/9/1 10:42:00 [显示全部帖子]

进一步可以在合同表里根据签订日期等进行目录树筛选,对合同额(即该合同商品总价)进行汇总

 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/9/1 11:04:00 [显示全部帖子]

我在价格表里设置了表达式列:金额=单价*数量,
接着建立单向关联:合同_价格
此时,在合同表里增加表达式列:Sum(Child(合同_价格).金额),结果该表达式列没有任何数据,怀疑是不是金额列本来就是表达式列,所以没有数据,
于是,我又换了一个表达式:Sum(Child(合同_价格).单价 * Child(合同_价格).数量),结果提示:聚合参数中的语法错误,需要具有可能的“child”限定符的单个列参数

 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/9/1 11:59:00 [显示全部帖子]

谢谢蓝老师,之前的问题已解决。

现在的新问题是:
合同表里有项目编号列,另有一项目表,有项目名称、项目编号列等。
在合同表以项目编号列汇总时希望显示相应的项目名称,该如何设置Subtotalgroup的caption?

 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/9/1 14:08:00 [显示全部帖子]

现在不止一级分组,有两级分组:
    Dim t As Table = Tables("合同表")
    t.GroupAboveData = True '分组行位于数据行之上
    t.TreeVisible = True '显示目录树
    Dim g As Subtotalgroup
    t.SubtotalGroups.Clear()
    g = New Subtotalgroup
    g.GroupOn = "专业"
    g.TotalOn = "合同额"
    t.SubtotalGroups.Add(g)
    g = New Subtotalgroup
    g.GroupOn = "项目编号"
    g.TotalOn = "合同额"
    g.Caption = "{0}"
    t.SubtotalGroups.Add(g)
    t.Subtotal()
仅在“项目编号”那一级分组的时候需要修改标题,If r.IsGroup Then仅能判断该行为分组行,请问如何判断是哪一级分组行呢?

 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/9/1 16:02:00 [显示全部帖子]

如果两级分组均要修改标题的话,由于合计行第一列的值已经变成分组,帮助中
Dim f As String = "产品 = '" & r("产品") & "'"
这句显然要根据不同的分组进行修改,由于合同表第一列为“合同编号”,故修改代码如下:

        If r.IsGroup Then
            Output.Show(i & "  " & r("合同编号"))
            If r("合同编号") Like "####*" Then'如果是项目分组行
                Dim f As String = "项目编号 = '" & r("合同编号") & "'" 
                Dim pro As String = DataTables("项目表").Find(f)("项目简称")
                Dim v As String = pro & "合同数量:" & t.Compute("Count(日期)", f)
                v = v & " 合同金额:" & t.Compute("Sum(合同额)", f)
                r("合同编号") = v
            Else'如果是专业分组行
                Dim f As String =  "专业 = '" & r("合同编号") & "'"     '此时f如此定义就会跨项目统计专业,请问如何解决?
                Dim v As String = "合同数量:" & t.Compute("Count(日期)", f)
                v = v & " 合同金额:" & t.Compute("Sum(合同额)", f)
                r("合同编号") = r("合同编号") & ": " & v
            End If
        End If


 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/9/1 16:05:00 [显示全部帖子]

另外,还有一个问题,用”count(日期)“来计算总数,结果为0

 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/9/1 16:27:00 [显示全部帖子]

修改后代码:
    Dim t As Table = Tables("合同表")
    t.GroupAboveData = True '分组行位于数据行之上
    t.TreeVisible = True '显示目录树
    Dim g As Subtotalgroup
    t.SubtotalGroups.Clear()
    g = New Subtotalgroup
    g.GroupOn = "专业"
    g.TotalOn = "合同额"
    t.SubtotalGroups.Add(g)
    g = New Subtotalgroup
    g.GroupOn = "项目编号"
    g.TotalOn = "合同额"
    g.Caption = "{0}"
    t.SubtotalGroups.Add(g)
    t.Subtotal()

    Dim r As Row
    For i As Integer = 0 To t.Rows.Count(True) - 1
        r = t.Rows(i, True)
        If r.IsGroup Then
            Output.Show(i & "  " & r("合同编号"))
            If r("合同编号") Like "####*" Then'如果是项目分组行
                Dim f As String = "项目编号 = '" & r("合同编号") & "'" 
                Dim pro As String = DataTables("项目表").Find(f)("项目简称")
                Dim v As String = pro & "   合同数量:" & t.Compute("Count(合同名称)", f)
                v = v & " 合同金额:" & t.Compute("Sum(合同额)", f)
                r("合同编号") = v
            Else'如果是专业分组行
                Dim f As String = "专业 = '" & r("合同编号") & "'" 
                Dim v As String = "合同数量:" & t.Compute("Count(合同名称)", f)
                v = v & " 合同金额:" & t.Compute("Sum(合同额)", f)
                r("合同编号") = r("合同编号") & ": " & v
            End If
        End If
    Next 
运行结果如图所示,有两个问题:
1、在项目合计行,合同金额出了两次,分别在第一列和合同额列,而专业合计行,合同额只出现了一次,在合同额列;
2、专业合计行中,合同数量统计为0

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

[此贴子已经被作者于2022/9/1 16:29:38编辑过]

 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
[求助]汇总模式  发帖心情 Post By:2022/9/1 19:13:00 [显示全部帖子]


此主题相关图片如下:demo.png
按此在新窗口浏览图片
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:管理项目1.zip

双击合同表后,切换到表A,点左侧下部汇总,得如图所示,可以看到:
1、在项目合计行,合同金额出了两次,分别在第一列和合同额列,而专业合计行,合同额只出现了一次,在合同额列;
2、专业合计行中,合同数量统计为0

[此贴子已经被作者于2022/9/1 19:22:48编辑过]

 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/9/1 19:15:00 [显示全部帖子]

如图所示

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