前言

数据透视表(Pivot Table)是一种数据分析工具,通常用于对大量数据进行汇总、分析和展示。它可以帮助用户从原始数据中提取关键信息、发现模式和趋势,并以可视化的方式呈现。

在数据透视表中,数据分析师通常希望进行自定义计算。 例如,组合“数量”和“单价”字段即可获得“销售额”。 但是在某些情况中,需要对一些数据进行合并,比如把所有”黑龙江“的数据、”吉林“的数据和”辽宁“的数据合并在一起,并起一个新的名字叫”东北“。

而数据透视表的计算项功能则可以满足这样的业务需求。 因此小编今天为大家介绍的是如何使用Java将计算项添加到数据透视表中,具体步骤如下:

  1. 加载工作簿
  2. 创建数据透视表
  3. 将计算项添加到数据透视表
  4. 隐藏重复的名称项
  5. 保存工作簿

使用案例

现在某公司的采购经理需要基于下图(消费数据表)来分析订单的状态,并把除了”完成“之外的状态全部归类为”未完成“,并根据产品名称将所有”未完成“的产品金额叠加起来。

步骤一 加载工作簿

首先,在 GcExcel 中,使用如下代码加载源数据 Excel 文件。

Workbook workbook = new Workbook();
workbook.Open("SalesData.xlsx");

步骤二 创建数据透视表

接下来,为订单数据添加数据透视表。 该数据可从 Excel 文件中的“销售数据”工作表中获取。 使用 IWorksheet 接口的 Add 方法将数据透视表添加到新工作表,如下面的代码所示:

//添加一个sheet
IWorksheet pivotSheet = workbook.Worksheets.Add();
pivotSheet.Name = "销售分析"; //添加透视表
IPivotCache pivotCache = workbook.PivotCaches.Create(workbook.Worksheets[0].Range["A1:G71"]);
IPivotTable pivotTable = pivotSheet.PivotTables.Add(pivotCache, pivotSheet.Range["A1"]);
pivotTable.PivotFields["产品"].Orientation = PivotFieldOrientation.RowField;
pivotTable.PivotFields["状态"].Orientation = PivotFieldOrientation.RowField;
pivotTable.PivotFields["分类"].Orientation = PivotFieldOrientation.ColumnField;
pivotTable.PivotFields["金额"].Orientation = PivotFieldOrientation.DataField;
pivotTable.DataFields["求和项:金额"].NumberFormat = "$#,##0_);($#,##0)";

显示效果如下所示:按照产品名将所有的消费订单进行分类。

步骤三 给透视表添加计算项

数据透视表准备就绪后,下一步是添加计算项。 通过ICalculatedItems 接口将计算项的集合添加到数据透视表字段。 添加名称和表达式,如下所示:

//基于状态字段创建计算项
ICalculatedItems statusCalcItems_lost = pivotTable.PivotFields["状态"].CalculatedItems(); //给计算项添加表达式
statusCalcItems_lost.Add("未完成", "=失败+退回+暂停");

此时的数据透视表将如下所示:已经出现了”未完成“状态的订单。

步骤四 隐藏不需要的项

添加计算项后,需要隐藏与计算项重复的项并避免重复计算:

//隐藏被归为“未完成”的字段
IPivotItems status = pivotTable.PivotFields["状态"].PivotItems;
status["失败"].Visible = false;
status["退回"].Visible = false;
status["暂停"].Visible = false;

包含计算项目的数据透视表在这一步将如下所示:

步骤五 保存为Excel

最后,对单元格应用样式和格式、调整列宽等并保存工作簿。 最终报告如下图所示:

workbook.Save("数据透视表自定义计算.xlsx");

总结

使用计算项,您可以对字段项进行几乎任何类型的计算,并使您的分析结果看起来更加组合和合理。 您可以对字段项进行计算,例如

  • 计算特定产品的折扣价格
  • 计算一个项目与其他项目相比的百分比份额
  • 使用备用名称引用字段项目等等

如果您想了解更多有关于计算项的资料,可以点击这里查看。

扩展链接:

Redis从入门到实践

一节课带你搞懂数据库事务!

Chrome开发者工具使用教程

从表单驱动到模型驱动,解读低代码开发平台的发展趋势

低代码开发平台是什么?

基于分支的版本管理,帮助低代码从项目交付走向定制化产品开发

数据智慧:C#中编程实现自定义计算的Excel数据透视表的更多相关文章

  1. Access中一句查询代码实现Excel数据导入导出

    摘 要:用一句查询代码,写到vba中实现Excel数据导入导出,也可把引号中的SQL语句直接放到查询分析器中执行正 文: 导入数据(导入数据时第一行必须是字段名): DoCmd.RunSQL &quo ...

  2. 在 Symfony Command中自定义脚本把Excel数据导入到数据库中

    // 注:只是在此做下记录,有兴趣的可以参考,不做实际教程文档 <?php/** * Created by IntelliJ IDEA. * User: davis * Date: 2019-0 ...

  3. 反射+自定义注解---实现Excel数据列属性和JavaBean属性的自动映射

    简单粗暴,直奔主题.   需求:通过自定义注解和反射技术,将Excel文件中的数据自动映射到pojo类中,最终返回一个List<pojo>集合? 今天我只是通过一位使用者的身份来给各位分享 ...

  4. 漫谈ELK在大数据运维中的应用

    漫谈ELK在大数据运维中的应用 圈子里关于大数据.云计算相关文章和讨论是越来越多,愈演愈烈.行业内企业也争前恐后,群雄逐鹿.而在大数据时代的运维挑站问题也就日渐突出,任重而道远了.众所周知,大数据平台 ...

  5. 使用自连接、for xml path('')和stuff合并显示多行数据到一行中(转)

    原文: http://njm.iteye.com/blog/795881 --使用 自连接.for xml path('')和stuff合并显示多行数据到一行中 --注 --1.计算列可以不用包含在聚 ...

  6. excel数据通过构建sql语句导入到数据库中

    拿到一张excel数据表格,数据格式如下图所示: 2.根据excel数据结果,构建保存excel数据的表结构 CREATE TABLE #tmpExcel(IP VARCHAR(100),IPAddr ...

  7. LITTLE-ENDIAN(小字节序、低字节序) BOM——Byte Order Mark 字节序标记 数据在内存中的存放顺序

    总结: 1. endian 字节存放次序 字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了). 2. LITTLE-ENDIA ...

  8. mysql中与 in 相反的语句 find_in_set('数据',字段名)

    在 mysql 中,我们经常用 in 来查询众多数据中是否有数据表字段中的值: 如果我们在数据表的字段中添加了很多值,然后查询某个值是否是这个字段中众多值的一个时可以用 find_in_set('数据 ...

  9. 数据包分析中Drop和iDrop的区别

    数据包分析中Drop和iDrop的区别   在数据包分析中,Drop表示因为过滤丢弃的包.为了区分发送和接受环节的过滤丢弃,把Drop又分为iDrop和Drop.其中,iDrop表示接受环节丢弃的包, ...

  10. python中操作excel数据 封装成一个类

    本文用python中openpyxl库,封装成excel数据的读写方法 from openpyxl import load_workbook from openpyxl.worksheet.works ...

随机推荐

  1. Jmeter获取Websocket多帧消息的实现方法

         由于需要对WebSocket进行压力测试,因此又回归到了JMeter的使用.网络上缺少具体的获取多帧消息的操作,且自己也踩了两个坑,总结一下可行的操作供大家参考.   一.情况说明     ...

  2. 【WPF】后台代码实现绑定ComboBox的SelectedItem功能

    WPF 开发程序目前最好的用的设计模式为MVVM模式,实现了前后端的分离,前端页面的更改不需要后台代码逻辑发生变化,同理,后台逻辑发生变化时基本上也不需要修改前台的页面布局等信息. 由于某些原因,可能 ...

  3. RK3568开发笔记(十):开发板buildroot固件移植开发的应用Demo,启动全屏显示

    前言   上一篇,移植应用前的通讯接口工作和全屏工作都已经完成了.本篇移植开发的商业应用.   交叉编译好应用   (略),参照<RK3568开发笔记(八):开发板烧写buildroot固件(支 ...

  4. pandas(进阶操作)-- 处理非数值型数据 -- 数据分析三剑客(核心)

    博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jup ...

  5. SVN: Could not resolve hostname 解决方法_

    svn 报错如下 org.tigris.subversion.javahl.ClientException: RA layer request failed svn: OPTIONS of '[你的s ...

  6. docker入门加实战——docker安装并配置阿里云加速

    docker入门加实战--docker安装并配置阿里云加速 为什么要学习docker 在开发和部署项目的过程中,经常会遇到如下问题: 软件安装包名字复杂,不知道去哪里找 安装软件和部署项目步骤复杂,容 ...

  7. [ABC216G] 01Sequence 题解

    01Sequence 题目大意 构造一个满足 \(m\) 个形如 \((l,r,x)\) 的限制条件的 \(01\) 序列,其中 \((l,r,x)\) 表示区间 \([l,r]\) 的和不小于 \( ...

  8. JavaScript(ES6):变量的解构赋值

    解构赋值定义: 允许按照一定模式从数组或对象中提取值,然后对变量进行赋值. 数组的解构赋值 注:数组的元素要一次排序的,变量的值由他的位置决定. 基本用法 // ES6 解构赋值 let [a, b, ...

  9. 🔥🔥你真的知道TCP协议中的序列号确认、上层协议及记录标识问题吗?

    引言 在前面的内容中,我们已经详细讲解了一系列与TCP相关的面试问题.然而,这些问题都是基于个别知识点进行扩展的.今天,我们将重点讨论一些场景问题,并探讨如何解决这些问题. 序列号确认问题 当A主机与 ...

  10. Net 高级调试之六:对象检查之值类型、应用类型、数组和异常的转储

    一.简介 今天是<Net 高级调试>的第六篇文章.记得我刚接触 Net 框架的时候,还是挺有信心的,对所谓的值类型和引用类型也能说出自己的见解,毕竟,自己一直在努力.当然这些见解都是书本上 ...