Построение агрегированных данных с подколонками в dc.js - PullRequest
1 голос
/ 27 сентября 2019

У меня есть данные в форме:

data = [..., {id:X,..., turnover:[[2015,2017,2018],[2000000,3000000,2800000]]}, ...];

Моя цель состоит в том, чтобы построить год по оси X против среднего оборота по всем компаниям, выбранным в настоящее время с помощью перекрестного фильтра по оси Y.

Годы, зарегистрированные для каждой компании, являются непоследовательными, но всегда должно быть три года.

Если это поможет, я могу реорганизовать данные в форме:

data = [..., {id:X,..., turnover:{2015:2000000, 2017:3000000, 2018:2800000}}, ...];

Если бы мне удалось еще больше реорганизовать данные, чтобы они выглядели так:

[...{id:X, ..., year:2015, turnover:2000000},{id:X,...,year:2017,turnover:3000000},{id:X,...,year:2018,turnover:2800000}]; 

Тогда этот вопрос даст решение.

Но разделение компаний на отдельныестроки не имеют смысла со всем остальным, что я делаю.

1 Ответ

1 голос
/ 27 сентября 2019

Если я не ошибаюсь, у вас есть то, что я называю "измерение тэга" , то есть измерение с ключами массива.

Вы хотите, чтобы каждая строка записывалась один раз для каждого годаон содержит, но вы только хотите, чтобы он влиял на это измерение.Вы не хотите наблюдать строку несколько раз в других измерениях, поэтому не хотите сглаживать.

При исходном формате данных определение вашего измерения будет выглядеть примерно так:

var yearsDimension = cf.dimension(d => d.turnover[0], true);

Функция ключа для измерения тега должна возвращать массив, в данном случае лет.

Эта функция все еще довольно новая, как и кроссфильтр, и пара minor ошибок были найдены в этом году.Этих ошибок должно быть легко избежать.Эта функция получила широкое применение, и никаких серьезных ошибок обнаружено не было.

Всегда остерегайтесь размеров тегов, поскольку любые агрегации составят более 100% - в вашем случае 300%.Но если вы проводите средние показатели по компаниям в течение года, это не должно быть проблемой.

...