海关进出口同比增长率

测试数据为上海海关的进出口数据,结构如下:

海关进出口数据

字段名 说明
TRADE_YEAR 统计年
TRADE_MONTH 统计月
IMPORTS 进口数据
EXPORTS 出口数据

希望实现的报表效果是将20年的数据与19年的数据做同期对比,将21年的数据和20年的数据做同期对比,显示增长率:

海关进出口同比增长率

一个简单的交叉表设计

首先完成一个简单的交叉表的设计:

海关进出口数据

字段绑定设置

其中:

  • A2, A6都是绑定TRADE_YEAR字段
  • B3绑定IMPORTS字段
  • B4绑定EXPORTS字段
  • B1绑定TRADE_MONTH字段

注意设置B1的展开方向为横向展开

B1展开方向

父子格设定

  • 设定B3的左父格为A2,上父格为B1
  • 设定B4的左父格为A2,上父格为B1

预览界面

现在预览界面我们就看到一个简单的交叉表的效果

交叉表

行号判断

所谓同比,是要拿当前和往期比的。所在该示例中,因为没有对应的2018年的数据,所以2019年的数据应该都为空,从2020年开始所有数据都需要计算同比。 所以我们可以在B7和B8里输入表达式:

=(&A6>1)?"需要计算":""

这个表达式表示获取当前单元格相对的A6单元格展开后的序号,序号从1开始,就表示第一年不进行同比计算

预览效果:

序号判断

调整表达式

为了后边的表达式编写,我们将表达式的格式调整为:

if (&A6>1) {
  return "需要计算"
}

父子格设定

  • 设定B7的左父格为A6,上父格为B1
  • 设定B8的左父格为A6,上父格为B1

添加辅组列

由于B7和B3没有直接的父子关系,所以直接获取B3的相关值会比较困难,同理B8和B4也一样,为了解决这个问题,我们可以在C列上设定C7和C8,并分别绑定IMPORTS以及EXPORTS字段。 同样C7和C8字段要设定相同的父格

  • 设定C7的左父格为A6,上父格为B1
  • 设定C8的左父格为A6,上父格为B1

设计效果如下:

添加辅助列

预览效果如下:

添加辅助列

现在我们就可以在B7里取出C7的值了。

获取当前值

将表达式调整为:

if (&A6>1) {
  var currentValue = C7  
  return currentValue
}

预览

获取当前值

获取去年同月份的值

将表达式调整为:

if (&A6>1) {
  var currentValue = C7  
  var oldValue = C7[A6:-1]{$B1==B1}
  return currentValue + ":" + oldValue
}

其中C7[A6:-1]表示获取上一年度C7的值。 {$B1==B1}是过滤条件,表示C7单元格对应数据的B1单元格的值要和当前表达式对应的B1单元格的值一致,就是月份相同的意思

预览

获取去年同期值

计算同比增长率

现在就可以基于currentValue和oldValue计算同比增长率了,将表达式调整为:

if (&A6>1) {
  var currentValue = C7  
  var oldValue = C7[A6:-1]{$B1==B1}
  if (currentValue) {
    return (currentValue-oldValue)/oldValue
  }
}

考虑到2021年部分数据缺失,所以是没有currentValue的,所以表达式中添加了currentValue的if判断。 计算同比

数据可视化显示

利用格式化功能格式化B7的数据:

数据格式化

预览

数据格式化

处理B8字段

用相同的方法处理B8字段,其表达式改为:

if (&A6>1) {
  var currentValue = C8  
  var oldValue = C8[A6:-1]{$B1==B1}
  if (currentValue) {
    return (currentValue-oldValue)/oldValue
  }
}

预览

数据格式化

隐藏数据辅助列C

最后我们隐藏C1列:

数据格式化

再次预览,就得到我们需要的最终报表了。

海关进出口同比增长率

results matching ""

    No results matching ""