很多报表工具都把零编码作为宣传口号,这是真的吗,真的能减少到零吗,真有那么神吗?

1、简单情况下能做到零编码

当数据来源,表格样式和计算都比较简单时,确实可以做到零编码,比如只需要把数据select出来后展现,这样的情况,大部分工具,都可以通过拖拽来完成报表,是真正的一个字符都不需要输入的零编码。

上面这类简单的列表、分组、交叉报表,都是可以通过拖拽生成的,格子中的汇总统计等简单公式,也可以通过点选按钮来自动生成,是真正的零编码。

等公式稍复杂一些,就不能自动生成了,就得手动输入一下了

比如上面例子里我们要加个订单金额的统计项,订单金额=单价* 数量 *(1-折扣),这个就只能手写了

虽然需要手写,但这样的公式非常简单,在工程师眼中不能算作编码,所以这样的报表也可以算零编码的报表

再看更复杂一些的,排名、同比环比,多源分片等,逻辑更复杂,写的也就更复杂了。

到这里,我们仍然可以勉强把这些算作是零编码,毕竟公式再复杂也不会有程序代码复杂,这几行公式,比起不用工具手写报表的代码量,不知道要少了多少了。

把上面的报表都能算作零编码的,我们会遗憾地发现,所谓的零编码能做的表大概也就到此为止了,数据计算再复杂一些的,就不能硬说是没有编码了,而实际应用中这类复杂的报表恰恰还是占比比较多的。

2、复杂情况下只能追求少编码

报表的复杂情况主要体现在两个部分,1是表格内计算复杂,2是前期数据准备复杂,这两个方面,都需要一定的编码了,不同的报表工具因为能力的不同,编码量的多少也不同,能力强的编码就少一些,能力弱的,编码多一些,我们仍然是通过实际例子来看看各种复杂情况下报表工具的编码量情况。

1、先看一个函数能力强弱的例子

表格内的复杂计算,有些情况下之所以复杂是因为产品的函数能力较弱导致的,比如要算5个10,有乘法函数的,直接5*10就可以,没有的,只能用加法算,10+10+10+10+10

我们通过成绩表,做一个如下的报表:

我们主要看最下面一个格子的数据,要算出提升最快的三位同学。

大部分工具都没有专门做这样计算的函数,都需要设置辅助格,先对名次变化幅度做个排名,然后再根据幅度排名获取前三位,比如下图中的H3格:

这样原本B4一个格子的计算,就需要多弄一个辅助格才能完成,不仅写起来复杂,数据多的时候还会影响性能 。

如果有高级函数的工具,算起来就方便了,B4一个格子写个表达式就算完了,比如下面润乾报表中的SPL函数:+string(esproc(“?.m(?.ptop(-3))”,B3{},K3{})):

可见,同样的计算,报表工具中函数能力的不同,会导致零编码的程度截然不同。同样都号称零编码,但其零编码适应的范围,对于不同工具是完全不同的。

2、再看看表格内多步计算的

有些表格内计算更复杂的情况,需要多步、分步计算,单一函数能力无法覆盖,那就得用更复杂的过程去算,但是这个过程也有很大差异,有的一步都少不了,有的可以三步并两步,写的少还算的快。

上例子,我们从如下销售数据中取出指定时段的大客户

所谓大客户,定义为销售额占前一半的客户,也就是把客户销售额从大到小排序后,前面若干个客户的合计销售额构成总销售的一半,这些客户被称为大客户。

报表结果:

可以看到数据和表样其实都很简单,但是制作的时候计算却不简单,需要分多步在报表中完成计算才可以,大部分的报表工具,都是先在报表格子中算出销售额总计、累计销售额,然后进行数据判断来确定哪些客户是大客户并对数据统计,最后再将这些用于中间过程计算,但却不需要显示的辅助行列隐藏掉,报表才算完成,比如下图中的B2和C3:

这样的,通过一堆辅助格和公式去一步步算,虽然看起来还是没有写代码,但捋清楚逻辑也挺费时间,复杂度甚至比写代码还高了。

如果像润乾报表那样有自己独有的计算引擎,使用内置脚本来处理这类多步、逻辑复杂的计算就简单了很多。


简单几句脚本直接把需要的结果集计算出来返回,报表模板只要的常规行式报表设计就可以了。

这一下,就节省出了不少的工作量。

零编码的目的是减少工作量,降低复杂度,但如果复杂的计算只能一步步在辅助格里通过公式来算,弄出一大堆没用的格子和公式来处理数据,这样的零编码反倒不如去编码来的更快了,只有工具具备强力的数据处理能力,才能正真的做到少编码、更接近零编码。

3、再来看一个前期数据准备复杂的

前面的两个例子都是数据准备好以后,在格子中的计算比较复杂需要编码的情况,实际应用中,数据准备的过程才是更复杂的场景,才是更需要大量编码的地方,我们来看看报表工具有没有能力在这个过程中实现零编码。

例子:报表中需要呈现连续上涨超过 3 天的股票

这样的报表,制表时候只需要设计几个格子,很简单,但数据准备却不简单,大部分的工作量都得花在这个数据的准备上。

用 SQL 来算的话,得写好几层嵌套:

```
SELECT code, MAX(ContinuousDays)FROM (SELECT code, NoRisingDays, COUNT(*) ContinuousDaysFROM (SELECT code,SUM(RisingFlag) OVER (PARTITION BY code ORDER BY day) NoRisingDaysFROM (SELECT code, day,CASE WHEN price>LAG(price) OVER (PARTITION BY code ORDER BY day)THEN 0 ELSE 1 END RisingFlagFROM tbl)) GROUP BY NoRisingDays)GROUP BY codeHAVING MAX(ContinuousDays)>=3
```

这个SQL,无论如何要算成是编码了,有多年经验的程序员都不一定能驾驭。而且,这种编码是省不掉的,只能想办法简化,追求少编码了。

我们继续用SPL脚本去写一下,看看能减少多少编码:

| | A |
|--- | --- |
|1|=mysqlDB.query@x("select * from tbl")|
|2|=A1.sort(day).group(code).select(~.group@o(price>price\[-1\]).max(~.len())>3).(code)|

短短两行就可以搞定,而且逻辑更清晰易懂了

注释:导入股市数据表,并按日期排序。使用函数 group 的选项 @o,根据股价是否上涨进行分组。分组时只和相邻的对比,当股价是否上涨发生变化时产生新组。计算出每支股票连续上涨的最大天数,最后选出连续上涨超过 3 天的

这个SQL还只是一个很简单的计算例子,实际应用中的数据准备场景大都要比这个复杂,有些甚至要复杂百倍千倍,成百上千行的SQL和存储过程也是总能见到的。

这样大的编码量,大部分的报表工具别说是把它变成零编码,就算是少一行都基本是无能为力的,能像上面的例子一样用专业计算工具SPL把编码量减少一部分就是最好的结果了。

另外如果数据源不是关系数据库,而是文本、NoSQL、JOSN这些,那这个前期数据准备就更是去写代码了,报表工具号称的零编码就更是口号有余但力不足了。

当然,用SPL这样的计算工具去处理,去做准备,仍然有一定的编码量,但还是能减少不少开发量,这时候我们就不是追求零编码,而是追求少编码了。

通过上面3个例子可以看出,涉及格内复杂计算和复杂数据准备过程的报表,所有报表工具想通过简单的零编码方式来实现都是绝无可能的,都得工程师去费时间捋顺其中的逻辑,然后去写公式和代码才能做出来的。

不同之处在于,计算能力较强的工具,可以利用它的高效函数和算法,使得编码量少而简单,更接近零编码,能力一般的,那就还是得费劲去硬编码了。

3、总结

报表工具的设计初衷,旨在减少手工设计报表的编码量,能真正做到少编码的就已经算作是好产品了,至于零编码,那是少编码的终极状态,是各工具远没有达到的,也是需要去持续努力才能一步步接近的。

最后推荐大家使用一款文中使用的报表软件:润乾报表,下载地址:润乾报表|报表下载-报表软件下载-报表产品下载润乾软件产品分为计算表、超维报表、 集算器等3类,更快速的解决的了数据的繁琐性,复杂性等.润乾报表专注数据分析,专业报表计算,降低工作量。http://www.raqsoft.com.cn/download/download-jsbb

零编码制作报表真的可能吗?相关推荐

  1. vb.net怎么调用fastreport报表_零编码制作报表可能吗?

    要回答这个问题,首先要明确啥程度算"零编码"? 以 Excel 为例,如果把写 Excel 公式(包括复杂一些的)看做零编码:而把写 Excel VBA 看做编码的话, 报表开发是 ...

  2. 零编码制作报表真地可能吗?

    很多报表工具都把零编码作为宣传口号,这是真的吗,真的能减少到零吗,真有那么神吗? 简单情况下能做到零编码 当数据来源,表格样式和计算都比较简单时,确实可以做到零编码,比如只需要把数据select出来后 ...

  3. Smartbi电子表格_零编码做报表

    ​电子表格指基于数据集的查询结果,在 Excel 中创建复杂的样式和计算的一类业务报表,可用于制作样式复杂的中国式报表.交叉报表.各种计算公式类别的报表.补录回写报表,报表数据支持来自于多数据源.多S ...

  4. iReport制作报表

    文章将会涉及3个方面的内容: 第一部分:使用iReport制作报表的详细过程(Windows环境下) 第二部分:使用Jasperreport作为报表控件开发胖客户端报表应用 第三部分:使用Jasper ...

  5. 统计报表用的什么软件(制作报表必备的3款软件)

    最近因为工作需要,我接触使用了几款报表软件,觉得还不错,推荐给大家使用. VeryReport VeryReport采用Java编写,B/S结构,无需安装客户端,使用浏览器即可做报表设计.易学易用,轻 ...

  6. 零基础可以学python吗-初学者必知:零基础学习Python真的能学会吗?

    零基础学习Python真的可以学习好吗?我想对于这个问题,是大部分想要学习Python的人都会纠结考虑的问题吧,也是很多小白最关注的的问题,今天为大家详细的解释一下. Python语言因为具有一定的独 ...

  7. Apache POI组件操作Excel,制作报表(四)

    Apache POI组件操作Excel,制作报表(四) 博客分类: 探索实践 ExcelApacheSpringMVCServlet  上一篇我们介绍了如何制作复杂报表的分析和设计,本篇结合Sprin ...

  8. python零基础能学吗-初学者必知:零基础学习Python真的能学会吗?

    零基础学习Python真的可以学习好吗?我想对于这个问题,是大部分想要学习Python的人都会纠结考虑的问题吧,也是很多小白最关注的的问题,今天为大家详细的解释一下. Python语言因为具有一定的独 ...

  9. 如何零基础制作一款自己的游戏!(一)

    如何零基础制作一款游戏(一) 文章目录 如何零基础制作一款游戏(一) 前言 一.软件下载以及创建工程 二.使用步骤 1.进入工程 2.设置更改 3.更改界面 4.脚本更改 5.下载插件 6.如何设置障 ...

最新文章

  1. 如何在Mac上的IntelliJ IDEA中增加IDE内存限制?
  2. 【字符串操作之】大小写转换→→toLocaleLowerCase、toLocaleUpperCase
  3. 十分钟教你开发EOS智能合约
  4. 总结Themida / Winlicense加壳软件的脱壳方法
  5. Microsoft Office 2007的ContentType
  6. k8s与监控--解读prometheus监控kubernetes的配置文件
  7. hashmap value占用空间大小_性能优化:为什么要使用SparseArray和ArrayMap替代HashMap?...
  8. 全志 Allwinner V3S 开发环境搭建 (二)安装必要工具
  9. 【以前的空间】网络流合集
  10. angular 单击和双击事件分开
  11. Linux命令行配置无线,Linux_CentOS-6.4无线上网命令行配置介绍,待连接的WIFI的ssid为“thmrdq - phpStudy...
  12. YBC携手IZO打造创业家的摇篮
  13. 如何提高C语言程序的可读性
  14. 如何在windows上安装虚拟机
  15. mysql 快速入门,SOAR 101 快速入门指南
  16. 巴西龟饲养日志----六月底乌龟状况
  17. vue组件走马灯_vue文字横向滚动走马灯公告代码示例
  18. 提供良好客户服务的5大原则
  19. Qt-c++桌面编程报错:qt.qpa.plugin: Could not find the Qt platform plugin “windows“ in
  20. has no exported member

热门文章

  1. 似水流年的伤感QQ日志_爱那么短,遗忘那么长
  2. 卷积神经网络检测皮肤癌已超越皮肤科专家
  3. pycharm报错:Process finished with exit code -1073741819 (0xC0000005)
  4. web、pc、wap、app的区别
  5. pdf_pdf_xchange editor添加跳转页面动作(编辑动作列表)_旋转页面
  6. 最新版lumion8.0下载地址
  7. pr怎么做手机竖屏视频
  8. signature=2f5f7776a12b849050f88bd5b555c78c,Topological defects in nanoporous carbon
  9. getrawinputdata鼠标_获取鼠标的原始移动值
  10. html5游戏sdk开发,自用游戏HTML5 sdk技术设计手册