dc.js + crossfilter 中的唯一值计数
unique values count in dc.js + crossfilter
我遇到了一个涉及 dc.js 和交叉过滤器的独特问题。我有一些数据需要使用 dc.js 支持的数字图表来显示。但是我发现数字图表的文档很少,因此发布了我的查询。
Here is the JSFiddle for what i have conceptualized so far.
我基本上想在方框 1 中显示唯一项目数,在本例中为 3,在方框 2 中显示唯一项目数,在本例中为 11,屏幕故障率为 2/15* 100 即 15.3%
目前我已经使用 jquery 完成了这项工作,但这只是一个 hack。我想要这些基于交叉 table 聚合的数字图表,以便我可以深入研究数据。
我遇到过减少计算计数的示例,但它们用于条形图,但在数字图表中,我们需要一个值访问器来显示数据。
有人可以帮我吗?
PS:
这是我写的 jquery 代码。不知道这是否有帮助。
$(document).ready(function() {
var baseURL = window.location.origin;
$.ajax({
url : baseURL + '/api/PlaceTable',
type : 'GET',
data : {},
async : true,
dataType : "json",
success : function(response) {
//Project Count
var projectIdCount = [];
for (i = 0; i < response.length; i++) {
if(response[i].Project != undefined){
if($.inArray(response[i].Project, projectIdCount) === -1){
projectIdCount.push(response[i].Project);
}
}
}
$('#number-box1').text(ProjectIdCount.length);
//Place Count
var placeIdCount = [];
for (i = 0; i < response.length; i++) {
if(response[i].Place != undefined){
if($.inArray(response[i].Place, placeIdCount) === -1){
placeIdCount.push(response[i].Place);
}
}
}
为了显示包含二进制值的列的 运行 总和,我使用了这段代码,它在数字图表中有效:
numberChart
.valueAccessor(function(x){ return +flag.groupAll().reduceCount().reduceSum(function(d) { return d.Flag; }).value();})
.group(ndx.groupAll());
失败百分比计算是一个单独的问题,我认为您已经在别处问过。要获得唯一计数,很容易在其值方法中创建一个 "fake groupAll" 其中 returns 唯一键的数量。
我们还需要过滤掉空垃圾箱,因为交叉过滤器不会自动执行此操作。
function bin_counter(group) {
return {
value: function() {
return group.all().filter(function(kv) {
return kv.value > 0;
}).length;
}
};
}
var projectGroup = project.group();
projectCount
.valueAccessor(function(x){ return x;})
.group(bin_counter(projectGroup));
更新 fiddle 此处,仍然忽略 failure% 部分:
http://jsfiddle.net/gordonwoodhull/vct0dzou/1/
我遇到了一个涉及 dc.js 和交叉过滤器的独特问题。我有一些数据需要使用 dc.js 支持的数字图表来显示。但是我发现数字图表的文档很少,因此发布了我的查询。
Here is the JSFiddle for what i have conceptualized so far.
我基本上想在方框 1 中显示唯一项目数,在本例中为 3,在方框 2 中显示唯一项目数,在本例中为 11,屏幕故障率为 2/15* 100 即 15.3%
目前我已经使用 jquery 完成了这项工作,但这只是一个 hack。我想要这些基于交叉 table 聚合的数字图表,以便我可以深入研究数据。
我遇到过减少计算计数的示例,但它们用于条形图,但在数字图表中,我们需要一个值访问器来显示数据。
有人可以帮我吗?
PS: 这是我写的 jquery 代码。不知道这是否有帮助。
$(document).ready(function() {
var baseURL = window.location.origin;
$.ajax({
url : baseURL + '/api/PlaceTable',
type : 'GET',
data : {},
async : true,
dataType : "json",
success : function(response) {
//Project Count
var projectIdCount = [];
for (i = 0; i < response.length; i++) {
if(response[i].Project != undefined){
if($.inArray(response[i].Project, projectIdCount) === -1){
projectIdCount.push(response[i].Project);
}
}
}
$('#number-box1').text(ProjectIdCount.length);
//Place Count
var placeIdCount = [];
for (i = 0; i < response.length; i++) {
if(response[i].Place != undefined){
if($.inArray(response[i].Place, placeIdCount) === -1){
placeIdCount.push(response[i].Place);
}
}
}
为了显示包含二进制值的列的 运行 总和,我使用了这段代码,它在数字图表中有效:
numberChart
.valueAccessor(function(x){ return +flag.groupAll().reduceCount().reduceSum(function(d) { return d.Flag; }).value();})
.group(ndx.groupAll());
失败百分比计算是一个单独的问题,我认为您已经在别处问过。要获得唯一计数,很容易在其值方法中创建一个 "fake groupAll" 其中 returns 唯一键的数量。
我们还需要过滤掉空垃圾箱,因为交叉过滤器不会自动执行此操作。
function bin_counter(group) {
return {
value: function() {
return group.all().filter(function(kv) {
return kv.value > 0;
}).length;
}
};
}
var projectGroup = project.group();
projectCount
.valueAccessor(function(x){ return x;})
.group(bin_counter(projectGroup));
更新 fiddle 此处,仍然忽略 failure% 部分: http://jsfiddle.net/gordonwoodhull/vct0dzou/1/