Foxtable(狐表)用户栏目专家坐堂 → 关于垂直表和水平表的转换


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

主题:关于垂直表和水平表的转换

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/9 14:11:00 [显示全部帖子]

没理解你什么意思

 

Dim dtb As New DataTableBuilder("损益进度(总体)")
dtb.AddDef("所属单位", Gettype(String), 8)
dtb.AddDef("一级科目", Gettype(String), 10)
dtb.AddDef("利润_一月", Gettype(Double))
dtb.AddDef("利润_二月", Gettype(Double))
dtb.Build()


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/9 14:12:00 [显示全部帖子]


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/9 16:50:00 [显示全部帖子]

Dim dtb As New DataTableBuilder("统计表", "损益进度(总体)")
dtb.AddDef("所属单位", Gettype(String), 8)
dtb.AddDef("一级科目", Gettype(String), 10)
Dim dt As DataTable = DataTables("利润表附表")
Dim mind As Date = dt.compute("min(日期)")
Dim maxd As Date = dt.compute("max(日期)")
mind = new Date(mind.year, mind.Month, 1)
maxd = new Date(maxd.year, maxd.Month, 1)
Do While mind <= maxd
    dtb.AddDef(Format(mind, "j_yyyy-MM-01"), Gettype(Double), "",Format(mind, "yyyy年MM月"))
    mind = mind.AddMonths(1)
Loop
dtb.AddDef("合计", Gettype(Double))
dtb.Build()
Dim t As Table = Tables("统计表")
Dim kms() As String = {"利润_本月","主营业务收入_本月"}
Dim kmsz() As String = {"利润","主营业务收入"}
For Each ary As String In dt.GetValues("所属单位")
    For i As Integer = 0 To kms.length-1
        Dim km As String = kms(i)
        Dim kmz As String = kmsz(i)
        Dim nr As Row = t.addnew
        nr("所属单位") = ary
        nr("一级科目") = kmz
        Dim sum As Double = 0
        For Each c As Col In t.Cols
            If c.name Like "j_*" Then
                Dim d As Date = c.name.split("_")(1)
                nr(c.name) = dt.compute("sum(" & km & ")", "所属单位 = '" & ary & "' and 日期>=#" & d & "# and 日期<#" & d.AddMonths(1) & "#")
                sum += nr(c.name)
            End If
        Next
        nr("合计") = sum
    Next
Next
MainTable = t

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/9 22:05:00 [显示全部帖子]

Dim dtb As New DataTableBuilder("统计表", "损益进度(总体)")
dtb.AddDef("所属单位", Gettype(String), 8)
dtb.AddDef("部门", Gettype(String), 20)
dtb.AddDef("一级科目", Gettype(String), 10)
Dim dt As DataTable = DataTables("利润表附表")
Dim mind As Date = dt.compute("min(日期)")
Dim maxd As Date = dt.compute("max(日期)")
mind = new Date(mind.year, mind.Month, 1)
maxd = new Date(maxd.year, maxd.Month, 1)
Do While mind <= maxd
    dtb.AddDef(Format(mind, "j_yyyy-MM-01"), Gettype(Double), "",Format(mind, "yyyy年MM月"))
    mind = mind.AddMonths(1)
Loop
dtb.AddDef("合计", Gettype(Double))
dtb.Build()
Dim t As Table = Tables("统计表")
Dim kms() As String = {"利润_本月","主营业务收入_本月"}
Dim kmsz() As String = {"利润","主营业务收入"}
For Each ary() As String In dt.GetValues("所属单位|部门")
    For i As Integer = 0 To kms.length-1
        Dim km As String = kms(i)
        Dim kmz As String = kmsz(i)
        Dim nr As Row = t.addnew
        nr("所属单位") = ary(0)
        nr("部门") = ary(1)
        nr("一级科目") = kmz
        Dim sum As Double = 0
        For Each c As Col In t.Cols
            If c.name Like "j_*" Then
                Dim d As Date = c.name.split("_")(1)
                nr(c.name) = dt.compute("sum(" & km & ")", "所属单位 = '" & ary(0) & "' and 部门 = '" & ary(1) & "' and 日期>=#" & d & "# and 日期<#" & d.AddMonths(1) & "#")
                sum += nr(c.name)
            End If
        Next
        nr("合计") = sum
    Next
Next
MainTable = t

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/10 10:53:00 [显示全部帖子]

在最后,动态加入几行数据,然后运算费率,然后排序。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/10 14:39:00 [显示全部帖子]

1、加入行是addnew

 

2、运算费率,就是直接compute你当前表满足条件的值

 

3、看懂上面写给你的代码。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/8 13:30:00 [显示全部帖子]

你这个就是坚持统计啊

 

http://www.foxtable.com/help/topics/0165.htm

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/8 14:18:00 [显示全部帖子]

 统计表也是可以再一次统计的啊。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/8 14:19:00 [显示全部帖子]

而且,你原始数据那里,直接设置交叉统计也是可以得出表2的数据的啊。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/8 14:43:00 [显示全部帖子]

以下是引用lgj716330在2016/3/8 14:41:00的发言:
里面设计到很多计算,用表2不太好计算,我再想想看

 

那就先生成表1,然后从表1交叉统计到表2.


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