使用数据计数小部件显示不同项目的数量

display the number of distinct items with data count widget

我有一个项目列表,其中一些项目有几行是同一项目(同一项目的不同变体)。

我想统计一共存在多少条,选中了多少条。但是,当我使用数据计数小部件时,默认情况下它仅适用于行数,但无法弄清楚如何更改该行为。

var data=[{"item":"Category A","color":"blue"},
   {"item":"Category B","color":"blue"},
   {"item":"Category A","color":"pink"}];


var ndx           = crossfilter(data);

var dimension  = ndx.dimension(function(d) {return d.item;});
var all = ndx.groupAll();


 dc.dataCount('.dc-data-count')
    .dimension(ndx)
    .group(all)
    .html ({some: "%filter-count selected out of %total-count items <a class='btn btn-default btn-xs' href='javascript:dc.filterAll(); dc.renderAll();'  role='button'>Reset filters</a>", all: "%total-count items. Click on the graphs to filter them"})

根据 dc 文档,唯一可能的维度是整个数据集,唯一的组是 dimension.groupAll()

返回的那一组

是否有解决方法来计算除记录数以外的其他内容(例如 ndx.dimension(function(d) {return d.item;});?

好吧,它很丑陋,但您可以轻松破解它以产生其他行为。

如果您查看代码,它仅在维度上调用 .size(),并且仅在组上调用 .value()。这就是为什么文档说只有 groupAll 是合适的;常规组没有 .value().

https://github.com/dc-js/dc.js/blob/develop/src/data-count.js#L93-94

但它不会调用维度或组上的其他方法,因此您可以很容易地伪造它:

chart.dimension({size: function() { 
    return 42; // calculate something here
} });

使用两个数字显示小部件可能更合适,但这应该可行。