【发布时间】:2015-12-21 19:52:22
【问题描述】:
我正在创建一个仪表盘,数据格式是这样的:
var data = [
{"id": 'CDE', "count": 1, "name": 'ajdkf', "type": 'E', "state": 'A'},
{"id": 'CDE', "count": 0, "name": 'ajdkf', "type": 'E', "state": 'A'},
{"id": 'CDE', "count": 0, "name": 'ajdkf', "type": 'E', "state": 'A'},
{"id": 'CDE', "count": 0, "name": 'ajdkf', "type": 'E', "state": 'A'},
{"id": 'HFG', "count": 1, "name": 'ajdkf', "type": 'E', "state": 'B'},
{"id": 'HFG', "count": 0, "name": 'ajdkf', "type": 'E', "state": 'B'},
{"id": 'HFG', "count": 0, "name": 'ajdkf', "type": 'E', "state": 'B'},
{"id": 'HFG', "count": 0, "name": 'ajdkf', "type": 'E', "state": 'B'},
{"id": 'ABF', "count": 1, "name": 'ghedw', "type": 'G', "state": 'A'},
{"id": 'ABF', "count": 0, "name": 'ghedw', "type": 'G', "state": 'A'},
{"id": 'ABF', "count": 0, "name": 'ghedw', "type": 'G', "state": 'A'},
{"id": 'ABF', "count": 0, "name": 'ghedw', "type": 'G', "state": 'A'},
{"id": 'DEF', "count": 1, "name": 'huiqs', "type": 'E', "state": 'A'},
{"id": 'DEF', "count": 0, "name": 'huiqs', "type": 'E', "state": 'A'},
{"id": 'DEF', "count": 0, "name": 'huiqs', "type": 'E', "state": 'A'},
{"id": 'DEF', "count": 0, "name": 'huiqs', "type": 'E', "state": 'A'},
...
{"id": 'ABC', "count": 1, "name": 'asbsd', "type": 'D', "state": 'B'},
{"id": 'ABC', "count": 0, "name": 'asbsd', "type": 'D', "state": 'B'},
{"id": 'ABC', "count": 0, "name": 'asbsd', "type": 'D', "state": 'B'},
{"id": 'ABC', "count": 0, "name": 'asbsd', "type": 'D', "state": 'B'}
];
我正在尝试创建一个如下所示的表:
Name State A Count State B Count
ajdkf 1 1
ghedw 1 0
huiqs 1 0
asbsd 0 1
我目前有:
<body>
<div style='clear:both;'>
<table id="Stats">
<thead>
<tr class="header">
<th> name </th>
<th> State A Count </th>
<th> State B Count </th>
</tr>
</thead>
</table>
</div>
</body>
<script>
...
var dataTable = dc.dataTable("#Stats");
var dataTableDim = ndx.dimension(function(d) {return d.name;});
dataTable
.dimension(dataTableDim)
.group(function(d) {return d.name})
.columns([
function(d) { return d.name; },
function(d) { if (d.state == 'A') {return +d.count;} else {return 0;} },
function(d) { if (d.state == 'B') {return +d.count;} else {return 0;} },
]);
...
</script>
它给了我一个看起来像这样的表格:
Name State A Count State B Count
asbsd
asbsd 0 1
asbsd 0 0
asbsd 0 0
asbsd 0 0
ajdkf
ajdkf 1 0
ajdkf 0 0
ajdkf 0 0
ajdkf 0 0
ajdkf 0 1
ajdkf 0 0
ajdkf 0 0
ajdkf 0 0
huiqs
huiqs 1 0
huiqs 0 0
huiqs 0 0
huiqs 0 0
ghedw
ghedw 0 0
ghedw 1 0
ghedw 0 0
ghedw 0 0
我需要做什么才能得到我想要的桌子?我希望在“状态 A”下有 2 个“列”(计数和百分比),状态 B 也一样。类似:
Name State A State B
Count Percent Count Percent
jsfiddle: https://jsfiddle.net/56hgjgsz/14/
我无法读取外部文件,所以我不得不将它们添加到 js.. 抱歉 :( (https://jsfiddle.net/56hgjgsz/29/)
这“有效”但不会减少表中的行并且顺序是向后的 -> 相同的地址但使用 /32/ 而不是 /14/ 或 /29/
【问题讨论】:
-
oof,jsfiddle中的“外部资源”部分是用来指向d3和dc的,不需要包含源代码!
-
由于某种原因它不起作用:/ 对此感到抱歉
-
确实拖慢了 fiddle 界面;工作起来一定很痛苦!在下面我更新的答案中也得到了修复。
-
在您的小提琴中,表格最初只有一个名称,而不是显示所有名称。选择状态 B 时,它也不会更新以包含其他人。我在下面的代码中添加了您的解决方案,并且该表没有删除“空”行。我很困惑为什么它不能正常工作。
-
我把 && 改成了 ||并修复了它:)
标签: javascript datatable dc.js