下面会生成一个条形图,显示x轴上的4个人以及他们在y轴上显示的次数。但是我想过滤这些数据只计算所有者的身份,如果他们有一个ID “A”
此外,是否可以使用按钮或onClick处理程序应用此过滤器,以便在按下按钮时仅过滤ID为“A”的数据。
请参阅下面的代码和jsfiddle:http://jsfiddle.net/chrisguzman/y9xt2/
var data = [{
Owner: "Alyssa",
ID: "A"
}, {
Owner: "Alyssa",
ID: "A"
}, {
Owner: "Alyssa",
ID: "A"
}, {
Owner: "Alyssa",
ID: "A"
}, {
Owner: "Alyssa",
ID: "B"
}, {
Owner: "Bob",
ID: "A"
}, {
Owner: "Bob",
ID: "A"
}, {
Owner: "Bob",
ID: "C"
}, {
Owner: "Bob",
ID: "C"
}, {
Owner: "Bob",
ID: "C"
}, {
Owner: "Bob",
ID: "C"
}, {
Owner: "Bob",
ID: "C"
}, {
Owner: "Bob",
ID: "D"
}, {
Owner: "Joe",
ID: "A"
}, {
Owner: "Joe",
ID: "A"
}, {
Owner: "Joe",
ID: "D"
}, {
Owner: "Joe",
ID: "D"
}, {
Owner: "Joe",
ID: "E"
}];
var ndx = crossfilter(data);
var XDimension = ndx.dimension(function (d) {
return d.Owner;
});
var YDimension = XDimension.group().reduceCount(function (d) {
return d.Owner;
});
dc.barChart("#Chart")
.width(480).height(300)
.dimension(XDimension)
.group(YDimension)
.centerBar(true)
.gap(56)
.x(d3.scale.ordinal().domain(XDimension))
.xUnits(dc.units.ordinal)
.xAxisLabel("Market Developer")
.yAxisLabel("Unique Counts")
.elasticY(true)
.xAxis().tickFormat(function (v) {
return v;
});
dc.renderAll();
答案 0 :(得分:1)
只需根据ndx创建另一个维度,并让它返回需要过滤的字段。然后,在dc.renderAll()之前,应用filter()和要过滤的键。
请参阅JS Fiddle:http://jsfiddle.net/chrisguzman/eL2XG/
var ndx = crossfilter(data);
var XDimension = ndx.dimension(function (d) {
return d.Owner;
});
var YDimension = XDimension.group().reduceCount(function (d) {
return d.Owner;
});
创建新维度
var FilterDimension = ndx.dimension(function (d) {
return d.ID;
});
//
dc.barChart("#Chart")
.width(480).height(300)
.dimension(XDimension)
.group(YDimension)
.centerBar(true)
.gap(56)
.x(d3.scale.ordinal().domain(XDimension))
.xUnits(dc.units.ordinal)
.xAxisLabel("Market Developer")
.yAxisLabel("Unique Counts")
.elasticY(true)
.xAxis().tickFormat(function (v) {
return v;
});
然后按新尺寸
进行过滤FilterDimension.filter("A");
dc.renderAll();
另外,请参阅https://groups.google.com/forum/#!msg/dc-js-user-group/UFxvUND7hmY/btbAjqIIzl8J以获得更深入的解释
这是因为
“除了关联维度的过滤器之外,分组与交叉过滤器的当前过滤器相交。因此,组方法仅考虑满足除此维度过滤器之外的每个过滤器的记录。因此,如果按类型和总计过滤付款的交叉过滤器,则group by total仅按类型观察过滤器。“
答案 1 :(得分:0)
我不确定您是否还需要知道如何将其添加到按钮中。 如果是这样,只需创建一个带有以下锚点的按钮。
<a class="filter" href="javascript:FilterDimension.filter("A");dc.redrawAll();" style="display: none;">filter</a>
<a class="reset" href="javascript:FilterDimension.filterAll();dc.redrawAll();" style="display: none;">reset</a>