如何使用pivot.js对空值进行排序
问题描述:
我使用Pivot.js库来为我的数据创建数据透视图。该库使用jquery.dataTables来显示最终的数据透视表。不幸的是,Pivot.js在排序时遇到空值的问题。如何使用pivot.js对空值进行排序
可以很容易地在github-site看到的错误,当一个使用以下设置:
筛选字段:恩格尔伍德
行标签字段:姓氏
列标签字段: 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一起发布)使用非空格空间点(
)作为空值(https://github.com/rjackson/pivot.js/blob/master/jquery_pivot.js#L347)。我建议jquery_pivot.js只是一个建议的UI实现,您应该可以自由修改它以适应您的应用程序;但是,如果你不想修改它,你留下两个潜在的不良行为:
- 数据表自动在
,正如你所观察到类型检测行程,把列字母数字进行分类。 - 即使您将其用于检测数值排序,空值通常会被视为该集合的最小值或最大值。在我的应用程序中,我更喜欢
NULLS LAST
的方法(即,无论升序/降序排序顺序如何,它们总是出现在表的末尾)。
我的解决办法是远离最优雅的,但这里是我的代码:
排序功能:
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"formatted-num-pre": function (a) {
a = (a===' ') ? 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===' ')?'formatted-num':null;
});
希望它能帮助!