2013-02-19 53 views
0

我使用Pivot.js庫來爲我的數據創建數據透視圖。該庫使用jquery.dataTables來顯示最終的數據透視表。不幸的是,Pivot.js在排序時遇到空值的問題。如何使用pivot.js對空值進行排序

可以很容易地在github-site看到的錯誤,當一個使用以下設置:

篩選字段:恩格爾伍德

行標籤字段:姓氏

列標籤字段: invoice_yyyy

摘要字段: billed_amount

然後,排序列 「2010」。結果如下所示。 Example Sorting Error

似乎該列被排序得像一個字符串,因爲某些行包含空值(邏輯上)並填充爲''。排序適用於在每行中包含值的完整列。 2010年專欄不完整,90.10美元! < $ 850.00

如何在不改變Pivot.js庫中的代碼的情況下避免該錯誤? 謝謝。

回答

1

你要提供一組新的排序功能,數據表,然後添加一個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. 數據表自動在&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; 
    }); 

希望它能幫助!

相關問題