Crossfilter возвращает сумму прироста по дате

#crossfilter

#crossfilter

Вопрос:

Я впервые использую crossfilter для создания информационной панели, но я застрял с проблемой.

Мне нужно составить график, который вернет объем используемого хранилища по измерению даты. Поскольку это съемное хранилище, веб-сервис, который у меня есть, дает мне только ежедневное потребляемое хранилище, а не общее количество.

Так что, если у меня есть что-то подобное:

 [
  {"jobName": "A", "dataLength": 368, "date": "2019-01-05"},
  {"jobName": "A", "dataLength": 1420, "date": "2019-01-06"},
  {"jobName": "B", "dataLength": 553, "date": "2019-01-06"},
  {"jobName": "A", "dataLength": 156, "date": "2019-01-08"},
  {"jobName": "B", "dataLength": 937, "date": "2019-01-08"},
  {"jobName": "B", "dataLength": 423, "date": "2019-01-09"},
  {"jobName": "B", "dataLength": 223, "date": "2019-01-10"}
]
  

Он вернет что-то вроде этого:

 [
  {"key": "2019-01-05", "value":  368},
  {"key": "2019-01-06", "value":  2341},
  {"key": "2019-01-08", "value":  3434},
  {"key": "2019-01-09", "value":  3857},
  {"key": "2019-01-10", "value":  4080}
]
  

Есть ли у кого-нибудь какие-нибудь идеи о том, как этого добиться?

Спасибо

Ответ №1:

Вы можете использовать поддельную группу для накопления значений по мере чтения группы:

 function accumulate_group(source_group) {
    return {
        all:function () {
            var cumulate = 0;
            return source_group.all().map(function(d) {
                cumulate  = d.value;
                return {key:d.key, value:cumulate};
            });
        }
    };
}
var group = dimension.group().reduceSum(d => d.dataLength);
chart.group(accumulate_group(group));
  

Спасибо @Xavier Dutoit за это!

Комментарии:

1. Большое тебе спасибо @Gordon!