繁体   English   中英

如何使用ivot.js对空值进行排序

[英]How to sort null values with pivot.js

我使用Pivot.js库在数据上创建数据透视图。 该库使用jquery.dataTables显示最终数据透视表。 不幸的是,Pivot.js在排序时存在空值问题。

当使用以下设置时,可以在github站点上轻松看到该错误:

筛选字段:恩格尔伍德

行标签字段: last_name

列标签字段: invoice_yyyy

摘要字段: billed_amount

然后,按“ 2010”列排序。 结果将如下所示。 示例排序错误

似乎该列像一个字符串一样进行了排序,因为某些行(逻辑上)包含空值并用''填充。 排序适用于在每一行中包含一个值的完整列。 列2010不完整,$ 90.10!<$ 850.00

如何在不更改Pivot.js库中的代码的情况下避免该错误? 谢谢。

你要提供一组新的排序功能,数据表,然后添加一个aTypes功能可自动分配相应的数据类型(如格式化数字) - http://datatables.net/release-datatables/examples/plug-ins /sorting_plugin.html

棘手的是,jquery_pivot.js(与pivot.js一起提供)将不间断的空格点( &nbsp; )用作空值( https://github.com/rjackson/pivot.js/blob/master/jquery_pivot .js#L347 )。 我建议jquery_pivot.js只是一个建议的UI实现,您应该可以自由地为您的应用程序对其进行修改。 但是,如果您不想对其进行修改,则会留下两种潜在的不良行为:

  1. dataTables的自动类型检测会跨越&nbsp; 如您所见,将列视为字母数字进行排序。
  2. 即使当您使用它来检测数字排序时,空值通常也将被视为集合中的最小值或最大值。 在我的应用程序中,我更喜欢NULLS LAST方法(即,它们始终出现在表的末尾,而不考虑升序/降序的排序顺序)。

我的解决方案远非最优雅,但以下是我的代码:

排序功能:

jQuery.extend( jQuery.fn.dataTableExt.oSort, {
    "formatted-num-pre": function ( a ) {
        a = (a==='&nbsp;') ? NaN : a.replace( /[^\d\-\.]/g, "" );
        return parseFloat( a );
    },
    "formatted-num-asc": function ( a, b ) {
        if(isNaN(a)) return 1;
        if(isNaN(b)) return -1;
        return a-b;
    },
    "formatted-num-desc": function ( a, b ) {
        if(isNaN(a)) return 1;
        if(isNaN(b)) return -1;
        return b-a;
    }});

类型检测:

jQuery.fn.dataTableExt.aTypes.unshift(
  function (data) { 
    return (data.charAt(0)==='$'||data==='&nbsp;')?'formatted-num':null; 
  });

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM