使用 dc.js numberDisplay 进行计算
Doing calculations with dc.js numberDisplay
我想根据 dc.js
中两个单独的 numberDisplays 的值进行进一步计算
这是代码,
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);
}
我想在另一个 div 中显示 numberRecordsTXN/numberRecordsND 的百分比。有什么办法可以实现吗?
编辑:解决代码;
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();
}
};
};
numberDisplay
的输入非常简单 - 它需要 groupAll object for its group
(confusing I know),这只是一个具有 .value()
方法的对象。
因此,您可以轻松地创建一个假的 groupAll,它从另外两个 groupAll 中产生一个百分比:
function groupall_percent(numerator, denominator) {
return {
value: function() {
return numerator.value() / denominator.value() * 100;
}
};
}
您将像示例中的其他 groupAll 一样使用生成的对象。
但请注意,您的示例与您的描述不符。百分比始终是一个计数除以另一个计数再乘以 100。但是您的示例是金额总和除以一个计数,即平均值。
要将此代码用于平均值,您需要删除 * 100
部分。
我想根据 dc.js
中两个单独的 numberDisplays 的值进行进一步计算这是代码,
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);
}
我想在另一个 div 中显示 numberRecordsTXN/numberRecordsND 的百分比。有什么办法可以实现吗?
编辑:解决代码;
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();
}
};
};
numberDisplay
的输入非常简单 - 它需要 groupAll object for its group
(confusing I know),这只是一个具有 .value()
方法的对象。
因此,您可以轻松地创建一个假的 groupAll,它从另外两个 groupAll 中产生一个百分比:
function groupall_percent(numerator, denominator) {
return {
value: function() {
return numerator.value() / denominator.value() * 100;
}
};
}
您将像示例中的其他 groupAll 一样使用生成的对象。
但请注意,您的示例与您的描述不符。百分比始终是一个计数除以另一个计数再乘以 100。但是您的示例是金额总和除以一个计数,即平均值。
要将此代码用于平均值,您需要删除 * 100
部分。