我目前正致力于在制表器上显示数据,我想根据百分比值显示数据 所以,我做了那部分,但现在使用 bottomCalc
对值求和,它显示总百分比,而不是总百分比我想显示原始值,但想不出任何逻辑来做到这一点。我有什么办法可以做到吗??
我想要的总数
正如您在图像中看到的,上面有单选按钮,我可以从中更改制表器数据。 当我点击单选按钮时,我得到了这个
这里我总共得到 100 的百分比,但我想显示这些值它在上面的图片中显示为总值。
我为此所做的代码是:
initTable = function (data, modified) {
if (!modified) window.initialTableData = data;
if (!modified) window.initialFilters = data[0].Query.Filters;
if (data && Object.keys(data[0])) {
let cols = [];
Object.keys(data[0]) ? Object.keys(data[0]).map((v) => {
if (v != "Geom" && v != "Query" && v != "Additional") {
if (v != "District" && document.getElementById("RowWise").checked == false) {
cols.push({
title: v, bottomCalc: "sum", field: v, formatter: function (cell) {
var value = cell.getValue();
value = isNaN(value) ? value : numberWithCommas(value);
if (typeof (cell.getField) != 'undefined') {
if (checkKeyInFilters(cell.getField(), window.initialFilters)) {
return "<span class='field-color'>" + value + "</span>";
} else {
return "<span>" + value + "</span>";
}
}
}, headerMenu: headerMenu,
titleFormatter: function (cell) {
if (checkKeyInFilters(cell.getValue(), window.initialFilters)) {
$(cell.getElement()).addClass("field-color");
}
return cell.getValue();
}
//topCalc: (!checkKeyInFilters(v, data[0].Query.Filters) ? "sum" : undefined)
});
}
else {
cols.push({
title: v, field: v, formatter: function (cell) {
var value = cell.getValue();
value = isNaN(value) ? value : numberWithCommas(value);
if (typeof (cell.getField) != 'undefined') {
if (checkKeyInFilters(cell.getField(), window.initialFilters)) {
return "<span class='field-color'>" + value + "</span>";
} else {
return "<span>" + value + "</span>";
}
}
}, headerMenu: headerMenu,
titleFormatter: function (cell) {
if (checkKeyInFilters(cell.getValue(), window.initialFilters)) {
$(cell.getElement()).addClass("field-color");
}
return cell.getValue();
}
//topCalc: (!checkKeyInFilters(v, data[0].Query.Filters) ? "sum" : undefined)
});
}
}
return v;
}) : undefined;
//cols.push({ title: "Total", field:"Total" })
window.tableAnalyis = new Tabulator("#analysis-table", {
layout: "fitColumns",
responsiveLayout: "collapse",
data: data,
columns: cols,
});
}
对于我所做的百分比计算
changeCalcType = function (type) {
if (!window.initialTableData) return;
window.toggleLoader(true, "Please wait..");
setTimeout(function () {
const data2 = window.initialTableData;
var C_Sum = {};
pdata = [];
var keys = Object.keys(data2[0]);
if (type == 'numberwise') {
pdata = window.initialTableData;
}
else if (type == 'rowwise') {
for (i = 0; i < data2.length; i++) {
for (j = 0; j < keys.length; j++) {
if (isNaN(data2[i][keys[j]]) == false && keys[j] != 'Total' && keys[j] != 'Pincode') {
if (C_Sum[i]) {
C_Sum[i] += data2[i][keys[j]];
} else {
C_Sum[i] = data2[i][keys[j]];
}
}
}
}
for (i = 0; i < data2.length; i++) {
let _dt = {};
for (j = 0; j < keys.length; j++) {
if (isNaN(data2[i][keys[j]]) == true || keys[j] == 'Total' || keys[j] == 'Pincode') {
_dt[keys[j]] = data2[i][keys[j]];
} else {
_dt[keys[j] + " (%)"] = Math.round((data2[i][keys[j]] / C_Sum[i]) * 100);
}
}
_dt["Total"] = C_Sum[i]
pdata.push(_dt);
}
}
else if (type == 'columnwise') {
let S_Sum = {}
for (i = 0; i < data2.length; i++) {
for (j = 0; j < keys.length; j++) {
if (isNaN(data2[i][keys[j]]) == false && keys[j] != 'Total' && keys[j] != 'Pincode') {
if (C_Sum[keys[j]]) {
C_Sum[keys[j]] += data2[i][keys[j]];
} else {
C_Sum[keys[j]] = data2[i][keys[j]];
}
}
}
}
for (i = 0; i < data2.length; i++) {
let _dt = {};
for (j = 0; j < keys.length; j++) {
if (isNaN(data2[i][keys[j]]) == true || keys[j] == 'Total' || keys[j] == 'Pincode') {
_dt[keys[j]] = data2[i][keys[j]];
} else {
_dt[keys[j] + " (%)"] = Math.round((data2[i][keys[j]] / C_Sum[keys[j]]) * 100);
}
}
pdata.push(_dt);
}
}
else if (type == 'totalwise') {
let S_Sum = {};
for (i = 0; i < data2.length; i++) {
for (j = 0; j < keys.length; j++) {
if (isNaN(data2[i][keys[j]]) == false && keys[j] != 'Total' && keys[j] != 'Pincode') {
if (C_Sum[keys[j]]) {
C_Sum[keys[j]] += data2[i][keys[j]];
} else {
C_Sum[keys[j]] = data2[i][keys[j]];
}
}
if (isNaN(data2[i][keys[j]]) == false && keys[j] != 'Total' && keys[j] != 'Pincode') {
if (S_Sum[i]) {
S_Sum[i] += data2[i][keys[j]];
} else {
S_Sum[i] = data2[i][keys[j]];
}
}
}
}
for (i = 0; i < data2.length; i++) {
let _dt = {};
for (j = 0; j < keys.length; j++) {
if (isNaN(data2[i][keys[j]]) == true || keys[j] == 'Total' || keys[j] == 'Pincode') {
_dt[keys[j]] = data2[i][keys[j]];
} else {
let _totvalue = Object.values(C_Sum).reduce((a, b) => a + b, 0);
_dt[keys[j] + " (%)"] = Math.round((data2[i][keys[j]] / _totvalue) * 100);
}
}
_dt["Total"] = S_Sum[i]
pdata.push(_dt);
}
}
initTable(pdata, true);
window.toggleLoader(false);
}, 100);
}
请帮我度过难关。
答案 0 :(得分:0)
我终于明白了,不是通过 tabulator 内置函数,而是在 制表并获取总值作为临时解决方案
代码有点像:
else if (type == 'columnwise') {
let data3 = window.initialTableData;
for (i = 0; i < data2.length; i++) {
for (j = 0; j < keys.length; j++) {
if (isNaN(data2[i][keys[j]]) == false && keys[j] != 'Total' && keys[j] != 'Pincode') {
if (C_Sum[keys[j]]) {
C_Sum[keys[j]] += data2[i][keys[j]];
} else {
C_Sum[keys[j]] = data2[i][keys[j]];
}
}
}
}
for (i = 0; i < (data2.length); i++) {
let _dt = {};
for (j = 0; j < keys.length; j++) {
if (isNaN(data2[i][keys[j]]) == true || keys[j] == 'Total' || keys[j] == 'Pincode') {
_dt[keys[j]] = data2[i][keys[j]];
} else {
_dt[keys[j] + " (%)"] = Math.round((data2[i][keys[j]] / C_Sum[keys[j]]) * 100);
}
}
pdata.push(_dt);
}
let isTotalColAdded = false;
let _dt = {};
for (j = 0; j < keys.length; j++) {
if (isNaN(data2[0][keys[j]]) == true || keys[j] == 'Total' || keys[j] == 'Pincode') {
_dt[keys[j]] = data2[0][keys[j]];
if (!isTotalColAdded) _dt[keys[j]] = "Total";
} else {
_dt[keys[j] + " (%)"] = C_Sum[keys[j]];
}
}
pdata.push(_dt);
}