热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据透视表上线!如何在纯前端实现这个强大的数据分析功能?

在Office三大办公套件中,Excel可能是功能最多、最难精通的那一款了。从日常的表格录入到复杂的业务数据统计分析,Excel仿佛一位外表平平无奇,实力却深不可测的武林高手。熟练

在Office三大办公套件中,Excel可能是功能最多、最难精通的那一款了。从日常的表格录入到复杂的业务数据统计分析,Excel仿佛一位外表平平无奇,实力却深不可测的武林高手。熟练使用Excel往往能在日常工作中获得事半功倍的效果,而这里所谓的“熟练”除了熟悉大量公式、图表绘制等操作外,还要掌握一项非常重要的特性——数据透视表。

所谓数据透视表,就是将原始的明细数据表中涉及的各组关联数据进行分类汇总的产物。用户可以按照不同的组合方式对原始数据进行处理。例如下面这样的销售业绩原始数据:

我们想要知道几位销售人员各自销售了多少汽车、销售额又是几何,就可以使用数据透视表来分析:

从上表中可以清楚地看到几位销售人员各个季度都卖了多少车、销售额多少、每个品牌卖掉多少……等信息,并且透视表中包含哪些字段都是随意选择的。例如我们只想统计各季度的销量和销售额:

这里就略过了售车品牌信息,对应的字段选择设置为:

我们还可以点开每个字段,选择需要显示的子内容,例如只看1-3季度的业绩,或者只看某位销售人员的业绩,等等。

由此可见,数据透视表是一种方便地对原始数据进行按需可视化处理的工具,在日常工作中用途非常广泛。当工作场景中存在揉合了大量信息的原始数据表时,就可以使用数据透视表来快速获得有意义的数据洞察结果,为业务提供有价值的信息。


你的前端为何需要数据透视表?

在过去,多数企业人员使用数据透视表的唯一渠道就是Excel。因为Office办公套件长期垄断企业办公市场,大部分行政和业务人员只会接触Excel一种数据分析工具,Excel本身的功能也足够强大,市场上就很难有其他工具的立足之地。

但随着数字化大潮汹涌而来,数字化转型成为几乎所有企业都要面对的机遇和挑战。疫情爆发后,居家办公的兴起又对传统办公软件环境发起了新的冲击。今天的企业IT、业务和行政人员往往需要在多种软件环境中切换,处理比过去高出一个甚至几个数量级的海量数据,在办公室、地铁、宾馆、家中随时都可能需要处理业务请求。在这样的场景中,数据分析的需求开始随处可见、随时出现,单凭Excel或者类似的大型单体软件已经远远不能应对新时代的复杂挑战。

仍以上述业务数据为例,这家汽车销售企业的业务总监可能会在内部的业绩管理App上回顾本年数据,需要在App中使用数据透视表功能;人事人员统计奖金信息时,需要登入企业后台管理网站查看业务数据,并在Web页面上获取业绩排名;高管准备年度报告时,试图在报告中集成动态的透视表组件,方便现场展示……所有这些需求都很难使用Excel这样的单体软件完成,更多情况下适合采用嵌入方法,将透视表功能嵌入对应的前端应用中实现。

随着此类需求迅速增长,市面上开始出现一站式的解决方案,方便企业和软件开发者将传统上由Excel完成的功能集成到各类应用和页面中。SpreadJS就是其中的佼佼者。在2020年发布14.0版本中引入了强大的数据透视表功能,满足了企业在众多场景集成数据分析深度能力的需求,也为前端软件开发者大大减轻了负担。


在前端集成数据透视表:简要教程

使用SpreadJS,要建立一个如图所示的前端嵌入式数据透视表是非常简单的:

上图中的PivotLayout工作簿是数据透视表的页面,DataSource是原始数据页面,图右侧的面板就是SpreadJS生成的数据透视面板,用户可以在这里调整所需的字段,从而改变左侧数据透视表的展示信息。

在数据透视表中,存在四个区域:



  • Filters: 控制数据透视表的数据范围。

  • Columns: 控制数据透视表的列分布。

  • Rows: 控制数据透视表的行分布。

  • Values: 控制数据透视表的计算数据和计算方法。

    输入以下代码即可创建数据透视表面板:

let panel = new GC.Spread.Pivot.PivotPanel("myPivotPanel", myPivotTable, document.getElementById("panel"));

用户必须为"panel"元素设置宽和高 。

GC.Spread.Pivot.PivotPanel构造函数参数如下:

以下是使用标准JS代码嵌入数据透视表的app.js文件:

window.Onload= function () {
var spread = new GC.Spread.Sheets.Workbook(_getElementById('ss'),
{ sheetCount: 2 });
initSpread(spread);
var pivotLayoutSheet = spread.getSheet(0);
initPivotTable(pivotLayoutSheet);
};
function initSpread(spread) {
spread.suspendPaint();
let sheet = spread.getSheet(1);
sheet.name("DataSource");
sheet.setRowCount(117);
sheet.setColumnWidth(0, 120);
sheet.getCell(-1, 0).formatter("YYYY-mm-DD");
sheet.getRange(-1,4,0,2).formatter("$ #,##0");
sheet.setArray(0, 0, pivotSales);
let table = sheet.tables.add('tableSales', 0, 0, 117, 6);
for(let i=2;i<=117;i++)
{
sheet.setFormula(i-1,5,'=D'+i+'*E'+i)
}
table.style(GC.Spread.Sheets.Tables.TableThemes["none"]);
let sheet0 = spread.getSheet(0);
sheet0.name("PivotLayout");
spread.resumePaint();
}
function initPivotTable(sheet) {
let myPivotTable = sheet.pivotTables.add("myPivotTable", "tableSales", 1, 1, GC.Spread.Pivot.PivotTableLayoutType.outline, GC.Spread.Pivot.PivotTableThemes.light8);
myPivotTable.suspendLayout();
myPivotTable.options.showRowHeader = true;
myPivotTable.options.showColumnHeader = true;
myPivotTable.add("salesperson", "Salesperson", GC.Spread.Pivot.PivotTableFieldType.rowField);
myPivotTable.add("car", "Cars", GC.Spread.Pivot.PivotTableFieldType.rowField);
myPivotTable.add("date", "Date", GC.Spread.Pivot.PivotTableFieldType.columnField);
let groupInfo = { originFieldName: "date", dateGroups: [{ by: GC.Pivot.DateGroupType.quarters }] };
myPivotTable.group(groupInfo);
myPivotTable.add("total", "Totals", GC.Spread.Pivot.PivotTableFieldType.valueField, GC.Pivot.SubtotalType.sum);
var panel = new GC.Spread.Pivot.PivotPanel("myPivotPanel", myPivotTable, document.getElementById("panel"));
panel.sectionVisibility(GC.Spread.Pivot.PivotPanelSection.fields + GC.Spread.Pivot.PivotPanelSection.area);
myPivotTable.resumeLayout();
myPivotTable.autoFitColumn();
}
function _getElementById(id) {
return document.getElementById(id);
}

对应的html页面中加入的插件代码:















可以看到,总共60行左右的代码即可在一个web页面中嵌入数据透视表和透视表控制面板。

SpreadJS除了支持标准JS代码外,还支持Angular、Vue和React框架。使用Angular时需要单独创建一个app.component.html页面,Vue和React的app文件代码也会更长一些,并且要把插件导入的代码段放在app文件中。

此外,数据透视表面板只是一个控制数据透视表的工具,它在使用fromJSON时会自动释放。 数据透视表可以在没有数据透视表面板的情况下工作。所以数据透视表支持下面的api来处理面板和数据透视表之间的关系。

将数据透视面板附加到数据透视表:

///* function attach(pivotTable: GC.Spread.Pivot.PivotTable) :void
/**
* @description this function will attach to a pivot table
* @param pivotTable
* @returns void
*/
attach (pivotTable: IPivotTable): void
从数据透视表中分离数据透视面板:
///* function attach(): void
/**
* @description this function will detach to a pivot table
* @returns void
*/
detach (): void
销毁数据透视表面板:
///* function destroy (): void
/**
* @description destroy PivotPanel
*/
destroy (): void

除了透视表,你的前端还能做到这些

SpreadJS的强大并非止于数据透视表。SpreadJS在界面和功能上与Excel高度类似,可以为企业信息化系统提供 表格文档协同编辑、数据填报和类Excel报表设计的应用场景支持。使用SpreadJS可直接在Angular、React、Vue等前端框架中实现高效的模板设计、在线编辑和数据绑定等功能,为最终用户提供高度类似Excel的使用体验。

SpreadJS使用时无需预装任何插件或第三方组件,具备流畅的交互体验,并可直接在浏览器内导入导出Excel、CSV、JSON等文件。SpreadJS兼容数百种Excel计算公式,内置18种条件格式、32种图表、53项单元格格式和182种形状,且支持触摸操作,具备纯中文界面。

值得一提的是,SpreadJS在构建界面时并没有采取传统的DOM拼接方式,而是使用HTML5 Canvas 绘制技术,在提升性能的同时打破了DOM元素渲染对UI的诸多限制,实现了更精准的UI界面渲染效果。该技术已获得国家知识产权局颁发的发明专利证书。

在最新的SpreadJS 15.0 Update 1版本中,还加入了跨工作簿公式函数支持、日期切片器、Vue3框架支持等更新内容。随着SpreadJS的不断更新和发展,这款工具已经成为现代企业在各类业务场景中实现在线Excel功能、随时随地满足数据处理、分析和展示需求的最佳选项之一。点击以下链接可进一步了解SpreadJS的强大能力,早日提升企业数据生产力。

前端表格数据透视表在线示例:

https://demo.grapecity.com.cn...

类Excel全栈解决方案:https://www.grapecity.com.cn/...



本文是由葡萄城技术开发团队发布,转载请注明出处:葡萄城官网



推荐阅读
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 深入理解线程、进程、多线程、线程池
    本文以QT的方式来走进线程池的应用、线程、进程、线程池、线程锁、互斥量、信号量、线程同步等的详解,一文让你小白变大神!为什么要使用多线程、线程锁、互斥量、信号量?为什么需要线程 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
author-avatar
bj_gqdy_342
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有