С, например, данныеdc.js Graphing Метки
var data = [
{Name: 'Mr A', Spent: 40, Year: 2011, tags: ['a', 'b', 'c']},
{Name: 'Mr B', Spent: 10, Year: 2011, tags: ['c']},
{Name: 'Mr C', Spent: 40, Year: 2011, tags: ['a']},
{Name: 'Mr A', Spent: 70, Year: 2012, tags: ['c', 'b']},
{Name: 'Mr B', Spent: 20, Year: 2012, tags: ['b']},
{Name: 'Mr B', Spent: 50, Year: 2013, tags: ['a', 'b', 'c']},
{Name: 'Mr C', Spent: 30, Year: 2013, tags: ['a', 'b']}
];
я пытаюсь создать dc.js таблицу строк, которые будут показывать каждый уникальный тег и позволит мне уменьшить значения графически на каждой метке. До сих пор у меня есть этот код, который позволяет мне сократить теги их затраченных сумм:
function reduceAdd(p, v) {
v.tags.forEach (function(val, idx) {
p[val] = (p[val] || 0) + v.Spent;
});
return p;
}
function reduceRemove(p, v) {
v.tags.forEach (function(val, idx) {
p[val] -= v.Spent;
});
return p;
}
function reduceInitial() {
return {};
}
var tagsDim = ndx.dimension(function(d) {return d.tags; });
tagsGroup = tagsDim.groupAll().reduce(reduceAdd, reduceRemove, reduceInitial);
console.log(tagsGroup.value())
'{ a: 160, b: 210, c: 170 }'
Это дает уменьшенные суммы правильно. Но, поскольку это объект groupAll, dc.js не может его отобразить, поэтому я не совсем уверен, куда идти отсюда. Возможно ли даже dc.js получить доступ к тегам в массиве. Было бы лучше рассчитать суммы по-другому?
Вы будете в конечном итоге с не непересекающихся групп таким образом, - так как строка может принадлежать как много групп, есть теги, строки будут посчитаны несколько раз , Также любая другая диаграмма, которая выполняет обычные суммы по строкам, получит другую сумму. Это то, что вы хотите? – Gordon
Довольно уверенный кроссфильтр не поддерживает это, поэтому вам придется реализовать его самостоятельно. Достаточно легко адаптировать группы, которые вы получаете как [поддельную группу] (https://github.com/dc-js/dc.js/wiki/FAQ#filter-the-data-before-its-charted); сложная часть будет писать функцию [фильтр] (https://github.com/square/crossfilter/wiki/API-Reference#dimension_filterFunction). – Gordon
Спасибо @ Gordon, я попробую это. –