如何过滤 dc/crossfilter 维度中的多个值?
How to filter multiple values in a dc/crossfilter dimension?
假设我有这个数据和维度:
var data = [
{"fruit": "apple", "amount": "12"},
{"fruit": "orange", "amount": "6"},
{"fruit": "grape", "amount": "11"},
{"fruit": "melon", "amount": "26"},
{"fruit": "lemon", "amount": "15"}
]
var ndx = crossfilter(data);
var fruitDimension = ndx.dimension(function (d) {
return d.fruit;
});
...现在,我只想使用代码过滤 "apple"、"lemon" 和 "orange"。到目前为止,我正在尝试做类似的事情。
fruitDimension.filter(["apple","lemon","orange"])
...但并非全部有效。
我知道函数 #dimension.filterExact(value) 对一个值有效。
如果我应用#dimension.filter(value)传递一个向量作为参数,它处理它作为#dimension.filterRange (范围)
我找不到哪个过滤器适用于不同的值。
参考资料来自:https://github.com/square/crossfilter/wiki/API-Reference
有人提示我可以做什么来过滤维度的不同元素(不遵循范围顺序)?
提前致谢,
罗杰
为此,Crossfilter 需要自定义过滤器功能。 dc.js 供应一个。
应用于 dc.js 图表
如果您使用的是 dc 图表,您应该通过图表的 filter
函数应用过滤器,该函数与交叉过滤器维度过滤器具有不同的语法和语义:
chart.filter([["apple","lemon","orange"]]);
注意额外的一组括号。很奇怪吧?我不知道它是如何进化成这样的。此外,dc 将 切换 每个值,因此如果要替换过滤器,请使用 replaceFilter
而不是 filter
。
这在 filterHandler
function 中有记录,dc.js 将过滤器应用于交叉过滤器。
图表不知道交叉过滤器维度的直接变化:如果您使用图表的 .filter()
,图表将更新视觉选择。
直接使用交叉过滤器
如果您想将多值过滤器直接应用于交叉过滤器维度,这里有一个函数可以为值数组生成过滤器函数:
function multivalue_filter(values) {
return function(v) {
return values.indexOf(v) !== -1;
};
}
fruitDimension.filterFunction(multivalue_filter(["apple","lemon","orange"]));
假设我有这个数据和维度:
var data = [
{"fruit": "apple", "amount": "12"},
{"fruit": "orange", "amount": "6"},
{"fruit": "grape", "amount": "11"},
{"fruit": "melon", "amount": "26"},
{"fruit": "lemon", "amount": "15"}
]
var ndx = crossfilter(data);
var fruitDimension = ndx.dimension(function (d) {
return d.fruit;
});
...现在,我只想使用代码过滤 "apple"、"lemon" 和 "orange"。到目前为止,我正在尝试做类似的事情。
fruitDimension.filter(["apple","lemon","orange"])
...但并非全部有效。
我知道函数 #dimension.filterExact(value) 对一个值有效。
如果我应用#dimension.filter(value)传递一个向量作为参数,它处理它作为#dimension.filterRange (范围)
我找不到哪个过滤器适用于不同的值。
参考资料来自:https://github.com/square/crossfilter/wiki/API-Reference
有人提示我可以做什么来过滤维度的不同元素(不遵循范围顺序)?
提前致谢, 罗杰
为此,Crossfilter 需要自定义过滤器功能。 dc.js 供应一个。
应用于 dc.js 图表
如果您使用的是 dc 图表,您应该通过图表的 filter
函数应用过滤器,该函数与交叉过滤器维度过滤器具有不同的语法和语义:
chart.filter([["apple","lemon","orange"]]);
注意额外的一组括号。很奇怪吧?我不知道它是如何进化成这样的。此外,dc 将 切换 每个值,因此如果要替换过滤器,请使用 replaceFilter
而不是 filter
。
这在 filterHandler
function 中有记录,dc.js 将过滤器应用于交叉过滤器。
图表不知道交叉过滤器维度的直接变化:如果您使用图表的 .filter()
,图表将更新视觉选择。
直接使用交叉过滤器
如果您想将多值过滤器直接应用于交叉过滤器维度,这里有一个函数可以为值数组生成过滤器函数:
function multivalue_filter(values) {
return function(v) {
return values.indexOf(v) !== -1;
};
}
fruitDimension.filterFunction(multivalue_filter(["apple","lemon","orange"]));