以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于环比问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=177254)

--  作者:virmix
--  发布时间:2022/5/14 12:21:00
--  [求助]关于环比问题
请教一下老师,像这种日期是列维度的 环比要怎么加?就像份额那样子显示,在每个日期后面加入比如前一日的日环比。

图片点击可在新窗口打开查看
[此贴子已经被作者于2022/5/14 12:54:49编辑过]

--  作者:有点蓝
--  发布时间:2022/5/14 13:33:00
--  
添加一个表达式列,表达式:IIF([当天销售额_2022-5-1] is null,1,[当天销售额_2022-5-2] / [当天销售额_2022-5-1])

然后把这个列列属性数值格式设置为百分比,在移到[当天销售额_2022-5-1]列后面

--  作者:virmix
--  发布时间:2022/5/14 14:40:00
--  
非常感谢版主回复我的帖子

我这个表格是用交叉统计生成的查询表,是否可以写一段代码在生成查询的时候就在每日的销售数据后面显示这个环比

目前的查询代码是自动生成的,如下

Dim g As New CrossTableBuilder("每日销售统计", DataTables("浙江_日明细"))
g.HGroups.AddDef("团长ID")
g.VGroups.AddDef("日期", DateGroupEnum.None)
g.Totals.AddDef("当天销售件数", "当天销售件数")
g.Totals.AddDef("当天销售额", "当天销售额")
g.OrderByTotal = True
g.HorizontalTotal = True
g.VerticalTotal = True
g.Build()
MainTable = Tables("每日销售统计")


--  作者:virmix
--  发布时间:2022/5/14 14:42:00
--  
想要达到的效果如下
图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20220514144109.png
图片点击可在新窗口打开查看




--  作者:有点蓝
--  发布时间:2022/5/14 16:39:00
--  
生成后使用代码处理

比如
Dim dc As DataCol 
Dim lst As New List(Of String)
Dim t As Table = Tables("每日销售统计")
t.StopRedraw
Dim cnt As Integer = t.cols.Count
For i As Integer = t.cols.Count - 1 To 2 Step - 1
    Dim s As String = t.cols(i).Name & " 环比"
    lst.Add(s)
    dc = DataTables("每日销售统计").datacols.add(s, GetType(Double), "IIf(" & t.cols(i - 1).Name & " Is null, 1, " & t.cols(i).Name & " / " & t.cols(i - 1).Name & ")", t.cols(i).Caption & " 环比")
    dc.SetFormat("00.0%")
Next

For Each s As String In lst
    t.cols(s).Move(t.cols(s.Split(" ")(0)).Index + 1)
Next
t.AutoSizeCols
t.ResumeRedraw


[此贴子已经被作者于2022/5/14 16:39:21编辑过]

--  作者:virmix
--  发布时间:2022/5/15 0:06:00
--  
版主老师,这个日环比的计算公式好像是错的呀,应该是 (B-A)/A 这样子的计算逻辑

环比增长率=(本期数-上期数)/上期数×100%

--  作者:有点蓝
--  发布时间:2022/5/15 20:11:00
--  
上面提供的是思路,逻辑一样的,改为自己的计算公式即可
--  作者:virmix
--  发布时间:2022/5/16 12:34:00
--  
非常感谢版主老师,问题得到初步的解决,由于增加了几列和计算逻辑变动,便于后续的新人梳理思路

具体代码内容如下:

Dim dc As DataCol 
Dim lst As New List(Of String)
Dim t As Table = Tables("每日销售统计")
t.StopRedraw
Dim cnt As Integer = t.cols.Count
For i As Integer = t.cols.Count - 1 To 6 Step - 1
    Dim s As String = t.cols(i).Name & " 环比"
    lst.Add(s)
    dc = DataTables("每日销售统计").datacols.add(s, GetType(Double), "IIf(" & t.cols(i - 1).Name & " Is null, 1, (" & t.cols(i).Name & " - " & t.cols(i - 1).Name & ") / " & t.cols(i - 1).Name & ")", t.cols(i).Caption & " 环比")
    dc.SetFormat("0.00%")
Next

For Each s As String In lst
    t.cols(s).Move(t.cols(s.Split(" ")(0)).Index + 1)
Next
t.AutoSizeCols
t.ResumeRedraw

--  作者:virmix
--  发布时间:2022/5/16 14:19:00
--  
老师再请教一下,我这个交叉表格用代码处理完之后导出来的excel表格 环比数据是小数点,怎么才能让这个表格导出来的环比数据直接是百分比的数据形式?谢谢。
--  作者:有点蓝
--  发布时间:2022/5/16 14:34:00
--  
怎么导的?