编辑导语:导出功能我们经常能够使用到,看似一个很简单的功能,实则在设计的过程中需要考虑很多的因素。本文作者对导出功能的全过程进行了思考,为我们分析了两种解决方案,拆解了导出前和导出时的设计,并且进行了总结。
一、引言
功能(百度释义):功能是一个汉语词语,拼音为gōng néng,意指事物或方法所发挥的有利作用;效能。
综合以上释义,我们再从产品的角度对其理解:功能的好坏不仅仅关乎其本身,更重要的要看是否为解决实际问题而服务。
那导出功能,解决了什么样的问题?我们先来看一个场景。
小A作为一名销售人员,需要每月向领导汇报一次销售情况,为了更直观的让领导看到销售情况,小A要对销售订单数据进行不同维度展示与分析。而目前系统只能查看订单列表与销售总额,不支持不同维度的数据分析。
从场景中我们可以看到这样一个问题,由于系统只能查看订单列表与销售总额,不支持更全面的数据分析,导致小A每次向领导汇报前,只能人工将一个月近5000笔的订单(此处不考虑后续不断增加的订单量)统计在excel中,从客户维度计算出销售额、销售量,完成客户维的销售情况分析。
从产品SKU维度计算出销售额、销售量,完成产品SKU维销售情况分析,导致小A的工作效率很低,同时人工抄录导致数据错误的的情况也常会出现,最终导致数据分析结果错误。
针对该问题,我们深入思考一下,小A想要进行更全面的数据分析,可以采用以下2种解决方案:
- 新增销售数据分析页面,如使用销售额排行榜表示客户贡献值高低、使用产品SKU的销售量饼状图表示单品的受欢迎程度等;
- 导出销售数据到excel,通过excel的数据透视功能完成客户贡献值分析、单品的受欢迎程度分析等。
二、解决方案分析
目前我们有两种解决方案可供选择,那我们采用哪一种解决方案会更好呢?
1. 方案假设论证
1)采用“新增销售数据分析页面”的解决方案
通过与小A的继续沟通发现数据分析的需求并不稳定,处于变化的状态。当依据小A的需求完成分析页面后,过了一段时间发现产品随着季节变化导致销售额也不稳定,从时间维度的分析数据没有参考价值,可能要舍弃这种分析方式。
此时我们发现,小A的需求可持续的时间极为短暂,不足以支撑一个长期存在的功能,但已经将其实现为功能,则意味着功能白做了或没有产生与成本对应的价值。
2)采用“导出销售数据到excel,通过excel的数据透视功能完成数据分析”解决方案
导出销售数据到excel,可以规避因手动抄录导致的数据分析结果错误问题,同时也会节省抄录数据的时间,提高小A工作效率。
数据导出后,小A可以通过excel的数据透视功能或者其他第三方软件完成定制化的数据分析,即使不开发数据分析功能,也可以满足小A的“更全面的数据分析”需求。
例如,当小A导出如下图所示的数据后:
小A第一步可以先完成不同月份的汇总,在表中添加“月份”字段,添加公式为“=MONTH(A2)”;
第二步:再点击表格中任意单元格–插入–透视表–新建工作表,将省份拖入数据透视表字段的【筛选器】,将月份拖入【行】中,将A、B、C、D产品销售额(元)拖入【值】中;将行标签改为月份,每个字段以求和方法计算并修改字段名称。
第三步:选中透视表中数据,调整格式为加千分位逗号,保留0位小数。
第四步:为了让数据展现可视化,插入透视图。
通过公式筛选、透视表、透视图的使用,小A可以点击查看不同地区、月份、产品的分类汇总数据,可以很直观地反映出时间维度的销售情况、不同地区的销售情况、很好地为产品选择、地域选择做出数据依据支撑。
数据分析功能会从数据源、数据处理、数据的可视化来实现,而Excel的透视表对应了数据明细(数据源),公式能够完成较多的数据计算任务(数据处理)。
透视图可以直观、清晰的展示各类产品在不同月份、不同地区的销售情况及总的销售情况分析,为产品布局提供指导性参考依据(数据可视化)。
另外当小A从数据透视图看到某个月份销售额过高,可以直接点击查看透视表中的数据明细是否存在错误,当小A想查看每个产品销售额的占比,可以新建数据透视表并将透视图切换成饼状图查看。
由此可见,用Excel来做数据分析不仅可以很灵活的满足需求,而且还很实用、很方便,也不会因功能的限制导致对数据无法分析。
2. 方案选择
通过以上论证,我们发现,既要能够解决问题又要支撑一个长期存在的功能,还要用较低成本以及最快的方式来完成,我们采用最佳的解决方案:“导出”。
三、导出功能设计
既然已经明确最佳解决方案是“导出”,那接下来就从导出的全生命周期看看,如何设计导出功能?
1. 导出前设计
1)明确导出数据限制
无论当前的系统数据量是多少,建议都要做导出条数限制。
因2003版的excel 一个sheet表最多导出65535条数据,2007版的excel是10万4000多条。如果不设限,当用户导出的数据量超过excel单个sheet的数据量时,会出现导出失败的情况,影响用户的正常使用,且产生对系统的不信任情绪。
那应该限制到多少条数据?
我们先来了解一下导出的技术原理,当用户点击导出后,数据会被以excel的形式下载到服务器,服务器再通过网络将文件发送给用户。
在这个过程中,导出条数受限制的原因一个是服务器性能,另一个是用户的电脑性能以及所使用excel版本,在实际产品设计时,根据实际情况,制定一个合理的数据限制即可。
回到开头的场景中,用户不仅要导出数据还要做数据透视表,假设用户使用的03版excel,导出30多个字段,使用大量excel公式,最稳妥的是限制到1万条数据以内。
做了一组极限测试数据供大家参考,使用一台2核4G的服务器、1个用户使用、导出条数是1048576条(导出最大条数)、导出3个字段、使用2010版excel,导出后当使用一个sum公式时,出现了如下图的错误,导致excel异常退出。
2)明确导出格式
数据导出格式有.xls和.csv,.xls是二进制的文件用excel才能打开;.csv是文本文件,用记事本就能打开。而当前用户导出数据后要进行的是数据分析,故只需支持.xls导出。
3)明确导出需求
导出一个excel一个sheet,还是一个excel多个sheet?
考虑到用户导出数据后要对订单数据进行分析,可以与用户明确是否需要按某一维度如客户维度将数据拆分成多个sheet,减少用户操作数据的时间以便能把更多精力放在数据分析。
如果用户不需要按照某一维度拆分数据,则采用导出一个excel一个sheet的方式。
表头是否需要增加序号列?
当用户导出订单数据后,为了让用户准确操作某一行数据,需要有唯一代表一行数据的标记,而在订单导出前是以数据库的主键来标记,对于导出后的订单,则需要自动增加序号列方便用户操作。
是否有内容需要用颜色标注区别?
在导出订单数据中,为了快速掌握销售情况,有些数据是需要特别关注的、而有些不需要。因此,可以使用颜色标注来做区别,让查看人员快速找到自己想要的数据,如可以标注总计快速查看总销售额。
是否需要合并单元格?
对于导出后进行数据分析,不建议使用合并单元格,因excel中合并单元格后仅保留左上角的值如下图所示,这样会使得筛选出现错误,也影响批量的公式使用导致透视表无法分析。
如果导出后只查看数据,可以考虑使用合并单元格。
2. 导出时设计
1)是否需要导出维度
百度释义:维度是事物“有联系”的抽象概念的数量,如时间维度是以时间作为描述、表达变量的度量尺度。
导出维度是指的按照特定场景下,导出以某个字段为主导数据且与该字段相关的其他字段数据。
一般来说,财务和仓库的导出业务场景不同,财务需要以订单维度导出,仓库需要按商品为维度导出,如果无需导出维度,则不需要过度设计。
2)设置表头导出字段
由于订单的一条记录数据字段会很多,包括:订单号、销售类型、客户名称、产品名称、数量、单价、收货人、联系电话、账期、发货时间、预约到仓时间、发货基地名称、发货方式、合同折让率、应收款、已收款、未收款、产季等近30个字段。
而订单分析时,收货人、联系电话、发货时间等字段则无需导出。
因此选择字段导出,可以让客户能够更快速使用并完成分析。导出和查询均要使用筛选,但呈现结果的方式不同,两者的使用场景是可以借鉴的,建议可以放置筛选区。
3)是否需要支持选择行导出
一般来说,导出数据为全量数据,如果用户通过字段选择不出需要的数据,此时要支持用户勾选某些行数据,提示用户当前勾选数据明细及数据条数。
4)其他处理
为了让客户清晰的明白订单是如何导出的,需要在导出时给予导出规则、导出图片、附件形式说明文字提示。
- 是否需要导出规则说明;
- 导出图片、附件只能以链接形式导出说明;
- 导出数据中是否存在日期和时间,需针对时间戳提前处理。
5)根据导出数据量,明确数据处理方式
从技术的角度说,针对较大数据量的导出场景,可以采用异步的处理方式,降低客户的焦急心理。
所谓异步,就是用户点击导出按钮后,后端接收请求并执行读取任务,用户可以不用停留在原处等待,离开当前页面去处理其它工作任务,之后再打开任务页面查看导出结果。
如果有数据可以预先计算,后端可以直接预先计算,同时避免了因采用同步的处理方式导致长时间等待的结果,客户体验会更好,工作效率也会更高。
- 是否需要异步处理;
- 是否需要预先计算。
6)是否需要任务页面
如果用户点击“导出”按钮后,10秒钟内不能完成文件打开,会让用户产生焦虑心理。为了让用户使用体验更佳,需要有一个固定页面即任务页面来承载导出任务列表。
四、总结思考
1. 从导出功能看功能设计流程
功能,是为解决问题而生,而功能的起源是需求,需求是从场景中找到问题。
由此可见,功能设计流程一定会包含场景选定、问题分析并找准需求、解决方案分析、选定功能、功能设计这5个阶段。
做功能设计时,时刻问自己三个为什么:为什么这是一个问题(问题具备危害性)?为什么要解决这个问题(被解决的价值)?为什么我选定的功能可以解决这个问题(功能的价值)?
2. 导出能够解决的问题
导出不仅可以解决文中的“需要更全面的数据分析”的问题,还可以解决“数据离线使用”的问题,导出后,数据以本地文件的形式存在,可离线使用。
另外导出还能解决“数据交付系统外部人员”的问题,导出后,数据以独立文件的形式存在,可以复制,传递。
3. 可优化方向
- 当系统页面越来越多,导出也在多个页面出现时,可考虑使用一个配置导出页面统一管理系统中所有的导出;
- 当用户使用导出功能后不停留在原处等待时,出现导出异常,采用短信或邮件通知用户,让用户及时知道导出进度不至于耽误工作。