排序常见问题

  • Last update:September 08, 2022
  • 1. 概述

    本文将介绍各类排序使用过程中遇到的问题和解决方案。

    2. 排序时数值型字段存在空值时报错

    问题描述

    若对「数值型字段」设置了排序,而字段中存在空值,那么在预览或点击标题排序时就会出现报错。

    例如在「订单 ID」列设置了点击某一列标题改变排序,其扩展后排序公式为:if($a=1,$$$,-$$$),表示根据当前列的值进行排序。如下图所示:

    1615947689973944.png

    此时预览报表,点击「订单 ID」标题,出现报错如下图所示:

    解决方案

    在排序公式中对空值赋值后参与排序。

    将公式写为:if($a=1,if(len($$$)=0,min(ds1.select(订单ID))-1,$$$),if(len($$$)=0,-(min(ds1.select(订单ID))-1),-$$$)) 。即当字段为空时,给其赋值为(订单 ID最小值-1),参与排序。

    公式说明如下表:

    公式
    说明
    len($$$)=0当前单元格值为空
    min(ds1.select(订单ID))-1获取数据集 ds1 中「订单ID」(排序字段)的(最小值-1)
    -(min(ds1.select(订单ID))-1) 获取数据集 ds1 中「订单ID」(排序字段)的 -(最小值-1)

    注:数据集函数使用方法参考数据集函数

    修改公式后,点击预览报表,效果如下图所示:

    6144D72B2201C26674D05D4A22A55695.gif

    模板下载

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\数值型字段排序有空值.cpt

    点击下载模板:数值型字段排序有空值.cpt

    3. 非纯数字横向扩展列乱序排列

    问题描述

    制作一张月报表时,期望将「月份」数据列拖入单元格使用横向扩展得出,但如果遇到 1月、2月 这种非纯数字的扩展表头时,使用原值排序就会导致错乱。如下图所示:

    222

    解决方案

    使用公式 INT(REPLACE($$$,'月','')) 将「月」替换为空字符串,再将字符串转换为 INT 类型。

    Snag_15c85429.png

    设置完成后,单元格的字符串值就被转换成了整型数据,再排序的话就会按照设置的升序或降序排序了,如下图所示:

    222

    模板下载

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\非纯数字扩展列乱序排列的解决方案.cpt

    点击下载模板:非纯数字扩展列乱序排列的解决方案.cpt

    4. 排序数据中含有字符串

    问题描述

    用户的数据库表预先对数据进行了处理,当有空数据时,字段值为--;但出现了异常现象:含有字符串的待排序数据,进行扩展后排序时,升序时,--于零和负数上方;降序时,--位于零和负数之间。

    如下图所示:

    1652778616207141.png

    解决方案

    建议先在 SQL 中对字符串值进行处理,可选择置 0 。

    5. 模板数据量大造成点击排序时页面卡顿

    问题描述

    参考点击 某一列标题改变排序 进行排序时,每次点击排序都需要进行页面刷新,若页面数据量较大,则每次刷新所需时间较长。

    解决方案

    思路:用 JS 实现不刷新页面进行排序功能。

    若无冻结行,则可参考:JS实现不刷新页面进行排序功能

    6. 对中文内容按照拼音排序

    问题描述

    对中文进行排序时,默认是按照 ASCII 码值进行排序,用户希望按照中文的拼音先后顺序。

    解决方案

    需先使用 StringPinyin 函数(函数集合插件)将中文转换成拼音,再利用扩展后排序实现。

    7. 报表预览报错 Comparison method violates its general contract!

    问题描述

    用户报表报错Comparison method violates its general contract!,无法预览。

    问题原因

    数据量过大+设置了扩展后排序导致的。

    解决方案

    单元格扩展排序,数据量大会引起排序逻辑冲突的问题,会出现报错:Comparison method violates its general contract!,建议使用高级排序。

    如果数据做了汇总,没办法直接改成高级排序,建议把汇总放在 SQL 里面处理,然后排序再换成高级排序。

    8. 图表分类排序

    问题描述

    单元格和数据源中数据已排序,而图表分类坐标轴数据排布乱序。

    原因分析

    初步定位为图表分类坐标轴制图时为了避免中间存在断点,所以对优先排布系列中均存在的分类,而后排布部分序列中不存在的分类。
    解决方案

    将每个系列中的分类补全。

    9. MySQL 中文排序无效

    解决方案

    如果 MySQL 数据库无法实现按中文拼音首字母排序,需要看一下表字段是否使用的是 UTF-8 编码,如果使用的是 UTF-8 编码,则需要使用 MySQL 的 convert 方法转换成 GBK 编码进行排序。且前提是 MySQL 安装了 GBK 字符集,不然会报错。

    SQL 语句如下:

    升序:SELECT * FROM 销量 order by convert(英文简称 using gbk)

    降序:SELECT * FROM 销量 order by convert(英文简称 using gbk) desc


    Attachment List


    Theme: 报表专题
    Already the First
    Already the Last
    • Helpful
    • Not helpful
    • Only read

    滑鼠選中內容,快速回饋問題

    滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

    不再提示

    10s後關閉

    Get
    Help
    Online Support
    Professional technical support is provided to quickly help you solve problems.
    Online support is available from 9:00-12:00 and 13:30-17:30 on weekdays.
    Page Feedback
    You can provide suggestions and feedback for the current web page.
    Pre-Sales Consultation
    Business Consultation
    Business: international@fanruan.com
    Support: support@fanruan.com
    Page Feedback
    *Problem Type
    Cannot be empty
    Problem Description
    0/1000
    Cannot be empty

    Submitted successfully

    Network busy