在BI系统中,报表的交互式排序往往是不可缺少的一项功能。如现在在系统中有一张用户购买力情况的报表。这张报表主要是根据过去五年的历史记录分析出各个人群的购买力。企业决策层可能希望在不重新生成报表的情况下,直接对报表的内容进行排序。如这种报表默认情况是根据购买力从高到低排序,而现在用户希望从低到高进行排序。在这种情况下,就需要使用报表的交互式排序功能。在这篇文章中,笔者就给大家介绍一下这个交互式排序功能如何在BI中使用,以及需要注意的事项与技巧等等。
一、交互式排序可以实现的功能。
交互式排序顾名思义,就是可以在报表的级别上,同用户在排序内容上进行交互。简单的说,就是可以对已经生成的报表直接根据特定的内容进行排序。而不需要更改默认的排序规则或者重新生成报表。在BI系统中,这是一项必备的功能之一。
具体的来说,R2中的报表交互式排序功能可以实现如下两个需求。
一是可以在列标题中添加交互式排序按钮。如上面这个案例,可以在购买力这个标题中加入一个按钮。如果用户有需要根据这个列来进行重新排序,则只需要点击一下这个列标题即可。如此用户就可以在升序与降序之间进行切换,选择自己所需要的排序格式。如果在多个标题中都添加这个按钮,那么就可以根据用户的需要,选择需要排序的列。
二是可以在文本框中添加按钮来实现排列。这是交互式排序中比较高级的一项应用。如数据库管理员可以根据用户的需要,在行组外部的行中的文本框中添加排序按钮。如此的话,就可以 为父组行或者列、为子组行或者列或者为详细信息行或者列来指定排序的规则。同时还可以将多个字段组合成单个表达式,然后按多个字段来进行排序。这就好像在数据库中,直接在Order By语句后面挂上多个排序字段。在数据库中,必须要有数据库管理员来操作。如果用户需要更改排序规则的话,数据库管理员每次都要在数据库中更改,显然比较麻烦。而在报表层面,则用户可以根据自己的需要来设置。这就可以提高BI系统的界面的友好性与灵活性。在不改变SQL语句的情况下,方便用户的操作。
二、交互式排序中的五要素分析。
那么该如何实现这个报表的交互式排序呢?笔者将其总结为五要素。只要能够搞清楚这五个要素的含义以及他们之间的关系,那么交互式排序功能的实现,就是水到渠成的事情。
第一个要素:排序对象。在这个要素中,主要确定两个方面的内容。一是确定需要堆行还是对列进行排序,二是需要确定是对对个对象进行排序还是对多个对象进行组合排序。一般来说,对列排序占了大多数情况。另外如果需要对多列进行组合排序的时候,需要注意排序的效率问题。如果报表中记录比较多,则可能组合排序的过程会比较耗时。不过在BI中,一般的报表都是总结性的内容,所以记录数量应该不会太多。为此这个性能的问题不需要太在意。管理员只需要知道有这么一回事即可。
第二个要素:排序的依据。在数据库设计的时候,可以根据显示的字段来排序,也可以根据未显示的字段来排序。如果是视图的话,只要是基础表中有这个字段即可,而不一定要在视图中显示出来。对于交互式排序来说,也有这方面的问题。在这个要素中,管理员需要确定是根据列中显示的字段进行排序,还是依据没有显示的字段进行排序?因为不同的需求对后续的操作要求有所不同。所以在这里要定义清楚。
第三个要素:排序上下文。这是一个比较难以理解的。笔者在刚开始接触到这个内容的时候,想了好久也没有弄明白这是什么意思。根据说明自己操作了一遍,看了最终的效果才明白什么意思。这大概就是只可意会、不可言传的含义吧。在这里笔者只把其含义说明一下,希望各位读者自己去操作一遍,会有更加深刻的体会。管理员可以在与行组关联的行、与列组关联的列、详细信息行、父组内的子组中进行排序,或者同时在父组和子组中进行排序。简单的说,这是一种比较高级的、在局部范围之内的排序。在BI中,会经常用到。所以这是必须要掌握的一个内容。虽然比较难以用语言表达,但是只要用户多操作几次,就可以掌握其中的诀窍。
第四个要素:按钮的位置。在上面功能分析中,笔者已经谈到过,可以将排序的按钮添加到列标题中,也可以将其添加到某个文本框中。在这一个要素中,管理员就需要根据用户的需求来确定,到底是将排序按钮添加到哪个地方。在文本框上操作还是在列标题上操作,对于排序来说,没有实质性的影响。主要就是看用户的操作习惯与需求而定。一般来说,不建议在同一张报表上同时在列标题和文本框上添加排序按钮。因为一不小心,就可能会有相互冲突的事件产生。而且在实际工作中,只需要一种就可以满足用户的需求。两个都要,就有点画蛇添足的感觉了。
第五个要素:排序是否会影响到多个区域。有时候在一个报表中,可能会有多个数据区域。如在BI系统中,可以设计两个相对独立又有相互联系的数据区域。这两个数据区域中都有日期这个字段。现在的问题是,在报表中对其中一个区域的数据根据日期字段进行了排序,那么另外一个数据区域是否自动根据这个日期字段进行排序呢?如果需要的话,那么就必须要要对这两个数据区域设置一定的关联,如父子关系等等。
三、在多个组中实现交互式排序。
在BI中,如果仅仅对单个组进行交互式排序,可能还不能够满足用户的全部需求。由于BI中,报表要呈现的内容比较复杂,为此往往会在同一个报表中,设置多个组。此时如果用户需要对多个组进行交互式排序,可以实现吗?
在R2中,为了满足BI系统中的这个需求,特意设置了一个功能,可以实现对多个组进行交互式排序。简单的说,如果一个报表中含有嵌套的行组、,而且每个行组都是基于单个数据集字段,则可以在这个报表中添加对父组值、子组值或者详细信息行进行排序的交互式排序按钮。
如果用户有这方面需求的话,数据库管理员就需要重新设计这张报表。需要按组合了多个字段的表达式进行分组。如还是以上面这个购买力的报表为例。在数据库中设计的时候,是按照年龄层次、购买力两个字段(注意有先后顺序)来排列的。而用户提出来,在使用报表的时候他们可能还希望根据性别与购买能力两个字段来进行排序。此时在这个对象设计的时候,需要将这两个字段捆绑为一个组(利用组表达式来指定)。如此的话,在报表设计的时候,就可以让用户根据这个组(其实是两个字段)来进行排序。不过需要注意的是,如果一个组中有多个字段,其排序的时候,字段的先后顺序非常重要。这个跟OrderBy语句中的规则是一样的。