润乾集算报表提供了层次数据源支持,在集算器中完成表间关联后可以将带有主从结构的数据集(如关联后的维表、事实表)直接给报表使用,而不需要在报表中再次关联;同样集算报表接收到事先在集算器中完成带明细的分组数据集也可以直接使用,而不必再次分组。

什么是层次数据源?

层次数据源是指在集算报表中使用集算器数据集类型,接收集算器脚本返回的带有层次的结果集,作为报表的数据来源。

wKioL1P0DxPhulXBAAF4eD50R-Y321.jpg

如上图,脚本返回的结果集A6包括销售姓名、按销售汇总的订单金额以及对应分组下的订单明细;订单明细指向了另外一个集合,该销售下包含订单ID、订购日期、订单金额等信息的订单表.。通过这种方式为报表提供带有关联关系和分组明细的结果集。

    集算报表在接收该结果集后在报表中的数据集结构如下:

wKioL1P0DxTx5cE5AAFY0_a01yc887.jpg

集算器各层次结果报表数据集结构

右侧报表数据集结构中:

  ds1”引用的是销售姓名和订单总额记录;

  ds1.订单明细”引用的是每个销售的订单明细记录,是ds1的第二层结果集;

  ds1.订单明细.客户”引用的每个客户对应的基本信息记录,是ds1的第三层结果集;

  ds1.订单明细.员工ID”与“ds1.订单明细.客户”类似,引用的是每个销售基本信息记录,也是ds1的第三层结果集

如何使用层次数据源?

以上述数据为例,需要完成一个某月按销售人员分组,统计每个销售人员的订单总额,并附有每订单详情和客户信息的报表。报表样式如下:

wKiom1P0DfywZ1giAAGUvOp5Rag332.jpg

    可以通过如下报表设计完成:

wKioL1P0DxWRTFTGAACStATksDE922.jpg

  A2-B2:针对销售人员分组直接取“ds1”中的销售姓名,使用集算器已经完成的分组,不需要针对销售再次group

  C2-E2:从第二层结果集“ds1.订单明细”中取得每组订单详情(订购日期、订单金额、客户名称),这里不需要再对订单表和员工表进行关联

通过简单的列表和取值表达式完成分组报表。

 

再来看一个例子,根据订单和订单明细表,列出订单信息以及每个订单下订单明细数据。报表样式如下:

wKiom1P0Df6Ah-B5AAGKVXa8C3w108.jpg

一般报表工具需要在报表中所有订单明细根据订单编号与订单表进行关联过滤,集算报表则可以通过层次数据集完成。

    编写集算器脚本:

wKioL1P0DxegZ_noAAGvrM8h5sI447.jpg

    订单信息中,订单编号指向了多条订单明细记录,对应报表数据集为:

wKiom1P0DgHxxStwAAJnh-gQ_OU830.jpg

    使用该层次数据集完成报表:

wKioL1P0DxnBp-Z8AAECuZ54wsg741.jpg

B1中使用第一层数据集ds1取得订单IDD1F1B2等跟随B1直接从ds1中取值,取得所有订单信息;B6则根据第二层数据集ds1.订单编号取订单明细中的产品ID,和C6D6等获得所有该订单的明细数据。设置所有单元格的左主格均为B1

通过层次数据集避免了报表中还需关联子表带来的实现以及效率问题。

层次数据源的优势

    集算报表的层次数据源价值在报表开发和性能两方面有所体现。

易于报表开发

区别于传统报表工具需要在报表中进行groupsum以及多数据源关联等,集算报表使用层次数据源通过简单的列表和取值表达式就可以完成,诸如本例的分组报表。

由于集算器脚本支持分步编写代码,使得很多复杂分组、关联的计算在集算器中完成会更轻松,而生成的层次数据源则可以很方便被报表使用。

提升报表性能

    报表完成关联、分组等计算时,一般是采用排序和遍历的方案,而且往往要带着报表的很多展现属性(如边框、颜色等)一起运算,使得报表的计算效率不高;而集算器在关联运算是采用hash算法(报表端没法直接使用hash算法做关联),而且在计算时则不带有任何展现属性,且对集合运算的有效支持,还可以充分利用数据本身的有序性,使得计算效率要优于在报表端计算。这意味着,通过集算器返回层次数据源可以减少报表端的运算强度,从而显著提升报表性能。