乐趣区

关于报表工具:报表工具对比选型系列用例过程计算

咱们晓得,报表出现的数据经常并不是间接从数据库(源)取出来的数据,而还要进行一些运算,报表工具通常也会提供肯定的运算能力(如过滤、分组等)以应答这种需要。然而,状况简单时,报表数据集上的运算可能要多个步骤能力实现,这时候就要考查报表工具对过程式计算的反对水平了。

[](http://c.raqsoft.com.cn/forwa…

统计要求

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

报表式样

数据结构

[销售记录表]

特点剖析:

这个报表式样很简略,次要麻烦之处在于须要从原始数据集计算出大客户后再出现,而这个计算并不是简略一步能实现的。

咱们的重点是考查报表工具的过程计算能力,所以假设不应用 SQL 或数据源的计算能力来实现。

[](http://c.raqsoft.com.cn/forwa…

制作过程:

1、配置并连贯数据源。

2、设置数据集

润乾报表提供了一个独立的计算引擎,能够通过内置的脚本实现对数据的计算并将后果返回给报表数据集,在报表中新增数据集,数据集类型应用脚本数据集,脚本如下:

2.1 A1 格:单元格做了数据源的连贯,而后 A6 单元格在执行结束后敞开连贯。

2.2 A2:从客户销售表中取数,此处依据客户名称做了汇总,并且依照销售额降序排序。

2.3 A3:对销售额进行求和操作并处以 2,取出总金额的一半,用于判断大客户。B3 设置初始值为 0,用于做销售额累加操作

2.4 A4:对销售额进行累加,取出累加金额大于 A3 中对应的 A2 的序号

2.5 A5:依据序号取 A2 中对应的值,并做为后果集返回给报表

3、设计报表模板

脚本数据集中返回的数据就是大客户的数据信息,所以制作报表就相当简略, 设置如下::

3.1、A2、B2 单元格间接取数据集中的数据

3.2、B3、B4 单元格间接用数据集汇总函数,对数据集计数取出大客户数量,对销售额用 avg 函数取出均匀销售额。

3.3、设置边框、金额显示格局。

运行后果

实现后点评

1、0.5 小时,应用脚本数据集中内置的语法,几个单元格的解决就能疾速实现需求。

2、能够应用脚本数据集,内置丰盛语法规定,能疾速解决各种简单的数据统计要求。

3、报表设计简略,并且不须要辅助单元格,报表计算效率高。

[](http://c.raqsoft.com.cn/forwa…

制作过程:

1、配置并连贯数据源。

2、设置数据集

减少数据库查问,SQL 为:SELECT 客户,sum(销售额) 销售额 FROM DEMO. 客户销售表 group by 客户 order by 销售额 desc

3、设计报表模板

3.1 B2 单元格取总销售额的一半,用于判断大客户,单元格内对销售额求和,并设置自定义显示公式 $$$/2,帆软对字段汇总后如果再进行计算,无奈间接在单元格里手动加表达式,只能设置自定义显示公式。

3.2 A3、B3 单元格取数数据集中的客户和销售额字段。

3.3 C3: 求累计金额,=B3+C3[A3:-1],减少条件属性,对非大客户的数据进行暗藏。

3.4 B4: 大客户数量,=count(B3[!0;!0]{C3 <= B2 || (C3[A3:-1] < B2 && C3 >= B2)}),用 count 函数统计累计销售大于总销售额个别的数量。

3.5 均匀销售额,=sum(B3[!0;!0]{C3 <= B2 || (C3[A3:-1] < B2 && C3 >= B2)}) / B4,设置单元格的格局保留两位小数。

3.6 将不须要展示的行列设置暗藏。

报表后果

实现后点评

1、用时 1 小时。

2、累计实现能够通过内置的档次函数 LAYERTOTAL(B1, C1, D1) 实现,也能够通过档次坐标, 本例应用的是档次做表形式,内置性能比拟丰盛。

3、能够依据条件公式动静设置报表行列的动静暗藏。

4、须要减少辅助单元格,会减少额定资源的耗用,尤其是客户数量多时,报表中是取出了所有客户信息(小客户数量经常多得多),而后再判断暗藏,数据量大时报表计算性能会有影响。

[](http://c.raqsoft.com.cn/forwa…

制作过程

1、配置并连贯数据源。

2、设置数据集

采纳原生 SQL 数据集,间接通过 SQL 语句取数就行:

select 客户,sum(销售额) 金额 from 客户销售表 group by 客户 order by 金额 desc。

3、设计报表模板

报表的设计在 excel 内实现,借助丰盛的 excel 函数,smartbi 解决这种格间运算也不是太麻烦。如几个要害计算:

3.1 D1:所有客户的销售总金额,D2 中写入表达式 =D1/2, 取总销售额的一半。

3.2 D3 格:累积金额,=SSR_GetCell(D3,B3,-1)+C3。

3.3 E3:=IF(SSR_GetSubCells(D3,B3)>D2,1+SSR_GetCell(E3,B3,-1),0),依据累积金额,标识当呈现累积金额大于总金额一半的时候 标识为 1,前面累计值仍然大于总金额一半,数值累计为 2/3/4(用于暗藏前面不要的数据)等

3.4 C4 格:=MATCH(1,SSR_GetSubCells(E3,A3),0),依据 E3 的标识,查找第一个呈现的 1 所在的序号,该序号即标识大客户数。

3.5 C5 格:均匀销售额绝对简略,=D4/C4,并设置报表中数据显示格局

3.6 暗藏行设置,须要暗藏掉非大客户数据,不反对表格内定义暗藏表达式,这里依据 E3 值大于 1 的就暗藏,要借助平台给电子表格设置宏(须要写 js 代码)实现:

运行后果

实现后点评:

1、用时:1.5 小时。

2、齐全在 excel 中操作,容易上手,操作起来比拟不便。excel 函数丰盛,这个报表次要是其查找类函数的应用。

3、暗藏不须要(除大客户外)的客户数据时,不反对表格内定义暗藏表达式,须要 js 代码能力实现,难度较大。

4、须要减少辅助单元格,会减少额定资源的耗用,尤其是客户数量多时,报表中是取出了所有客户信息(小客户数量经常多得多),而后再判断暗藏,数据量大时报表计算性能会有影响。

[](http://c.raqsoft.com.cn/forwa… BI

制作过程:

1、配置并连贯数据源。

2、设置数据集

应用 SQL 语句数据集:select 客户,sum(销售额) 金额 from 客户销售表 group by 客户 order by 金额 desc

3、设计报表模板

3.1 第一列减少了个按销售额取数,理论中发现数据集中尽管依照销售额排序了,然而间接取出客户名称字段时,即便不排序,也不会依照数据集原有数据排序,所以前边减少了个销售额字段,并且设置降序排序。

3.2 第四列中取出了总销售额以及对应的累计销售额,累计销售额间接拖拽,设置下格间计算未累计就行

3.3 大客户数量单元格应用格间计算,里边表达式为:

var a=0;

for(var i=1;i<=ridx-1;i++){

if(cell(i,3)>=cell(0,3)/2){

a=i;

break;

}

}

通过 js 语法,对行列循环,判断累计值是否大于销售额总计的一半,返回对应行数也就是数量。

3.4 大客户均匀销售额同样的做法:

var a=0;

for(var i=1;i<=ridx-2;i++){

if(cell(i,3)>=cell(0,3)/2){

a=cell(i,3)/i;

break;

}

}

3.5 第一列和第四列是辅助列,右侧有个暗藏列设置,将这两列暗藏掉

3.6 暗藏行设置,永洪不反对单元格暗藏行表达式,如果要暗藏掉非大客户数据,须要通过 js 语句实现,能够在 js 中获取到报表计算后的行属性,依据 3.3 中获取的大客户数量动静设置非大客户(报表计算后行号超过大客户数量的行)行高为 0,来达到暗藏的成果,这个和 Smartbi 有些相似,这里就不具体实现了。

运行后果

实现后点评

1、用时 2 小时,格间计算那几个单元格解决工夫较长,比拟考验开发能力。

2、格间计算中能够用 js 语法进行数据的计算,适宜开发人员操作,比拟灵便, 但同时内置函数少,比拟考验开发人员能力。

3、累计设置比拟不便,间接用内置的语法就行。

4、排序设置有问题,数据集中设置了数据的排序,然而报表里默认不会依照相应的程序排序(也可能没找到办法)。

5、须要减少辅助列来实现,比方累计列,如果数据量大会额定占用内存空间。

6、能够设置暗藏列,然而设置后设计界面也就无奈看到该列,无奈还原,而且如果数据集变动而暗藏列里援用了变动前的字段,很难更改。

7、须要减少辅助单元格,会减少额定资源的耗用,尤其是客户数量多时,报表中是取出了所有客户信息(小客户数量经常多得多),而后再判断暗藏,数据量大时报表计算性能会有影响。并且暗藏掉非大客户信息时,须要写简单的 js,难度较大。

[](http://c.raqsoft.com.cn/forwa…

制作过程

1、配置并链接数据源

2、设置数据集

间接通过 SQL 语句取数就行:SQL 语句为:select customer,sum(sales) as sales from sales group by customer order by sum(sales) desc

3、设计报表模板

3.1 A1:=sum(TEST.sales)/2 计算所有客户的销售总金额的一半,并在右侧属性里设置暗藏属性

3.2 A3:=TEST.customer 浮动维字段,同时在右侧设置排序的根据是 B3。

3.3 C3:=self.leftcell.value+self.upcell.value 实现金额累计计算

3.4 D3:=if(GRID1.C3.upcell.value<GRID1.A1,1,null) 将累计金额大于 A1 单元格值的数据标识为 1,不符合条件的标识为 null,不便前面统计数量。

3.5 B4:=sum(GRID1.D3$),依据 D3 的标识统计进去大客户数量(D3 中大客户返回 1,对 1 求和就是大客户数量)

3.6 B5:=GRID1.D3$.select(@.value=1).select(true,@.leftcell(2).value).avg() 先应用数组的形式过滤出来对应的数据,而后再进行求均匀的计算

3.7 选中第 3 行设置显示表达式为:<#=if(GRID1.D3=1,1,0)#>,D3 单元格标识出了本条数据是否是大客户,这里依据 D3 单元格值管制本行是否显示(如果为 1 则返回 1 示意显示,否则返回 0 不显示)

运行后果

实现后点评:

1、制作用时:1.5 小时

2、内置函数比拟丰盛,本表中罕用操作基本上都是通过内置函数实现。

3、能够依据条件公式动静设置报表行列的动静暗藏,比拟不便。

4、须要减少辅助单元格,会减少额定资源的耗用,尤其是客户数量多时,报表中是取出了所有客户信息(小客户数量经常多得多),而后再判断暗藏,数据量大时报表计算性能会有影响。

[](http://c.raqsoft.com.cn/forwa…

  1. 这个例子报表后果格局绝对比较简单,各个报表工具基本上都能实现。
  2. 对于本例中考查的过程计算,帆软、Smartbi、永洪、亿信这四款工具实现办法基本一致,都是通过辅助行列取出销售额总计、累计销售额,而后进行数据判断来确定哪些客户是大客户并对数据统计,最初将辅助行列再暗藏掉。整个过程有肯定的难度和繁琐度,这是因为报表只能执行状态式计算,用来处理过程计算就只能采取这种曲折的方法。
  3. 这几款产品之间来看,帆软、Smartbi、亿信基本上统一,都是应用内置函数或者办法实现,暗藏行列也比拟不便。而永洪累计实现不便,间接通过鼠标设置就行,然而做数据统计时就要写简单的 javascript 语法来统计,这块实现难度比拟大,而且暗藏行列设置也不太不便。永洪的简单报表性能相比其它三款要更弱一点,帆软在这四款中绝对更好,这和之前测试其它案例的论断也统一。
  4. 润乾事实上也能够采纳暗藏格伎俩实现,但咱们在这里则提供了一种不同凡响的办法。润乾减少了一个计算层,应用脚本数据集,能够更不便地实现过程式计算,返回给报表就是解决后的数据后果,报表中不再做特地解决,整体过程更为简略,而且耗费资源也比应用辅助格要少得多,性能会更优。依然是和之前测试案例的论断统一,润乾是这几款产品中领有最强计算能力的产品,计算层显著拉开了和其它产品的差距,这对于高效开发简单报表是至关重要的。

[](http://c.raqsoft.com.cn/forwa…

咱们再通过一个例子在看计算层的意义,查问股票最长间断上涨的天数:

数据源是一个文本,记录各支股票的每天的收盘价:

这个报表的款式也很简略,但计算过程要更为繁琐:须要先将按日期过滤后的数据集按股票代码分组,再计算出每组股票间断上涨的天数,而后再过滤出超过 5 天的股票。

这种简单的过程,如果没有计算层的帮助,应用暗藏格就是个十分麻烦的过程,大体描述如下:

1、取出文本数据集,放入单元格中

2、设置排序,按股票代码和日期排序

3、按股票代码分组,做成两层报表

4、在明细行减少辅助格计算间断上涨的天数

5、在分组行计算最大间断上涨的天数

6、将明细行暗藏

7、将非指定日期和不满足条件的分组暗藏。

这个过程,对于帆软这种格间计算能力较强的报表工具,还只是繁琐;而 Smartbi、永洪和亿信这些就不只是繁琐的问题,两头的计算也很难表白。并且,无论是哪一款工具,都会导致整个报表臃肿,有大量的暗藏格(远远多于出现进去的格子)。

要防止这些,理论应用的方法经常会借助自定义数据源,用 Java 读出数据把后果集计算好,或者把数据导入数据库用 SQL 来算。无论哪种办法,都仍然十分繁琐,重大影响开发效率。

然而,如果像润乾报表一样有个可解释执行的计算层的话,那就会很简略,实现这个逻辑也不须要几行代码:

A1 :=file(“F:/ 股票信息.txt”).import@t().select(left(string(Date),7)==rq), 读取股票信息中的数据,并依据报表中传入的 rq 参数进行数据过滤,取某月数据

A2:=A1.sort(Date).group(SID),依照日期排序,并依据 SID 字段分组

A3:go=A2.new(SID, ~.group@i(Closing>Closing[-1]).max(~.len()):ts),Closing[-1] 取以后记录上一条的收盘价,A3 中依据同一只股票当天开盘大于前一天收盘价来取最大间断上涨天数。

A4:return A3.select(ts>=5),取出 A3 中最大间断上涨天数大于 5 的数据,返回给报表数据集应用。

因为脚本数据集中曾经解决好了数据,报表中制作就相当简略了,就不必具体解释了。

[](http://c.raqsoft.com.cn/forwa…

咱们用了三篇文章比照了这五款以简单报表能力为宣传点的报表工具:
报表工具比照选型系列用例——多源分片报表

报表工具比照选型系列用例——排名及跨行组统计
总体论断如下:

  1. 润乾的劣势非常明显,即便不思考它特有的计算层,其简单报表能力也是这五款产品中最强的。再加上计算层,能够说是遥遥领先,和其它几款产品相比曾经差出品位了。
  2. 帆软居次,如果抛开润乾特有的计算层,帆软的简单报表能力和润乾相比还是会弱,但相差不算很大了,而且帆软敌对的界面可能再加分,能够认为润乾和帆软是第一档的产品,把简单报表作为宣传点都算是名符其实的。
  3. Smartbi 就要弱一些,模型根本实现了,但表达式细节和润乾帆软差得不少,能够算作是第二档的产品。把简单报表作为宣传点,在 BI 畛域中也还勉强说得过去。
  4. 永洪和亿信,严格地说,其简单报表能力还处于没入门的阶段,和其它几款产品相比的差距十分大。只能算作第三档甚至不入档的产品了,其实这两款产品原本是 BI 色调很强的产品,把简单报表作为宣传点就有点名不符实了。
退出移动版