2017-05-09 73 views
1

我正在研究dc.js圖表​​。我已經安裝了小提琴hereCrossfilter尺寸過濾

我有下面的數據:

var data = [ 
    {"state": "A","value": 100,"volume": 10,"id": 4,"date": "10/1/2017","category": "H","channel": "CRM"}, 
    {"state": "B","value": 50,"volume": 10,"id": 2,"date": "8/1/2017","category": "A","channel": "CRM"}, 
    {"state": "A","value": 250,"volume": 5,"id": 4,"date": "10/1/2017","category": "H","channel": "CRM"}, 
    {"state": "A","value": 40,"volume": 4,"id": 3,"date": "9/1/2017","category": "A","channel": "Sales"}, 
    {"state": "C","value": 10,"volume": 1,"id": 5,"date": "11/1/2017","category": "A","channel": "Sales"}, 
    {"state": "B","value": 10,"volume": 1,"id": 2,"date": "8/1/2017","category": "H","channel": "CRM"}, 
    {"state": "D","value": 150,"volume": 3,"id": 1,"date": "7/1/2017","category": "A","channel": "Sales"}, 
    {"state": "D","value": 100,"volume": 5,"id": 1,"date": "7/1/2017","category": "H","channel": "Sales"}, 
    {"state": "C","value": 50,"volume": 1,"id": 5,"date": "11/1/2017","category": "H","channel": "Sales"} 
] 

我有四個維度(狀態,類別,信道,ID)和所有通過值分組。

我需要知道,如果我可以過濾尺寸,使得如果我設置爲60,圖表應顯示所有其值總是IDS大於60

例如它的狀態餅圖應僅顯示值大於60的切片,即僅顯示A和D.

+0

我編輯你的問題稍微有點因爲你在談論「大於或等於60」,但是爲了你的榜樣工作,你必須意味着「大於60」。當然,它只是稍微改變了答案。 – Gordon

回答

1

本身,crossfilter不會過濾值。如果你仔細想想,在行減少之前,過濾由行減少到某個值的行的數據將會非常複雜。

但我認爲你不是在尋找過濾,而只是沒有顯示太小的切片。你可以使用"fake group"來做到這一點。這是一個後處理步驟,不會更改交叉過濾器中包含的數據,只是您選擇顯示哪些項目。

這個與「刪除空箱」假羣組非常相似。但是不是查找值0,我們會查找最小值。

function remove_small_bins(source_group, lower_bound) { 
    return { 
     all:function() { 
      return source_group.all().filter(function(d) { 
       return d.value > lower_bound; 
      }); 
     } 
    }; 
} 

把它應用到你的榜樣(小提琴數據從上述數據略有不同),我們首先需要看看d.value.orderValue instead of just d.value`:

function remove_small_bins(source_group, lower_bound) { 
    return { 
     all:function() { 
      return source_group.all().filter(function(d) { 
       return d.value.orderValue > lower_bound; 
      }); 
     } 
    }; 
} 

應用的假像組這樣的:

var stateGroup = stateDim.group().reduce(reduceAdd, reduceRemove, reduceInitial); 
var stateGroupNoSmalls = remove_small_bins(stateGroup, 60); 
// ... 
stateChart 
    .group(stateGroupNoSmalls) 

叉的小提琴:https://jsfiddle.net/gordonwoodhull/cyjztajv/2/

+0

謝謝你的答案。但是當我把slicecap放在那些pieCharts上時,它爲什麼會顯示NaN .... https://jsfiddle.net/cyjztajv/3/ – talentedandrew

+0

這與這個問題無關 - 它也沒有發生啓用「remove_small_bins」。您在'label'函數中從縮減的數據中拉取自定義字段,並且默認的[othersGrouper](http://dc-js.github.io/dc.js/docs/html/dc.capMixin.html#othersGrouper__anchor )不知道如何填充這些字段。如果你不知道如何爲此編寫一個自定義'othersGrouper',請問另一個問題。 – Gordon

+0

我想你誤會了。我知道沒有'remove_small_bins'也會發生這種情況。我只是在尋求如何解決其他問題的指導。 – talentedandrew