报表也可以根据单元格计算后结果进行排序

熟悉报表的人都知道,报表中实现数据排序通常有三种方法:

1、 在 sql 语句中增加 order by,如 order by id asc

2、 select 函数取数时,指定排序字段,如 ds1.select(name:-1),或者按照其他字段排序,如 ds1.select(EMPID, ,,;NAME:1) 按照 NAME 字段升序排序

3、 还可以按照某字段汇总后的结果进行排序,如:ds1.group(省份; 省份:1; ds1.sum( 工业产值):-1),对数据集 ds1 按照省份进行分组,分组后求出每组的 sum( 工业产值),然后按照这个汇总值对组进行逆序排列

可以看到,这三种方式有一个共性,排序字段的数据都存储在数据库中。但是,在实际使用中,数据经常会在报表单元格中进行运算(比如单元格数据乘以一个系数然后再和其他单元格数据相加等),而此时如果要根据计算后的单元格数据进行排序,上述三种方法就无法做到了。

下面,我们就介绍一下如何实现这种需求,基于单元格计算后的数据进行排序。

思路

我们首先分析一下排序操作是怎么做的:按照某列数据排序,实际上是先算出该数据的“排名”,然后根据排名的“顺序”对数据进行重新排序。因此主要有两部分操作,一是如何生成排名,二如何根据排名重新对数据排序。

下面就按照这个思路实现一个实际例子。

首先,按照用户需求先将数据取出来以网格式方式展现,设计后的模板如下:

前几列按照实际需要将相应字段拖拽到单元格中即可,在 E3 单元格中,对运货费进行了单元格间的计算操作,需要解决的问题就是根据 E3 单元格数据进行排序。

接下来先生成 E3 的排名,排名写法比较固定,在报表后追加一列,在 F3 单元格中写入表达式:=count(E3[`0]{E3>$E3})+1,统计 E3 扩展出来的列中大于当前 E3 单元格的数量加 1,即为当前 E3 的排名。

好,现在排名生成了,看下如何基于排名重新对数据进行排序。

在报表第一列前插入一列,下边追加一行,在 A4 单元格中写入表达式:=to(1,count(B3{})),根据扩展区域重新模拟出一片扩展,如下图:

接下来就可以使用报表的动态格间计算功能,根据 G3(排名)和 A4 关联,重新在第四行取出想要的数据,在 B4 单元格中写入表达式:=B3{G3==$A4},该表达式含义为在 B4 单元格中取出排名(G3)和当前行相同的 B3 的值,并将 B3 单元格的扩展方向设置“纵向扩展”,报表预览如下:

可以看到,在 B 列中能够取到相应的 ID 值,其中,排名 6 和 8 都有两条记录,这是因为运货费单元格有相同的值,所以排名相同。

B 列中取出了订单 ID 的值,剩余单元格使用数据集. 字段名取数就可以了,如下图:

而原来的第三行数据作为中间数据,可以隐藏掉,同时将 A 列和 G 列也隐藏掉。

因为有相同数据,所以同一个排名会出现多条,相应的,有的名次下就会有空数据,例如因为有两个第 6 名,所以没有就没有第 7 名,为此我们在 B4 单元格的隐藏行表达式中写入:value()==null。剩下就可以根据实际需要设置报表样式了,最终展示结果如下:

可以看到,报表已经按照实际运费列的顺序从大到小排序了。

总结:

本文的例子中,首先根据单元格的顺序生成排名,然后在通过 to 函数模拟出一片数据进行扩展,再根据排名的名次重新获取需要的数据,这样就可以按照在单元格中经过复杂运算后的结果进行排序了。在实际应用中,还可以在表头中增加超链接,控制升序或者降序排序,具体的做法只需要在点击时控制 to 函数是从小到大还是从大到小扩展就可以了。

原文地址:https://www.cnblogs.com/xiaohuihui-11/p/12041824.html

时间: 2024-08-09 10:12:21

报表也可以根据单元格计算后结果进行排序的相关文章

excel合并单元格取消后每个单元格都填写上面的信息及每列增加空白行

1 取消合并居中 2 选中A2:A7单元格,并按下Ctrl+G,打开定位对话框 3 在定位对话框选择定位条件,选择空值后点击确定. 4 在A3单元格书=A2并按下Ctrl+enter. https://jingyan.baidu.com/article/27fa73264b882d46f8271ff0.html https://zhidao.baidu.com/question/88047541.html 原文地址:https://www.cnblogs.com/zhjx0521/p/10971

报表FineReport中单元格中各种颜色的标识说明

过滤标记-黄色小三角 B9单元格中设置了过滤,其中标识为左下黄色小三角,如扩大B9单元格效果图如下: 可通过双击B9单元格查看设置的过滤条件,在弹出对话框中选择过滤,就可看到设置的过滤条件:订单ID等于C2.   行后分页标识-绿色小三角 A10单元格中设置了行后分页,其中标识为右上绿色小三角,如扩大A10单元格效果图如下: 其中A10下方边框带有虚线标志,即为A10行后的单元格都分为下一页显示,行前分页标识相同,分割线在单元格的上方,具体分页的设置可参照单元格其他属性文档.   条件属性标识-

DataGridViewLinkColumn单元格单击后,字体颜色改变

DataGridViewLinkColumn.TrackVisitedState 属性 获取或设置一个值,该值指示当访问链接时,该链接是否更改颜色. 默认为true,即点击链接后,字体的颜色为DataGridViewLinkColumn.VisitedLinkColor所设置的颜色值. 将TrackVisitedState 设置为false,链接字体的颜色为LinkColor属性所设置的颜色值.

Excel单元格发生变化后,使用Outlook给特定的人发邮件

自己在公司里面维护了一个小金库的Excel,当某个人的余额小于0的时候,Outlook会自动给这个人发一封邮件,同时将这个Excel附在邮件中,具体的代码如下: Public Function sendEmail(mailTo As String) Application.ScreenUpdating = False Dim outapp As Object Dim outmail As Object Dim body As String Dim fname As String Set outa

去除FineReport报表点击单元格时出现的黑框

选择模版->模版web属性 添加加载结束事件,具体代码如下 $("td").bind("click",function(){return false;}); 保存即可

在excel批量更改单元格类型后的批量刷新显示

把E的东西变成完整显示 解决办法: 选中所需要更改的整列数据------>菜单栏的数据选项------>分列

减少报表隐藏单元格提升报表性能

如果报表携带大量隐藏格,会对其性能影响很大.这是因为大量隐藏格会占用内存.降低运算速度.而且隐藏单元格除了单元格值外,还记录了很多显示属性值,比如:字体.颜色.显示方式等等.虽然单元格隐藏了,但是这些属性还在,而且带着这些属性计算,也会影响计算速度. 下面这个<1997年订单情况统计>报表就是比较典型的隐藏格影响性能的例子: 这个报表的"比去年同期"是指与去年同月份的比值,无对应月份则为空:要求只显示本年数据. 通过格间计算来实现这个报表,需要将1996年的数据也读取到报表

如何通过报表单元格右键控制报表跳转到不同链接地址

需求说明: 润乾报表的单元格中支持超链接属性,用户可以通过设置该属性,实现在浏览器端用鼠标点击某个单元格跳转到指定页面,并且还能够传递所需要的参数,从而实现数据的钻取(详见<玩转报表超链接>).不过这种超链接的设置方式只能跳转到单一的指定页面,在一些特殊的业务要求中,用户可能需要基于一个单元格查看不同的明细信息.比如,用户在访问一个地区列表时,既想经由该页面查看某地区的销售收入情况,又想查看该地区的其他信息.这样,在原有方式下就需要增加多个超链接按钮,每个按钮设置不同的超链接,而这种做法不一定

[办公应用]如何将excel合并单元格分拆后每个单元格上仍保留数据?

合并单元格虽然美观,但是无法进行排序.筛选等操作. 只有合并单元格拆分后才可以按常规进行统计.但是普通拆分后,excel仅保留合并单元格数据到区域左上角的单元格. 解决方案:选定多个合并单元格,应用本宏即可每个单元格均保留数据:Sub 拆分() Dim c As Range For Each c In ActiveSheet.UsedRange.Cells If c.MergeCells Then c.Select c.UnMerge Selection.Value = c.Value End