Выполнение расчетов с помощью dc.js numberDisplay - PullRequest
1 голос
/ 30 апреля 2019

Я хотел бы сделать дальнейшие вычисления из значений двух отдельных числовых дисплеев в dc.js

enter image description here

Вот код,

function makeGraphs(data) {

xf = crossfilter(data);
all = xf.groupAll();
txntypeDim = xf.dimension(function(d) { return d.txntype; });
sumAllTXN = txntypeDim.groupAll().reduceSum(function(d) {return d.txnamount;});

numberRecordsND = dc.numberDisplay("#number-records-nd",groupname)
numberRecordsTXN = dc.numberDisplay("#number-records-txn",groupname)

   numberRecordsND
    .formatNumber(d3.format("d"))
    .valueAccessor(function(d){return d; })
    .group(all);

   numberRecordsTXN
    .formatNumber(function(d){return d; })
    .valueAccessor( function(d) { return d; } )
    .group(sumAllTXN);

dc.renderAll(groupname);

}

Я хочу показать процент числа numberRecordsTXN / numberRecordsND в другом div. Есть ли способ добиться этого?

Редактировать : код решения;

function makeGraphs(data) {

xf = crossfilter(data);
all = xf.groupAll();
txntypeDim = xf.dimension(function(d) { return d.txntype; });
sumAllTXN = txntypeDim.groupAll().reduceSum(function(d) {return d.txnamount;});

numberRecordsND = dc.numberDisplay("#number-records-nd",groupname)
numberRecordsTXN = dc.numberDisplay("#number-records-txn",groupname)
numberRecordsAVG = dc.numberDisplay("#number-records-avg",groupname)

   numberRecordsND
    .formatNumber(d3.format("d"))
    .valueAccessor(function(d){return d; })
    .group(all);

   numberRecordsTXN
    .formatNumber(function(d){return d; })
    .valueAccessor( function(d) { return d; } )
    .group(sumAllTXN);

   numberRecordsAVG
   .formatNumber(d3.format("d"))
   .valueAccessor(function(d){return d; })
   .group(groupall_percent(numberRecordsTXN, numberRecordsND));

dc.renderAll(groupname);

};

function groupall_percent(numerator, denominator) {
  return {
    value: function() {
      return numerator.value() / denominator.value();
    }
  };
};

1 Ответ

1 голос
/ 03 мая 2019

Вход в numberDisplay действительно прост - он ожидает groupAll объект для его group ( сбивает с толку, я знаю ), и это просто объект с.value() method.

Итак, вы можете легко создать фальшивую groupAll, которая выдает процент от двух других groupAlls:

function groupall_percent(numerator, denominator) {
  return {
    value: function() {
      return numerator.value() / denominator.value() * 100;
    }
  };
}

Вы будете использовать результирующий объект так же, как и другие groupAlls вваш пример.

Но учтите, что ваш пример не соответствует вашему описанию.Процент - это всегда число, деленное на другое число и умноженное на 100. Но ваш пример - это сумма сумм, разделенная на число, которое является средним.

Чтобы использовать этот код в среднем, вы удалите часть * 100.

...