我已经成功地使用交叉过滤器,dc,d3组合为较小的数据集建立多元图表。
我目前的系统每天可容纳150万txns,我想使用上面的组合在这个大数据上显示维度图表(跨度超过6个月)。由于明显的原因,我不能把这个大小的数据推到前端。
txn数据具有秒级粒度,但在可视化中不需要此级别的粒度。如果txn数据在后端被卷到一天的粒度,并将基于天的聚合推到前端,那么它可以大大减少交给交叉过滤器的IO流量和数据的大小,dc和dc可以显示它的可视化魔力。
根据上面的想法,->,我决定通过使用下面的按查询组对来自不同维度的数据进行预聚合来减少数据的粒度,从而减少数据的粒度(这类似于交叉筛选器所做的事情,但在前端)。
选择TRUNC(DATELOGGED)作为DTLOGGED,代码,ACTION,计数(*)为TXNCOUNT,GROUPING_ID(TRUNC(DATELOGGED),CODE,ACTION)作为grouping_id从AAAA分组集合(TRUNC(DATELOGGED)),(TRUNC(DATELOGGED),CURR_CODE),(TRUNC(DATELOGGED),操作);
这些行的示例输出:通过以下方式进行聚合的元组/行(TRUNC(DATELOGGED,代码))将有一个公共的grouping_id 1,而by (DATELOGGED,grouping_id )将有一个公共的grouping_id 2
//group by DTLOGGED, CODE
{"DTLOGGED":"2013-08-03T07:00:00.000Z","CODE":"144","ACTION":"", "TXNCOUNT":69,"GROUPING_ID":1},
{"DTLOGGED":"2013-08-03T07:00:00.000Z","CODE":"376","ACTION":"", "TXNCOUNT":20,"GROUPING_ID":1},
{"DTLOGGED":"2013-08-04T07:00:00.000Z","CODE":"144","ACTION":"", "TXNCOUNT":254,"GROUPING_ID":1},
{"DTLOGGED":"2013-08-04T07:00:00.000Z","CODE":"376","ACTION":"", "TXNCOUNT":961,"GROUPING_ID":1},
//group by DTLOGGED, ACTION
{"DTLOGGED":"2013-08-03T07:00:00.000Z","CODE":"","ACTION":"ENROLLED_PURCHASE", "TXNCOUNT":373600,"GROUPING_ID":2},
{"DTLOGGED":"2013-08-03T07:00:00.000Z","CODE":"","ACTION":"UNENROLLED_PURCHASE", "TXNCOUNT":48978,"GROUPING_ID":2},
{"DTLOGGED":"2013-08-04T07:00:00.000Z","CODE":"","ACTION":"ENROLLED_PURCHASE", "TXNCOUNT":402311,"GROUPING_ID":2},
{"DTLOGGED":"2013-08-04T07:00:00.000Z","CODE":"","ACTION":"UNENROLLED_PURCHASE", "TXNCOUNT":54910,"GROUPING_ID":2},
//group by DTLOGGED
{"DTLOGGED":"2013-08-03T07:00:00.000Z","CODE":"","ACTION":"", "TXNCOUNT":460732,"GROUPING_ID":3},
{"DTLOGGED":"2013-08-04T07:00:00.000Z","CODE":"","ACTION":"", "TXNCOUNT":496060,"GROUPING_ID":3}];问题:这些行是dis连接的,即不像通常的行,其中每一行都有一个行中的代码和操作的有效值。在其中一个图中选择后,重绘效果要么删除其他图形,要么不显示它们上的数据。请给我任何疑难解答的帮助或建议更好的方法来解决这个问题?
http://jsfiddle.net/universallocalhost/5qJjT/3/
发布于 2014-03-21 18:48:16
所以这个问题上有几件事,所以我试着把它们分开:
交叉过滤器与整洁的数据一起工作
http://vita.had.co.nz/papers/tidy-data.pdf
这意味着您需要想出一种简单的方法来填充正在看到的空值(如果需要的话,在对数据的初始查询中,省略空值。如果您想得到真正的花哨,您甚至可以根据其他数据推断空值。无论您的解决方案是什么,您都需要在将数据放入交叉过滤器之前使其整洁。
组与过滤操作
txnVolByCurrcode = txnByCurrcode.group().reduceSum(function(d) {
if(d.GROUPING_ID ===1) {
return d.TXNCOUNT;
} else {
return 0;
}
});这是一个过滤操作完成的缩减。这是你们应该分开的东西。允许在其他地方(在可视化、交叉过滤器本身或数据查询中)进行筛选。
这意味着你的减缩量变成了:
var txnVolByCurrcode = txnByCurrcode.group().reduceSum(function(d) {
return d.TXNCOUNT;
});如果您希望用户选择要显示的组:
var groupId = cfdata.dimension(function(d) { return d.GROUPING_ID; });
var groupIdGroup = groupId.group(); // this is an interesting name
dc.pieChart("#group-chart")
.width(250)
.height(250)
.radius(125)
.innerRadius(50)
.transitionDuration(750)
.dimension(groupId)
.group(groupIdGroup)
.renderLabel(true);有关此工作的示例:http://jsfiddle.net/b67pX/
https://stackoverflow.com/questions/22468490
复制相似问题