Excel 转置分组时如何保留没有对应数据的空组

例题描述

有商品日销售记录表sales.xlsx,有些日期没有销售记录,部分数据如下图所示:

..

1、需要以日期为左表头、产品为上表头做一个交叉统计表,且要同时列出没有销售数据的日期,如下图所示:

..

 2、需要以周为左表头、产品为上表头做一个交叉统计表,且要同时列出没有销售数据的周,如下图所示:

..

 

实现步骤

1、  运行集算器

可去润乾官网下载职场版,同时下载一个免费授权就够了,首次运行时会提示加载。

2、  编写脚本:

(1)按日期统计

..

把代码列出来看得清楚点:

 A
1>dir="E:/pivot/"
2=file(dir+"sales.xlsx").xlsimport@t()
3=A2.pivot(saledate;product,amount)
4=A3.min(saledate)
5=A3.max(saledate)
6=A4|(A5-A4).(A4+~)
7=A3.align(A6,saledate)
8=A7.new(A6(#):saledate,bread,cookie,milk)
9=file(dir+"sales_day.xlsx").xlsexport@t(A8)

A1   定义保存文件的目录

A2   读入sales.xlsx文件数据,选项@t表示首行是列标题

A3   对A2的数据进行转置分组,按saledate分组为左表头,product列的值为上表头,amout为交叉统计值

A4   求A3中的最小日期

A5   求A3中的最大日期

A6   把从最小日期到最大日期的所有日期按顺序组成一个序列

A7   把A3转置分组的saledate按A6的顺序对齐

A8   用new函数重新定义A7的每一行,#表示A7的当前行号,取A6中的同行号的日期值为saledate,再取A7当前行的bread、cookie、milk值

A9   把A8中的结果保存到文件sales_day.xlsx中

 

(2)按周统计

编写代码如下:

 A
1>dir="E:/pivot/"
2=file(dir+"sales.xlsx").xlsimport@t()
3=A2.pivot@s(pdate@w(saledate):Sunday;product,sum(amount))
4=A3.min(Sunday)
5=A3.max(Sunday)
6=A4|((A5-A4)\7).(A4+~*7)
7=A3.align(A6,Sunday)
8=A7.new(string(A6(#),"MM/dd/yyyy")/"  -"/string(A6(#)+6,"MM/dd/yyyy"):week,bread,cookie,milk)
9=file(dir+"sales_week.xlsx").xlsexport@t(A8)

A1   定义保存文件的目录

A2   读入sales.xlsx文件数据,选项@t表示首行是列标题

A3   对A2的数据按saledate所在的周日进行转置分组并命名为Sunday,product列的值为上表头,本周各产品的amout之和为交叉统计值。pdate@w(saledate)表示求saledate所在周的周日。

A4   求A3中的最小周日

A5   求A3中的最大周日

A6   把从最小周日到最大周日的所有周日按顺序组成一个序列

A7   把A3转置分组的Sunday按A6的顺序对齐

A8   用new函数重新定义A7的每一行,#表示A7的当前行号,取A6中的同行号的周日值按格式转成串再拼上它加6天后的周六值按格式转成串,命名为week,再取A7当前行的bread、cookie、milk值

A9   把A8中的结果保存到文件sales_day.xlsx中

 

3、  按F9运行以上两段程序,运行结束后就可以在E:/pivot目录中看到生成的文件,其结果正如本文开头所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值