海关进出口环比增长率

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

海关进出口数据

字段名 说明
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年12月的数据,所以2019年1月的数据应该为空,其它所有数据都需要计算环比。 所以我们可以在B7和B8里输入表达式:

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

这个表达式表示获取当前单元格相对的A6单元格展开后的序号,序号从1开始,获取当前单元格相对的B1单元格展开后的序号,序号从1开始 这个表达式的意思是第一年的第一个月不做环比计算。

预览效果:

序号判断

调整表达式

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

if (&A6>1 || &B1>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 || &B1>1) {
  var currentValue = C7  
  return currentValue
}

预览

获取当前值

获取上个月份的值

将表达式调整为:

if (&A6>1 || &B1>1) {
  var currentValue = C7  
  var oldValue = "aa"
  if (&B1>1) {
    oldValue = C7[;B1:-1]{$A6==A6}
  } else {
    oldValue = C8[A6:-1]{$B1==12}
  }

  return currentValue + ":" + oldValue
}

其中C7[A6:-1]{$B1==12}表示获取上一年度12月份的值。 C7[;B1:-1]{$A6==A6}表示获取上一个月的值

预览

获取去年同期值

计算环比增长率

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

if (&A6>1 || &B1>1) {
  var currentValue = C7  
  var oldValue = "aa"
  if (&B1>1) {
    oldValue = C7[;B1:-1]{$A6==A6}
  } else {
    oldValue = C7[A6:-1]{$B1==12}
  }

  if (currentValue && oldValue) {
    return (currentValue-oldValue)/oldValue
  }
}

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

数据可视化显示

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

数据格式化

预览

数据格式化

处理B8字段

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

if (&A6>1 || &B1>1) {
  var currentValue = C8  
  var oldValue = null
  if (&B1>1) {
    oldValue = C8[;B1:-1]{$A6==A6}
  } else {
    oldValue = C8[A6:-1]{$B1==12}
  }

  if (currentValue && oldValue) {
    return (currentValue-oldValue)/oldValue
  }
}

预览

数据格式化

隐藏数据辅助列C

最后我们隐藏C1列:

隐藏

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

海关进出口环比增长率

results matching ""

    No results matching ""