D3.js 交叉滤波器维数滤波

D3.js 交叉滤波器维数滤波,d3.js,dc.js,crossfilter,D3.js,Dc.js,Crossfilter,我正在做dc.js图表。我已经摆好了小提琴 我有以下数据: 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"},

我正在做dc.js图表。我已经摆好了小提琴

我有以下数据:

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,图表应该显示值总和大于60的所有ID


例如,状态饼图应仅显示值大于60的切片,即仅显示A和D。

交叉筛选本身不会按值筛选。如果您仔细考虑一下,在数据集进行缩减之前,按行过滤数据集并将其缩减为某个值将是相当复杂的

但我认为你不是在寻找过滤,而是不显示太小的切片。你可以用一个简单的方法来做。这是一个后处理步骤,不会更改交叉过滤器中包含的数据,只是更改您选择显示的项目

这是一个非常相似的“删除空箱子”假组。但我们将寻找最小值,而不是值0

function remove_small_bins(source_group, lower_bound) {
    return {
        all:function () {
            return source_group.all().filter(function(d) {
                return d.value > lower_bound;
            });
        }
    };
}
将其应用到您的示例中(fiddle数据与上面显示的数据略有不同),首先我们需要查看
d.value.orderValue,而不仅仅是
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)

你的副词:

我稍微编辑了一下你的问题,因为你说的是“大于或等于60”,但为了让你的例子起作用,你的意思必须是“大于60”。当然,它只是稍微改变了答案。谢谢你的回答。但是当我在这些饼图上添加slicecap时,为什么它会显示NaN…这与这个问题无关-在未启用
移除小容器的情况下也会发生。您正在从
label
函数中的简化数据中提取自定义字段,默认值不知道如何填充这些字段。如果您不知道如何为此编写自定义
othersGroup
,请问另一个问题。我想您误解了。我知道在没有
移除小垃圾箱的情况下也会发生这种情况。我只是想请您指导如何解决其他分组问题。当有特定问题和特定答案时,堆栈溢出效果最好。请尝试一下
othersGrouper
,如果你想不出来,就开始另一个问题。这样,当人们在搜索关于为其他部分正确设置标签的信息时,他们会发现一个明确的问题,而不是隐藏在评论中的东西。