dtable-statistic 4.0.11 → 4.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/calculator/workers/pivot-table-calculator-worker.js +15 -7
- package/es/stat-view/pie-chart.js +0 -2
- package/es/stat-view/pivot-table/index.js +2 -2
- package/es/stat-view/pivot-table/two-dimension-table.js +5 -93
- package/es/stat-view/ring-chart.js +0 -2
- package/es/utils/common-utils.js +25 -2
- package/es/utils/export-table-utils.js +523 -306
- package/es/utils/pivot-table.js +91 -0
- package/es/utils/sql-utils.js +18 -0
- package/package.json +3 -3
|
@@ -56,9 +56,8 @@ function calculateOneDimensionTable(chart, value, username, userId) {
|
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
} else {
|
|
59
|
-
pivotRowIndex = pivot_rows.findIndex(function (
|
|
60
|
-
|
|
61
|
-
return resName === null && name === null || resName === undefined && name === undefined || resName === 0 && name === 0 || resName === name;
|
|
59
|
+
pivotRowIndex = pivot_rows.findIndex(function (pivotRow) {
|
|
60
|
+
return isSameName(pivotRow.name, name);
|
|
62
61
|
});
|
|
63
62
|
updateOneDimensionRows(pivot_rows, pivotRowIndex, name, row);
|
|
64
63
|
}
|
|
@@ -99,7 +98,8 @@ function calculateOneDimensionTable(chart, value, username, userId) {
|
|
|
99
98
|
return {
|
|
100
99
|
pivot_columns_total: pivot_columns_total,
|
|
101
100
|
pivot_rows: pivot_rows,
|
|
102
|
-
pivot_columns: pivot_columns
|
|
101
|
+
pivot_columns: pivot_columns,
|
|
102
|
+
formulaRows: formulaRows
|
|
103
103
|
};
|
|
104
104
|
}
|
|
105
105
|
function updateOneDimensionRows(pivot_rows, index, name, row) {
|
|
@@ -286,9 +286,8 @@ function calculateTwoDimensionTable(chart, value, username, userId) {
|
|
|
286
286
|
});
|
|
287
287
|
}
|
|
288
288
|
} else {
|
|
289
|
-
pivotRowIndex = pivot_rows.findIndex(function (
|
|
290
|
-
|
|
291
|
-
return resName === null && name === null || resName === undefined && name === undefined || resName === 0 && name === 0 || resName === name;
|
|
289
|
+
pivotRowIndex = pivot_rows.findIndex(function (pivotRow) {
|
|
290
|
+
return isSameName(pivotRow.name, name);
|
|
292
291
|
});
|
|
293
292
|
updateTwoDimensionRows(pivot_rows, pivot_columns, pivotRowIndex, name, row, isRowGroupbyColumnDataAsAnArray, cellValueForColumn);
|
|
294
293
|
}
|
|
@@ -403,6 +402,15 @@ function updateTwoDimensionRows(pivot_rows, pivot_columns, index, name, row, isC
|
|
|
403
402
|
});
|
|
404
403
|
}
|
|
405
404
|
}
|
|
405
|
+
function isSameName(prevName, currName) {
|
|
406
|
+
if (isNumber(prevName) && isNumber(currName)) {
|
|
407
|
+
return prevName === currName;
|
|
408
|
+
}
|
|
409
|
+
if (!prevName && !currName) {
|
|
410
|
+
return prevName === null && currName === null || prevName === undefined && currName === undefined || isNaN(prevName) && isNaN(currName);
|
|
411
|
+
}
|
|
412
|
+
return prevName === currName;
|
|
413
|
+
}
|
|
406
414
|
function isSameGroup(isColumnDataAsAnArray, source, target) {
|
|
407
415
|
if (isColumnDataAsAnArray) {
|
|
408
416
|
return (!source || source.length === 0) && !target || source && source.includes(target);
|
|
@@ -87,8 +87,6 @@ var PieChart = /*#__PURE__*/function (_BaseChart) {
|
|
|
87
87
|
var name = obj.name;
|
|
88
88
|
if (!obj.name && typeof obj.name !== 'number') {
|
|
89
89
|
name = intl.get(EMPTY_NAME);
|
|
90
|
-
} else if (obj.name === 'Others') {
|
|
91
|
-
name = intl.get('Others');
|
|
92
90
|
}
|
|
93
91
|
return {
|
|
94
92
|
name: name,
|
|
@@ -77,10 +77,10 @@ var PivotTable = /*#__PURE__*/function (_BaseChart) {
|
|
|
77
77
|
var summaryMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : SUMMARY_TYPE.COUNT;
|
|
78
78
|
if (!summaryColumn || !summaryColumn.type) return summaryValue;
|
|
79
79
|
if (!summaryValue && summaryValue !== 0) return summaryValue;
|
|
80
|
-
if (summaryMethod.toUpperCase() === 'DISTINCT_VALUES') return summaryValue;
|
|
80
|
+
if (summaryMethod && summaryMethod.toUpperCase() === 'DISTINCT_VALUES') return summaryValue;
|
|
81
81
|
var data = summaryColumn.data;
|
|
82
82
|
if (TIME_COLUMN_LIST.includes(summaryColumn.type)) {
|
|
83
|
-
if (typeof summaryValue !== 'string') return
|
|
83
|
+
if (typeof summaryValue !== 'string') return '';
|
|
84
84
|
// The date returned by db carries T and Z, so that there is a time difference in data formatting
|
|
85
85
|
var _ref = data || {},
|
|
86
86
|
format = _ref.format;
|
|
@@ -6,10 +6,11 @@ import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
|
6
6
|
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
7
7
|
import React, { PureComponent } from 'react';
|
|
8
8
|
import intl from 'react-intl-universal';
|
|
9
|
-
import {
|
|
9
|
+
import { isNumber, TableUtils, Views } from 'dtable-store';
|
|
10
10
|
import PivotTableDisplayName from './pivot-table-display-name';
|
|
11
11
|
import { isMobile } from '../../utils';
|
|
12
|
-
import {
|
|
12
|
+
import { getPivotTableSummaryTotal } from '../../utils/pivot-table';
|
|
13
|
+
import { STATISTICS_COUNT_TYPE, TITLE_TOTAL } from '../../constants';
|
|
13
14
|
import styles from './statistic-pivot-table.module.css';
|
|
14
15
|
var TwoDimensionTable = /*#__PURE__*/function (_PureComponent) {
|
|
15
16
|
_inherits(TwoDimensionTable, _PureComponent);
|
|
@@ -59,95 +60,6 @@ var TwoDimensionTable = /*#__PURE__*/function (_PureComponent) {
|
|
|
59
60
|
}
|
|
60
61
|
return 0;
|
|
61
62
|
};
|
|
62
|
-
_this.getCellValueFromRow = function (row, formulaRow, columnType, columnKey, sqlKey, isSqlQuery) {
|
|
63
|
-
if (!isSqlQuery) {
|
|
64
|
-
if (FORMULA_COLUMN_TYPES_MAP[columnType]) {
|
|
65
|
-
var cellValue = formulaRow[columnKey];
|
|
66
|
-
return Array.isArray(cellValue) ? cellValue[0] : cellValue;
|
|
67
|
-
}
|
|
68
|
-
return row[columnKey];
|
|
69
|
-
}
|
|
70
|
-
return row[sqlKey];
|
|
71
|
-
};
|
|
72
|
-
_this.getSummaryTotal = function (summaryColumnType, summaryColumnKey, sqlKey, summaryType, summaryMethod, rows, formulaRows, isSqlQuery) {
|
|
73
|
-
if (summaryType === STATISTICS_COUNT_TYPE.COUNT) {
|
|
74
|
-
return rows.length;
|
|
75
|
-
}
|
|
76
|
-
if (summaryType !== STATISTICS_COUNT_TYPE.ADVANCED) {
|
|
77
|
-
return 0;
|
|
78
|
-
}
|
|
79
|
-
switch (summaryMethod) {
|
|
80
|
-
case SUMMARY_METHOD_MAP.Distinct_values:
|
|
81
|
-
{
|
|
82
|
-
var count = 0;
|
|
83
|
-
var existMap = {};
|
|
84
|
-
rows.forEach(function (row) {
|
|
85
|
-
var formulaRow = formulaRows && formulaRows[row._id];
|
|
86
|
-
var cellValue = _this.getCellValueFromRow(row, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
87
|
-
if (!cellValue) {
|
|
88
|
-
if (cellValue === 0) {
|
|
89
|
-
cellValue = '0';
|
|
90
|
-
} else {
|
|
91
|
-
cellValue = !!cellValue;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (!existMap[cellValue]) {
|
|
95
|
-
existMap[cellValue] = true;
|
|
96
|
-
count++;
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
return count;
|
|
100
|
-
}
|
|
101
|
-
case SUMMARY_METHOD_MAP.Sum:
|
|
102
|
-
case SUMMARY_METHOD_MAP.Mean:
|
|
103
|
-
{
|
|
104
|
-
var sum = 0;
|
|
105
|
-
var validNumbersCount = 0;
|
|
106
|
-
rows.forEach(function (row) {
|
|
107
|
-
var formulaRow = formulaRows && formulaRows[row._id];
|
|
108
|
-
var cellValue = _this.getCellValueFromRow(row, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
109
|
-
if (isNumber(cellValue)) {
|
|
110
|
-
validNumbersCount++;
|
|
111
|
-
sum += cellValue;
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
if (summaryMethod === SUMMARY_METHOD_MAP.Sum) {
|
|
115
|
-
sum = Number.parseFloat(sum.toFixed(8));
|
|
116
|
-
} else if (summaryMethod === SUMMARY_METHOD_MAP.Mean) {
|
|
117
|
-
sum = validNumbersCount === 0 ? 0 : Number.parseFloat((sum / validNumbersCount).toFixed(8));
|
|
118
|
-
}
|
|
119
|
-
return sum;
|
|
120
|
-
}
|
|
121
|
-
case SUMMARY_METHOD_MAP.Max:
|
|
122
|
-
case SUMMARY_METHOD_MAP.Min:
|
|
123
|
-
{
|
|
124
|
-
if (rows.length === 0) {
|
|
125
|
-
return 0;
|
|
126
|
-
}
|
|
127
|
-
var result = rows.reduce(function (current, next) {
|
|
128
|
-
var currentFormulaRow = formulaRows && formulaRows[current._id];
|
|
129
|
-
var nextFormulaRow = formulaRows && formulaRows[next._id];
|
|
130
|
-
var currentValue = _this.getCellValueFromRow(current, currentFormulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
131
|
-
var nextValue = _this.getCellValueFromRow(next, nextFormulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
132
|
-
if (!nextValue && nextValue !== 0) {
|
|
133
|
-
return current;
|
|
134
|
-
}
|
|
135
|
-
var isNextGreater = currentValue < nextValue;
|
|
136
|
-
if (summaryMethod === SUMMARY_METHOD_MAP.Min) {
|
|
137
|
-
return isNextGreater ? current : next;
|
|
138
|
-
} else {
|
|
139
|
-
return isNextGreater ? next : current;
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
var formulaRow = formulaRows && formulaRows[result._id];
|
|
143
|
-
return _this.getCellValueFromRow(result, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
144
|
-
}
|
|
145
|
-
default:
|
|
146
|
-
{
|
|
147
|
-
return 0;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
63
|
_this.getCells = function (row, summaryColumn) {
|
|
152
64
|
var _this$props2 = _this.props,
|
|
153
65
|
pivotResult = _this$props2.pivotResult,
|
|
@@ -172,7 +84,7 @@ var TwoDimensionTable = /*#__PURE__*/function (_PureComponent) {
|
|
|
172
84
|
sqlKey = column.sqlKey,
|
|
173
85
|
method = column.method;
|
|
174
86
|
if (Array.isArray(rowData)) {
|
|
175
|
-
var sum =
|
|
87
|
+
var sum = getPivotTableSummaryTotal(type, key, sqlKey, STATISTICS_COUNT_TYPE.ADVANCED, method, rowData, formulaRows, isSqlQuery);
|
|
176
88
|
summary_multiple_columns.push(sum);
|
|
177
89
|
formatted_summary_multiple_columns.push(getSummaryValueDisplayString(column, sum, method));
|
|
178
90
|
return;
|
|
@@ -386,7 +298,7 @@ var TwoDimensionTable = /*#__PURE__*/function (_PureComponent) {
|
|
|
386
298
|
key = summaryCol.key,
|
|
387
299
|
sqlKey = summaryCol.sqlKey,
|
|
388
300
|
method = summaryCol.method;
|
|
389
|
-
total +=
|
|
301
|
+
total += getPivotTableSummaryTotal(type, key, sqlKey, STATISTICS_COUNT_TYPE.ADVANCED, method, pivotColumnCell, formulaRows, isSqlQuery);
|
|
390
302
|
});
|
|
391
303
|
totalDisplayValue = total;
|
|
392
304
|
allTotalDisplay += total;
|
|
@@ -161,8 +161,6 @@ var RingChart = /*#__PURE__*/function (_BaseChart) {
|
|
|
161
161
|
var title = name;
|
|
162
162
|
if (!name || name === 'undefined') {
|
|
163
163
|
title = intl.get(EMPTY_NAME);
|
|
164
|
-
} else if (name === 'Others') {
|
|
165
|
-
title = intl.get('Others');
|
|
166
164
|
}
|
|
167
165
|
return show_percent || display_label ? {
|
|
168
166
|
name: title,
|
package/es/utils/common-utils.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
1
2
|
import { CellType, COLLABORATOR_COLUMN_TYPES, FORMULA_COLUMN_TYPES_MAP, FORMULA_RESULT_TYPE, generatorBase64Code, isNumber, TableUtils } from 'dtable-store';
|
|
3
|
+
import intl from 'react-intl-universal';
|
|
2
4
|
import { STAT_TYPE, DEFAULT_LABEL_FONT_SIZE, MULTIPLE_CELL_VALUE_COLUMN_TYPE_MAP, CHART_STYLE_COLORS, PIE_COLOR_OPTIONS, SUMMARY_METHOD_MAP } from '../constants';
|
|
3
5
|
import StatUtils from './stat-utils';
|
|
4
6
|
export var generatorUniqueId = function generatorUniqueId(list) {
|
|
@@ -8,7 +10,10 @@ export var generatorUniqueId = function generatorUniqueId(list) {
|
|
|
8
10
|
uniqueId = generatorBase64Code();
|
|
9
11
|
|
|
10
12
|
// eslint-disable-next-line
|
|
11
|
-
|
|
13
|
+
if (!Array.isArray(list) || list.length === 0) {
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
isUnique = list.every(function (item) {
|
|
12
17
|
return item._id !== uniqueId;
|
|
13
18
|
});
|
|
14
19
|
if (isUnique) {
|
|
@@ -251,10 +256,28 @@ export function formatPieChartData(data, statItem, table, currentTheme) {
|
|
|
251
256
|
var filteredSum = filteredItems.reduce(function (total, currentValue) {
|
|
252
257
|
return total += currentValue.value;
|
|
253
258
|
}, 0);
|
|
259
|
+
var original_name_list = [];
|
|
260
|
+
var name_list = [];
|
|
261
|
+
var rows = [];
|
|
262
|
+
filteredItems.forEach(function (item) {
|
|
263
|
+
if (item.original_name) {
|
|
264
|
+
original_name_list.push(item.original_name);
|
|
265
|
+
}
|
|
266
|
+
if (item.name) {
|
|
267
|
+
name_list.push(item.name);
|
|
268
|
+
}
|
|
269
|
+
if (item.rows) {
|
|
270
|
+
rows.push.apply(rows, _toConsumableArray(item.rows));
|
|
271
|
+
}
|
|
272
|
+
});
|
|
254
273
|
data.push({
|
|
255
|
-
|
|
274
|
+
rows: rows,
|
|
275
|
+
name_list: name_list,
|
|
276
|
+
original_name_list: original_name_list,
|
|
277
|
+
name: intl.get('Others'),
|
|
256
278
|
value: filteredSum,
|
|
257
279
|
color: '#dbdbdb',
|
|
280
|
+
original_name: 'Others',
|
|
258
281
|
percent: String(Number.parseFloat(filteredSum / sum * 100).toFixed(1)) + '%'
|
|
259
282
|
});
|
|
260
283
|
colorSet.push('#dbdbdb');
|
|
@@ -5,12 +5,18 @@ import { getOption, getCollaborator, getNumberDisplayString, isNumber, CellType,
|
|
|
5
5
|
import { isCellValueChanged } from './cell-value';
|
|
6
6
|
import { getSelectColumnOptions, getDateColumnFormat } from './column';
|
|
7
7
|
import { getKnownCreatorByEmail } from './collaborator';
|
|
8
|
-
import { EMPTY_NAME } from '../constants';
|
|
8
|
+
import { EMPTY_NAME, STATISTICS_COUNT_TYPE } from '../constants';
|
|
9
|
+
import { getPivotTableSummaryTotal } from './pivot-table';
|
|
10
|
+
var isEmptyName = function isEmptyName(title) {
|
|
11
|
+
return title === null || title === '';
|
|
12
|
+
};
|
|
9
13
|
var isSummaryDateColumn = function isSummaryDateColumn(summaryColumn) {
|
|
10
14
|
if (!summaryColumn) return false;
|
|
11
15
|
var type = summaryColumn.type;
|
|
12
16
|
return type !== CellType.LINK && isDateColumn(summaryColumn);
|
|
13
17
|
};
|
|
18
|
+
|
|
19
|
+
// eslint-disable-next-line
|
|
14
20
|
var getTableValueDisplayName = function getTableValueDisplayName(value, column) {
|
|
15
21
|
var _ref = column || {},
|
|
16
22
|
type = _ref.type,
|
|
@@ -91,264 +97,8 @@ var getValidValueForColumn = function getValidValueForColumn(column, value) {
|
|
|
91
97
|
if (type === CellType.TEXT) return value ? value : '';
|
|
92
98
|
return '';
|
|
93
99
|
};
|
|
94
|
-
var
|
|
95
|
-
var
|
|
96
|
-
statisticalResult = _ref3.statisticalResult,
|
|
97
|
-
t = _ref3.t;
|
|
98
|
-
var pivotResult = statisticalResult.pivotResult,
|
|
99
|
-
groupbyColumn = statisticalResult.groupbyColumn,
|
|
100
|
-
statisticTableColumns = statisticalResult.statisticTableColumns;
|
|
101
|
-
if (!groupbyColumn) return {};
|
|
102
|
-
var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
|
|
103
|
-
if (!nameColumn) return {};
|
|
104
|
-
var pivot_rows = pivotResult.pivot_rows,
|
|
105
|
-
pivot_columns = pivotResult.pivot_columns;
|
|
106
|
-
var tableRows = updateTable.rows;
|
|
107
|
-
var columnMap = {};
|
|
108
|
-
var newRows = [];
|
|
109
|
-
var updatedRows = {};
|
|
110
|
-
var oldRows = {};
|
|
111
|
-
var rowIds = [];
|
|
112
|
-
|
|
113
|
-
// one dimension table no summary columns
|
|
114
|
-
if (pivot_columns.length < 2) {
|
|
115
|
-
columnMap['total'] = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
|
|
116
|
-
|
|
117
|
-
// updated rows
|
|
118
|
-
pivot_rows.forEach(function (item) {
|
|
119
|
-
var name = item.name,
|
|
120
|
-
total = item.total;
|
|
121
|
-
var groupName = name === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(name, groupbyColumn);
|
|
122
|
-
var row = tableRows.find(function (row) {
|
|
123
|
-
return row[nameColumn.key] === groupName;
|
|
124
|
-
});
|
|
125
|
-
var totalColumn = columnMap['total'];
|
|
126
|
-
if (row) {
|
|
127
|
-
// update old row
|
|
128
|
-
var updateRow = {};
|
|
129
|
-
var oldRow = {};
|
|
130
|
-
var validTotalCellValue = getValidValueForColumn(totalColumn, total.total);
|
|
131
|
-
if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
|
|
132
|
-
updateRow[totalColumn.key] = validTotalCellValue;
|
|
133
|
-
oldRow[totalColumn.key] = row[totalColumn.key];
|
|
134
|
-
}
|
|
135
|
-
if (Object.keys(updateRow).length > 0) {
|
|
136
|
-
var rowId = row._id;
|
|
137
|
-
rowIds.push(rowId);
|
|
138
|
-
updatedRows[rowId] = updateRow;
|
|
139
|
-
oldRows[rowId] = oldRow;
|
|
140
|
-
}
|
|
141
|
-
} else {
|
|
142
|
-
// insert new row
|
|
143
|
-
var newRow = {};
|
|
144
|
-
newRow[nameColumn.key] = groupName;
|
|
145
|
-
if (totalColumn) {
|
|
146
|
-
newRow[totalColumn.key] = getValidValueForColumn(totalColumn, total.total);
|
|
147
|
-
}
|
|
148
|
-
newRows.push(newRow);
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
return {
|
|
152
|
-
newRows: newRows,
|
|
153
|
-
updatedRows: updatedRows,
|
|
154
|
-
rowIds: rowIds,
|
|
155
|
-
oldRows: oldRows
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// one dimension table with summary columns
|
|
160
|
-
Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
|
|
161
|
-
var key = item.key;
|
|
162
|
-
var column = statisticTableColumns.find(function (column) {
|
|
163
|
-
return column.key === key;
|
|
164
|
-
});
|
|
165
|
-
if (column) {
|
|
166
|
-
columnMap[key] = TableUtils.getTableColumnByName(updateTable, column.name);
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
// updated rows
|
|
171
|
-
var nameColumnKey = nameColumn.key;
|
|
172
|
-
pivot_rows.forEach(function (item) {
|
|
173
|
-
var name = item.name,
|
|
174
|
-
total = item.total;
|
|
175
|
-
var groupName = name === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(name, groupbyColumn);
|
|
176
|
-
var row = tableRows.find(function (row) {
|
|
177
|
-
return row[nameColumnKey] === name;
|
|
178
|
-
});
|
|
179
|
-
if (row) {
|
|
180
|
-
var updateRow = {};
|
|
181
|
-
var oldRow = {};
|
|
182
|
-
Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
|
|
183
|
-
var key = item.key;
|
|
184
|
-
var column = columnMap[key];
|
|
185
|
-
var totalCellValue = getValidValueForColumn(column, total[key]);
|
|
186
|
-
if (column && isCellValueChanged(row[column.key], totalCellValue, column.type)) {
|
|
187
|
-
updateRow[column.key] = totalCellValue;
|
|
188
|
-
oldRow[column.key] = row[column.key];
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
if (Object.keys(updateRow).length > 0) {
|
|
192
|
-
var rowId = row._id;
|
|
193
|
-
rowIds.push(rowId);
|
|
194
|
-
updatedRows[rowId] = updateRow;
|
|
195
|
-
oldRows[rowId] = oldRow;
|
|
196
|
-
}
|
|
197
|
-
} else {
|
|
198
|
-
var newRow = _defineProperty({}, nameColumn.key, groupName);
|
|
199
|
-
Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
|
|
200
|
-
var key = item.key;
|
|
201
|
-
var column = columnMap[key];
|
|
202
|
-
if (column) {
|
|
203
|
-
var totalCellValue = getValidValueForColumn(column, total[key]);
|
|
204
|
-
newRow[column.key] = totalCellValue;
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
newRows.push(newRow);
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
return {
|
|
211
|
-
newRows: newRows,
|
|
212
|
-
updatedRows: updatedRows,
|
|
213
|
-
rowIds: rowIds,
|
|
214
|
-
oldRows: oldRows
|
|
215
|
-
};
|
|
216
|
-
};
|
|
217
|
-
var getUpdatedTwoDimensionStatisticTableResultToTable = function getUpdatedTwoDimensionStatisticTableResultToTable(_ref4) {
|
|
218
|
-
var updateTable = _ref4.updateTable,
|
|
219
|
-
statisticalResult = _ref4.statisticalResult,
|
|
220
|
-
t = _ref4.t;
|
|
221
|
-
var pivotResult = statisticalResult.pivotResult,
|
|
222
|
-
groupbyColumn = statisticalResult.groupbyColumn,
|
|
223
|
-
columnGroupbyColumn = statisticalResult.columnGroupbyColumn;
|
|
224
|
-
var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
|
|
225
|
-
if (!nameColumn) return {};
|
|
226
|
-
var pivot_rows = pivotResult.pivot_rows,
|
|
227
|
-
pivot_columns = pivotResult.pivot_columns;
|
|
228
|
-
var tableRows = updateTable.rows;
|
|
229
|
-
var columnMap = {};
|
|
230
|
-
var newRows = [];
|
|
231
|
-
var updatedRows = {};
|
|
232
|
-
var rowIds = [];
|
|
233
|
-
var oldRows = {};
|
|
234
|
-
|
|
235
|
-
// updated columns
|
|
236
|
-
Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
|
|
237
|
-
var key = item.key;
|
|
238
|
-
var columnName = key === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(key, columnGroupbyColumn);
|
|
239
|
-
columnMap[columnName] = TableUtils.getTableColumnByName(updateTable, columnName);
|
|
240
|
-
});
|
|
241
|
-
columnMap['total'] = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
|
|
242
|
-
|
|
243
|
-
// updated rows
|
|
244
|
-
var _loop = function _loop(i) {
|
|
245
|
-
var pivotRow = pivot_rows[i];
|
|
246
|
-
var name = pivotRow.name,
|
|
247
|
-
cells = pivotRow.cells,
|
|
248
|
-
total = pivotRow.total;
|
|
249
|
-
name = name === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(name, groupbyColumn);
|
|
250
|
-
var nameColumnKey = nameColumn.key;
|
|
251
|
-
var row = tableRows.find(function (row) {
|
|
252
|
-
return row[nameColumnKey] === name;
|
|
253
|
-
});
|
|
254
|
-
var totalColumn = columnMap['total'];
|
|
255
|
-
if (row) {
|
|
256
|
-
// update old row
|
|
257
|
-
var updatedRow = {};
|
|
258
|
-
var oldRow = {}; // op used
|
|
259
|
-
var validTotalCellValue = getValidValueForColumn(totalColumn, total);
|
|
260
|
-
if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
|
|
261
|
-
updatedRow[totalColumn.key] = validTotalCellValue;
|
|
262
|
-
oldRow = row[totalColumn.key];
|
|
263
|
-
}
|
|
264
|
-
Object.keys(cells).forEach(function (key) {
|
|
265
|
-
var columnName = key === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(key, columnGroupbyColumn);
|
|
266
|
-
var column = columnMap[columnName];
|
|
267
|
-
var validCellValue = getValidValueForColumn(column, cells[key].total);
|
|
268
|
-
if (column && isCellValueChanged(row[column.key], validCellValue, column.type)) {
|
|
269
|
-
updatedRow[column.key] = validCellValue;
|
|
270
|
-
oldRow = row[column.key];
|
|
271
|
-
}
|
|
272
|
-
});
|
|
273
|
-
if (Object.keys(updatedRow).length > 0) {
|
|
274
|
-
var rowId = row._id;
|
|
275
|
-
rowIds.push(rowId);
|
|
276
|
-
updatedRows[rowId] = updatedRow;
|
|
277
|
-
oldRows[rowId] = oldRow;
|
|
278
|
-
}
|
|
279
|
-
} else {
|
|
280
|
-
// insert new row
|
|
281
|
-
var newRow = {};
|
|
282
|
-
newRow[nameColumnKey] = name;
|
|
283
|
-
if (totalColumn) {
|
|
284
|
-
newRow[totalColumn.key] = getValidValueForColumn(totalColumn, name);
|
|
285
|
-
}
|
|
286
|
-
Object.keys(cells).forEach(function (key) {
|
|
287
|
-
var columnName = key === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(key, columnGroupbyColumn);
|
|
288
|
-
var column = columnMap[columnName];
|
|
289
|
-
if (column) {
|
|
290
|
-
newRow[column.key] = getValidValueForColumn(column, cells[key].total);
|
|
291
|
-
}
|
|
292
|
-
});
|
|
293
|
-
if (Object.keys(newRow).length > 0) {
|
|
294
|
-
newRows.push(newRow);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
};
|
|
298
|
-
for (var i = 0; i < pivot_rows.length; i++) {
|
|
299
|
-
_loop(i);
|
|
300
|
-
}
|
|
301
|
-
return {
|
|
302
|
-
newRows: newRows,
|
|
303
|
-
updatedRows: updatedRows,
|
|
304
|
-
oldRows: oldRows,
|
|
305
|
-
rowIds: rowIds
|
|
306
|
-
};
|
|
307
|
-
};
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* @return {
|
|
311
|
-
* columns: [
|
|
312
|
-
* {
|
|
313
|
-
* name: xxx,
|
|
314
|
-
* type: CellType.DATE
|
|
315
|
-
* data: { format }
|
|
316
|
-
* }, {
|
|
317
|
-
* name: xxx,
|
|
318
|
-
* type: CellType.NUMBER
|
|
319
|
-
* data: { decimal, thousands, precision, enable_precision, format }
|
|
320
|
-
* },
|
|
321
|
-
* ],
|
|
322
|
-
* rows: [
|
|
323
|
-
* { columnName: value, xxx },
|
|
324
|
-
* ]
|
|
325
|
-
* }
|
|
326
|
-
*/
|
|
327
|
-
export var exportStatisticToTable = function exportStatisticToTable(_ref5) {
|
|
328
|
-
var statisticalResult = _ref5.statisticalResult,
|
|
329
|
-
t = _ref5.t;
|
|
330
|
-
var pivotResult = statisticalResult.pivotResult,
|
|
331
|
-
groupbyColumn = statisticalResult.groupbyColumn,
|
|
332
|
-
columnGroupbyColumn = statisticalResult.columnGroupbyColumn;
|
|
333
|
-
var pivot_columns = pivotResult.pivot_columns;
|
|
334
|
-
if (!groupbyColumn) return {};
|
|
335
|
-
|
|
336
|
-
// two dimension table
|
|
337
|
-
if (columnGroupbyColumn) {
|
|
338
|
-
return getTwoDimensionStatisticTableResultToTable({
|
|
339
|
-
statisticalResult: statisticalResult,
|
|
340
|
-
t: t
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
if (!Array.isArray(pivot_columns)) return {};
|
|
344
|
-
return getOneDimensionStatisticTableResultToTable({
|
|
345
|
-
statisticalResult: statisticalResult,
|
|
346
|
-
t: t
|
|
347
|
-
});
|
|
348
|
-
};
|
|
349
|
-
export var getOneDimensionStatisticTableResultToTable = function getOneDimensionStatisticTableResultToTable(_ref6) {
|
|
350
|
-
var statisticalResult = _ref6.statisticalResult,
|
|
351
|
-
t = _ref6.t;
|
|
100
|
+
var exportOneDimensionToTable = function exportOneDimensionToTable(_ref3) {
|
|
101
|
+
var statisticalResult = _ref3.statisticalResult;
|
|
352
102
|
var pivotResult = statisticalResult.pivotResult,
|
|
353
103
|
groupbyColumn = statisticalResult.groupbyColumn,
|
|
354
104
|
statisticTableColumns = statisticalResult.statisticTableColumns,
|
|
@@ -376,8 +126,8 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
|
|
|
376
126
|
var isIncludeHour = false;
|
|
377
127
|
if (summaryColumn) {
|
|
378
128
|
if (isSummaryDateColumn(summaryColumn)) {
|
|
379
|
-
var
|
|
380
|
-
format =
|
|
129
|
+
var _ref4 = summaryColumn.data || {},
|
|
130
|
+
format = _ref4.format;
|
|
381
131
|
columnData = {
|
|
382
132
|
format: format
|
|
383
133
|
};
|
|
@@ -389,12 +139,12 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
|
|
|
389
139
|
such as the data attribute in the function column, which contains other content that is not
|
|
390
140
|
useful for creating a new column
|
|
391
141
|
*/
|
|
392
|
-
var
|
|
393
|
-
decimal =
|
|
394
|
-
thousands =
|
|
395
|
-
precision =
|
|
396
|
-
enable_precision =
|
|
397
|
-
_format =
|
|
142
|
+
var _ref5 = summaryColumn.data || {},
|
|
143
|
+
decimal = _ref5.decimal,
|
|
144
|
+
thousands = _ref5.thousands,
|
|
145
|
+
precision = _ref5.precision,
|
|
146
|
+
enable_precision = _ref5.enable_precision,
|
|
147
|
+
_format = _ref5.format;
|
|
398
148
|
columnData = {
|
|
399
149
|
decimal: decimal,
|
|
400
150
|
thousands: thousands,
|
|
@@ -415,15 +165,16 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
|
|
|
415
165
|
|
|
416
166
|
// generator rows
|
|
417
167
|
pivot_rows.forEach(function (item) {
|
|
418
|
-
var
|
|
168
|
+
var _newRow;
|
|
419
169
|
var name = item.name,
|
|
170
|
+
original_name = item.original_name,
|
|
420
171
|
total = item.total;
|
|
421
|
-
var groupName =
|
|
172
|
+
var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
|
|
422
173
|
var cellValue = total.total;
|
|
423
174
|
if (_isDateSummaryColumn && cellValue) {
|
|
424
175
|
cellValue = isIncludeHour ? dayjs(cellValue).format('YYYY-MM-DD HH:mm') : dayjs(cellValue).format('YYYY-MM-DD');
|
|
425
176
|
}
|
|
426
|
-
var newRow = (
|
|
177
|
+
var newRow = (_newRow = {}, _defineProperty(_newRow, groupbyColumn.name, groupName), _defineProperty(_newRow, intl.get('Total'), cellValue), _newRow);
|
|
427
178
|
rows.push(newRow);
|
|
428
179
|
});
|
|
429
180
|
return {
|
|
@@ -444,8 +195,8 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
|
|
|
444
195
|
var columnType = CellType.NUMBER;
|
|
445
196
|
if (isSummaryDateColumn(column)) {
|
|
446
197
|
columnType = CellType.DATE;
|
|
447
|
-
var
|
|
448
|
-
_format2 =
|
|
198
|
+
var _ref6 = column.data || {},
|
|
199
|
+
_format2 = _ref6.format;
|
|
449
200
|
_columnData = {
|
|
450
201
|
format: _format2
|
|
451
202
|
};
|
|
@@ -455,12 +206,12 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
|
|
|
455
206
|
such as the data attribute in the function column, which contains other content that is not
|
|
456
207
|
useful for creating a new column
|
|
457
208
|
*/
|
|
458
|
-
var
|
|
459
|
-
_decimal =
|
|
460
|
-
_thousands =
|
|
461
|
-
_precision =
|
|
462
|
-
_enable_precision =
|
|
463
|
-
_format3 =
|
|
209
|
+
var _ref7 = column.data || {},
|
|
210
|
+
_decimal = _ref7.decimal,
|
|
211
|
+
_thousands = _ref7.thousands,
|
|
212
|
+
_precision = _ref7.precision,
|
|
213
|
+
_enable_precision = _ref7.enable_precision,
|
|
214
|
+
_format3 = _ref7.format;
|
|
464
215
|
_columnData = {
|
|
465
216
|
decimal: _decimal,
|
|
466
217
|
thousands: _thousands,
|
|
@@ -482,16 +233,19 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
|
|
|
482
233
|
// generator rows
|
|
483
234
|
pivot_rows.forEach(function (item) {
|
|
484
235
|
var name = item.name,
|
|
236
|
+
original_name = item.original_name,
|
|
485
237
|
total = item.total;
|
|
486
|
-
var groupName =
|
|
238
|
+
var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
|
|
487
239
|
var newRow = _defineProperty({}, groupbyColumn.name, groupName);
|
|
488
240
|
Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
|
|
489
|
-
var key = item.key
|
|
241
|
+
var key = item.key,
|
|
242
|
+
method = item.method;
|
|
490
243
|
var column = columnMap[key];
|
|
244
|
+
var cellValueKey = key + method;
|
|
491
245
|
var name = column.name,
|
|
492
246
|
type = column.type,
|
|
493
247
|
data = column.data;
|
|
494
|
-
var cellValue = total[
|
|
248
|
+
var cellValue = total[cellValueKey];
|
|
495
249
|
if (type === CellType.DATE && cellValue) {
|
|
496
250
|
var dateFormat = data && data.format && data.format.indexOf('HH:mm') > -1 ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD';
|
|
497
251
|
cellValue = dayjs(cellValue).format(dateFormat);
|
|
@@ -505,12 +259,10 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
|
|
|
505
259
|
rows: rows
|
|
506
260
|
};
|
|
507
261
|
};
|
|
508
|
-
|
|
509
|
-
var statisticalResult =
|
|
510
|
-
t = _ref11.t;
|
|
262
|
+
var exportTwoDimensionToTable = function exportTwoDimensionToTable(_ref8) {
|
|
263
|
+
var statisticalResult = _ref8.statisticalResult;
|
|
511
264
|
var pivotResult = statisticalResult.pivotResult,
|
|
512
265
|
groupbyColumn = statisticalResult.groupbyColumn,
|
|
513
|
-
columnGroupbyColumn = statisticalResult.columnGroupbyColumn,
|
|
514
266
|
summaryColumn = statisticalResult.summaryColumn;
|
|
515
267
|
var pivot_rows = pivotResult.pivot_rows,
|
|
516
268
|
pivot_columns = pivotResult.pivot_columns;
|
|
@@ -533,8 +285,8 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
|
|
|
533
285
|
if (summaryColumn) {
|
|
534
286
|
if (isSummaryDateColumn(summaryColumn)) {
|
|
535
287
|
_isDateSummaryColumn = true;
|
|
536
|
-
var
|
|
537
|
-
format =
|
|
288
|
+
var _ref9 = summaryColumn.data || {},
|
|
289
|
+
format = _ref9.format;
|
|
538
290
|
columnData = {
|
|
539
291
|
format: format
|
|
540
292
|
};
|
|
@@ -545,12 +297,12 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
|
|
|
545
297
|
such as the data attribute in the function column, which contains other content that is not
|
|
546
298
|
useful for creating a new column
|
|
547
299
|
*/
|
|
548
|
-
var
|
|
549
|
-
decimal =
|
|
550
|
-
thousands =
|
|
551
|
-
precision =
|
|
552
|
-
enable_precision =
|
|
553
|
-
_format4 =
|
|
300
|
+
var _ref10 = summaryColumn.data || {},
|
|
301
|
+
decimal = _ref10.decimal,
|
|
302
|
+
thousands = _ref10.thousands,
|
|
303
|
+
precision = _ref10.precision,
|
|
304
|
+
enable_precision = _ref10.enable_precision,
|
|
305
|
+
_format4 = _ref10.format;
|
|
554
306
|
columnData = {
|
|
555
307
|
decimal: decimal,
|
|
556
308
|
thousands: thousands,
|
|
@@ -561,8 +313,9 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
|
|
|
561
313
|
}
|
|
562
314
|
}
|
|
563
315
|
Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
|
|
564
|
-
var key = item.key
|
|
565
|
-
|
|
316
|
+
var key = item.key,
|
|
317
|
+
original_key = item.original_key;
|
|
318
|
+
var columnName = isEmptyName(original_key) ? intl.get(EMPTY_NAME) : key;
|
|
566
319
|
var newColumn = {
|
|
567
320
|
type: _isDateSummaryColumn ? CellType.DATE : CellType.NUMBER,
|
|
568
321
|
name: columnName,
|
|
@@ -584,9 +337,12 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
|
|
|
584
337
|
var dateFormat = isIncludeHour ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD';
|
|
585
338
|
pivot_rows.forEach(function (item) {
|
|
586
339
|
var name = item.name,
|
|
340
|
+
original_name = item.original_name,
|
|
587
341
|
cells = item.cells,
|
|
588
342
|
total = item.total;
|
|
589
|
-
|
|
343
|
+
if (isEmptyName(original_name)) {
|
|
344
|
+
name = intl.get(EMPTY_NAME);
|
|
345
|
+
}
|
|
590
346
|
var newRow = _defineProperty({}, groupbyColumn.name, name);
|
|
591
347
|
var cellValue = total;
|
|
592
348
|
if (_isDateSummaryColumn && cellValue) {
|
|
@@ -607,27 +363,488 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
|
|
|
607
363
|
rows: rows
|
|
608
364
|
};
|
|
609
365
|
};
|
|
610
|
-
|
|
366
|
+
var getTwoDimensionWithSummaryColumns = function getTwoDimensionWithSummaryColumns(_ref11) {
|
|
367
|
+
var statisticalResult = _ref11.statisticalResult;
|
|
368
|
+
var pivotResult = statisticalResult.pivotResult,
|
|
369
|
+
groupbyColumn = statisticalResult.groupbyColumn;
|
|
370
|
+
var pivot_rows = pivotResult.pivot_rows,
|
|
371
|
+
pivot_columns = pivotResult.pivot_columns,
|
|
372
|
+
pivot_summary_multiple_columns = pivotResult.pivot_summary_multiple_columns,
|
|
373
|
+
formulaRows = pivotResult.formulaRows,
|
|
374
|
+
isSqlQuery = pivotResult.isSqlQuery;
|
|
375
|
+
var summaryColumns = pivot_summary_multiple_columns.filter(Boolean);
|
|
376
|
+
if (!groupbyColumn || summaryColumns.length === 0 || !Array.isArray(pivot_columns) || pivot_columns.length === 0 || !Array.isArray(pivot_rows) || pivot_rows.length === 0) return {};
|
|
377
|
+
var groupbyColumnName = groupbyColumn.name;
|
|
378
|
+
var firstSummaryColumn = summaryColumns[0];
|
|
379
|
+
var columns = [{
|
|
380
|
+
// name column
|
|
381
|
+
key: '0000',
|
|
382
|
+
type: CellType.TEXT,
|
|
383
|
+
name: groupbyColumnName,
|
|
384
|
+
data: null
|
|
385
|
+
}];
|
|
386
|
+
var tmpColumns = [];
|
|
387
|
+
pivot_columns.forEach(function (pivotColumn) {
|
|
388
|
+
var pivotColumnKey = pivotColumn.key,
|
|
389
|
+
original_key = pivotColumn.original_key;
|
|
390
|
+
var pivotColumnColumnName = isEmptyName(original_key) ? intl.get(EMPTY_NAME) : pivotColumnKey;
|
|
391
|
+
summaryColumns.forEach(function (summaryColumn) {
|
|
392
|
+
var key = summaryColumn.key,
|
|
393
|
+
type = summaryColumn.type,
|
|
394
|
+
sqlKey = summaryColumn.sqlKey,
|
|
395
|
+
column_name = summaryColumn.column_name,
|
|
396
|
+
data = summaryColumn.data,
|
|
397
|
+
method = summaryColumn.method;
|
|
398
|
+
var newColumnName = "".concat(pivotColumnColumnName, "-").concat(column_name);
|
|
399
|
+
columns.push({
|
|
400
|
+
// just support number column
|
|
401
|
+
type: CellType.NUMBER,
|
|
402
|
+
name: newColumnName,
|
|
403
|
+
data: data
|
|
404
|
+
});
|
|
405
|
+
tmpColumns.push({
|
|
406
|
+
name: newColumnName,
|
|
407
|
+
pivotColumnKey: pivotColumnKey,
|
|
408
|
+
key: key,
|
|
409
|
+
type: type,
|
|
410
|
+
sqlKey: sqlKey,
|
|
411
|
+
method: method
|
|
412
|
+
});
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
columns.push({
|
|
416
|
+
type: CellType.NUMBER,
|
|
417
|
+
name: intl.get('Total'),
|
|
418
|
+
data: firstSummaryColumn.data
|
|
419
|
+
});
|
|
420
|
+
var rows = [];
|
|
421
|
+
pivot_rows.forEach(function (pivotRow) {
|
|
422
|
+
var name = pivotRow.name,
|
|
423
|
+
original_name = pivotRow.original_name,
|
|
424
|
+
cells = pivotRow.cells;
|
|
425
|
+
if (isEmptyName(original_name)) {
|
|
426
|
+
name = intl.get(EMPTY_NAME);
|
|
427
|
+
}
|
|
428
|
+
var newRow = _defineProperty({}, groupbyColumnName, name);
|
|
429
|
+
var total = 0;
|
|
430
|
+
tmpColumns.forEach(function (tmpColumn) {
|
|
431
|
+
var name = tmpColumn.name,
|
|
432
|
+
pivotColumnKey = tmpColumn.pivotColumnKey,
|
|
433
|
+
key = tmpColumn.key,
|
|
434
|
+
type = tmpColumn.type,
|
|
435
|
+
sqlKey = tmpColumn.sqlKey,
|
|
436
|
+
method = tmpColumn.method;
|
|
437
|
+
var cell = cells && cells[pivotColumnKey];
|
|
438
|
+
var cellRows = cell && cell.rows;
|
|
439
|
+
if (!Array.isArray(cellRows) || cellRows.length === 0) {
|
|
440
|
+
newRow[name] = 0;
|
|
441
|
+
} else {
|
|
442
|
+
var cellValue = getPivotTableSummaryTotal(type, key, sqlKey, STATISTICS_COUNT_TYPE.ADVANCED, method, cellRows, formulaRows, isSqlQuery);
|
|
443
|
+
newRow[name] = cellValue;
|
|
444
|
+
total += cellValue;
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
newRow[intl.get('Total')] = total;
|
|
448
|
+
rows.push(newRow);
|
|
449
|
+
});
|
|
450
|
+
return {
|
|
451
|
+
columns: columns,
|
|
452
|
+
rows: rows
|
|
453
|
+
};
|
|
454
|
+
};
|
|
455
|
+
var exportTwoDimensionWithSummaryColumnsToTable = function exportTwoDimensionWithSummaryColumnsToTable(_ref12) {
|
|
456
|
+
var statisticalResult = _ref12.statisticalResult;
|
|
457
|
+
return getTwoDimensionWithSummaryColumns({
|
|
458
|
+
statisticalResult: statisticalResult
|
|
459
|
+
});
|
|
460
|
+
};
|
|
461
|
+
var updatedOneDimensionToTable = function updatedOneDimensionToTable(_ref13) {
|
|
462
|
+
var updateTable = _ref13.updateTable,
|
|
463
|
+
statisticalResult = _ref13.statisticalResult;
|
|
464
|
+
var pivotResult = statisticalResult.pivotResult,
|
|
465
|
+
groupbyColumn = statisticalResult.groupbyColumn,
|
|
466
|
+
statisticTableColumns = statisticalResult.statisticTableColumns;
|
|
467
|
+
if (!groupbyColumn) return {};
|
|
468
|
+
var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
|
|
469
|
+
if (!nameColumn) return {};
|
|
470
|
+
var pivot_rows = pivotResult.pivot_rows,
|
|
471
|
+
pivot_columns = pivotResult.pivot_columns;
|
|
472
|
+
var tableRows = updateTable.rows;
|
|
473
|
+
var columnMap = {};
|
|
474
|
+
var newRows = [];
|
|
475
|
+
var updatedRows = {};
|
|
476
|
+
var oldRows = {};
|
|
477
|
+
var rowIds = [];
|
|
478
|
+
|
|
479
|
+
// one dimension table no summary columns
|
|
480
|
+
if (pivot_columns.length < 2) {
|
|
481
|
+
columnMap['total'] = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
|
|
482
|
+
|
|
483
|
+
// updated rows
|
|
484
|
+
pivot_rows.forEach(function (item) {
|
|
485
|
+
var name = item.name,
|
|
486
|
+
original_name = item.original_name,
|
|
487
|
+
total = item.total;
|
|
488
|
+
var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
|
|
489
|
+
var row = tableRows.find(function (row) {
|
|
490
|
+
return row[nameColumn.key] === groupName;
|
|
491
|
+
});
|
|
492
|
+
var totalColumn = columnMap['total'];
|
|
493
|
+
if (row) {
|
|
494
|
+
// update old row
|
|
495
|
+
var updateRow = {};
|
|
496
|
+
var oldRow = {};
|
|
497
|
+
var validTotalCellValue = getValidValueForColumn(totalColumn, total.total);
|
|
498
|
+
if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
|
|
499
|
+
updateRow[totalColumn.key] = validTotalCellValue;
|
|
500
|
+
oldRow[totalColumn.key] = row[totalColumn.key];
|
|
501
|
+
}
|
|
502
|
+
if (Object.keys(updateRow).length > 0) {
|
|
503
|
+
var rowId = row._id;
|
|
504
|
+
rowIds.push(rowId);
|
|
505
|
+
updatedRows[rowId] = updateRow;
|
|
506
|
+
oldRows[rowId] = oldRow;
|
|
507
|
+
}
|
|
508
|
+
} else {
|
|
509
|
+
// insert new row
|
|
510
|
+
var newRow = {};
|
|
511
|
+
newRow[nameColumn.key] = groupName;
|
|
512
|
+
if (totalColumn) {
|
|
513
|
+
newRow[totalColumn.key] = getValidValueForColumn(totalColumn, total.total);
|
|
514
|
+
}
|
|
515
|
+
newRows.push(newRow);
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
return {
|
|
519
|
+
newRows: newRows,
|
|
520
|
+
updatedRows: updatedRows,
|
|
521
|
+
rowIds: rowIds,
|
|
522
|
+
oldRows: oldRows
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// one dimension table with summary columns
|
|
527
|
+
Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
|
|
528
|
+
var key = item.key;
|
|
529
|
+
var column = statisticTableColumns.find(function (column) {
|
|
530
|
+
return column.key === key;
|
|
531
|
+
});
|
|
532
|
+
if (column) {
|
|
533
|
+
columnMap[key] = TableUtils.getTableColumnByName(updateTable, column.name);
|
|
534
|
+
}
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
// updated rows
|
|
538
|
+
var nameColumnKey = nameColumn.key;
|
|
539
|
+
pivot_rows.forEach(function (item) {
|
|
540
|
+
var name = item.name,
|
|
541
|
+
original_name = item.original_name,
|
|
542
|
+
total = item.total;
|
|
543
|
+
var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
|
|
544
|
+
var row = tableRows.find(function (row) {
|
|
545
|
+
return row[nameColumnKey] === groupName;
|
|
546
|
+
});
|
|
547
|
+
if (row) {
|
|
548
|
+
var updateRow = {};
|
|
549
|
+
var oldRow = {};
|
|
550
|
+
Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
|
|
551
|
+
var key = item.key,
|
|
552
|
+
method = item.method;
|
|
553
|
+
var column = columnMap[key];
|
|
554
|
+
var cellValueKey = key + method;
|
|
555
|
+
var totalCellValue = getValidValueForColumn(column, total[cellValueKey]);
|
|
556
|
+
if (column && isCellValueChanged(row[column.key], totalCellValue, column.type)) {
|
|
557
|
+
updateRow[column.key] = totalCellValue;
|
|
558
|
+
oldRow[column.key] = row[column.key];
|
|
559
|
+
}
|
|
560
|
+
});
|
|
561
|
+
if (Object.keys(updateRow).length > 0) {
|
|
562
|
+
var rowId = row._id;
|
|
563
|
+
rowIds.push(rowId);
|
|
564
|
+
updatedRows[rowId] = updateRow;
|
|
565
|
+
oldRows[rowId] = oldRow;
|
|
566
|
+
}
|
|
567
|
+
} else {
|
|
568
|
+
var newRow = _defineProperty({}, nameColumn.key, groupName);
|
|
569
|
+
Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
|
|
570
|
+
var key = item.key,
|
|
571
|
+
method = item.method;
|
|
572
|
+
var cellValueKey = key + method;
|
|
573
|
+
var column = columnMap[key];
|
|
574
|
+
if (column) {
|
|
575
|
+
var totalCellValue = getValidValueForColumn(column, total[cellValueKey]);
|
|
576
|
+
newRow[column.key] = totalCellValue;
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
newRows.push(newRow);
|
|
580
|
+
}
|
|
581
|
+
});
|
|
582
|
+
return {
|
|
583
|
+
newRows: newRows,
|
|
584
|
+
updatedRows: updatedRows,
|
|
585
|
+
rowIds: rowIds,
|
|
586
|
+
oldRows: oldRows
|
|
587
|
+
};
|
|
588
|
+
};
|
|
589
|
+
var updateTwoDimensionToTable = function updateTwoDimensionToTable(_ref14) {
|
|
611
590
|
var updateTable = _ref14.updateTable,
|
|
612
|
-
statisticalResult = _ref14.statisticalResult
|
|
613
|
-
|
|
614
|
-
|
|
591
|
+
statisticalResult = _ref14.statisticalResult;
|
|
592
|
+
var pivotResult = statisticalResult.pivotResult,
|
|
593
|
+
groupbyColumn = statisticalResult.groupbyColumn;
|
|
594
|
+
var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
|
|
595
|
+
if (!nameColumn) return {};
|
|
596
|
+
var pivot_rows = pivotResult.pivot_rows,
|
|
597
|
+
pivot_columns = pivotResult.pivot_columns;
|
|
598
|
+
var tableRows = updateTable.rows;
|
|
599
|
+
var columnMap = {};
|
|
600
|
+
var newRows = [];
|
|
601
|
+
var updatedRows = {};
|
|
602
|
+
var rowIds = [];
|
|
603
|
+
var oldRows = {};
|
|
604
|
+
|
|
605
|
+
// updated columns
|
|
606
|
+
var updateColumns = [];
|
|
607
|
+
Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
|
|
608
|
+
var key = item.key,
|
|
609
|
+
original_key = item.original_key;
|
|
610
|
+
var columnName = isEmptyName(original_key) ? intl.get(EMPTY_NAME) : key;
|
|
611
|
+
var column = TableUtils.getTableColumnByName(updateTable, columnName);
|
|
612
|
+
columnMap[columnName] = column;
|
|
613
|
+
updateColumns.push(column);
|
|
614
|
+
});
|
|
615
|
+
var totalColumn = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
|
|
616
|
+
columnMap['total'] = totalColumn;
|
|
617
|
+
updateColumns.push(totalColumn);
|
|
618
|
+
|
|
619
|
+
// updated rows
|
|
620
|
+
var _loop = function _loop(i) {
|
|
621
|
+
var pivotRow = pivot_rows[i];
|
|
622
|
+
var name = pivotRow.name,
|
|
623
|
+
original_name = pivotRow.original_name,
|
|
624
|
+
cells = pivotRow.cells,
|
|
625
|
+
total = pivotRow.total;
|
|
626
|
+
if (isEmptyName(original_name)) {
|
|
627
|
+
name = intl.get(EMPTY_NAME);
|
|
628
|
+
}
|
|
629
|
+
var nameColumnKey = nameColumn.key;
|
|
630
|
+
var row = tableRows.find(function (row) {
|
|
631
|
+
return row[nameColumnKey] === name;
|
|
632
|
+
});
|
|
633
|
+
var totalColumn = columnMap['total'];
|
|
634
|
+
if (row) {
|
|
635
|
+
// update old row
|
|
636
|
+
var rowId = row._id;
|
|
637
|
+
var updatedRow = {};
|
|
638
|
+
var oldRow = {}; // op used
|
|
639
|
+
var validTotalCellValue = getValidValueForColumn(totalColumn, total);
|
|
640
|
+
if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
|
|
641
|
+
updatedRow[totalColumn.key] = validTotalCellValue;
|
|
642
|
+
oldRow[totalColumn.key] = row[totalColumn.key];
|
|
643
|
+
}
|
|
644
|
+
var keys = Object.keys(cells);
|
|
645
|
+
if (keys.length === 0) {
|
|
646
|
+
updateColumns.forEach(function (column) {
|
|
647
|
+
var key = column.key,
|
|
648
|
+
type = column.type;
|
|
649
|
+
var newCellValue = key === totalColumn.key ? 0 : null;
|
|
650
|
+
if (isCellValueChanged(row[key], newCellValue, type)) {
|
|
651
|
+
updatedRow[key] = newCellValue;
|
|
652
|
+
oldRow[key] = row[key];
|
|
653
|
+
}
|
|
654
|
+
});
|
|
655
|
+
} else {
|
|
656
|
+
keys.forEach(function (key) {
|
|
657
|
+
var columnName = isEmptyName(key) ? intl.get(EMPTY_NAME) : key;
|
|
658
|
+
var column = columnMap[columnName];
|
|
659
|
+
var validCellValue = getValidValueForColumn(column, cells[key].total);
|
|
660
|
+
if (column && isCellValueChanged(row[column.key], validCellValue, column.type)) {
|
|
661
|
+
updatedRow[column.key] = validCellValue;
|
|
662
|
+
oldRow[column.key] = row[column.key];
|
|
663
|
+
}
|
|
664
|
+
});
|
|
665
|
+
}
|
|
666
|
+
if (Object.keys(updatedRow).length > 0) {
|
|
667
|
+
rowIds.push(rowId);
|
|
668
|
+
updatedRows[rowId] = updatedRow;
|
|
669
|
+
oldRows[rowId] = oldRow;
|
|
670
|
+
}
|
|
671
|
+
} else {
|
|
672
|
+
// insert new row
|
|
673
|
+
var newRow = {};
|
|
674
|
+
newRow[nameColumnKey] = name;
|
|
675
|
+
if (totalColumn) {
|
|
676
|
+
newRow[totalColumn.key] = getValidValueForColumn(totalColumn, name);
|
|
677
|
+
}
|
|
678
|
+
Object.keys(cells).forEach(function (key) {
|
|
679
|
+
var columnName = isEmptyName(key) ? intl.get(EMPTY_NAME) : key;
|
|
680
|
+
var column = columnMap[columnName];
|
|
681
|
+
if (column) {
|
|
682
|
+
newRow[column.key] = getValidValueForColumn(column, cells[key].total);
|
|
683
|
+
}
|
|
684
|
+
});
|
|
685
|
+
if (Object.keys(newRow).length > 0) {
|
|
686
|
+
newRows.push(newRow);
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
};
|
|
690
|
+
for (var i = 0; i < pivot_rows.length; i++) {
|
|
691
|
+
_loop(i);
|
|
692
|
+
}
|
|
693
|
+
return {
|
|
694
|
+
newRows: newRows,
|
|
695
|
+
updatedRows: updatedRows,
|
|
696
|
+
oldRows: oldRows,
|
|
697
|
+
rowIds: rowIds
|
|
698
|
+
};
|
|
699
|
+
};
|
|
700
|
+
var updateTwoDimensionWithSummaryColumnsToTable = function updateTwoDimensionWithSummaryColumnsToTable(_ref15) {
|
|
701
|
+
var updateTable = _ref15.updateTable,
|
|
702
|
+
statisticalResult = _ref15.statisticalResult;
|
|
703
|
+
var groupbyColumn = statisticalResult.groupbyColumn;
|
|
704
|
+
var nameColumn = groupbyColumn && TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
|
|
705
|
+
if (!nameColumn) return {};
|
|
706
|
+
var _getTwoDimensionWithS = getTwoDimensionWithSummaryColumns({
|
|
707
|
+
statisticalResult: statisticalResult
|
|
708
|
+
}),
|
|
709
|
+
exportingColumns = _getTwoDimensionWithS.columns,
|
|
710
|
+
exportingRows = _getTwoDimensionWithS.rows;
|
|
711
|
+
if (!Array.isArray(exportingColumns) || exportingColumns.length === 0 || !Array.isArray(exportingRows) || exportingRows.length === 0) {
|
|
712
|
+
return {};
|
|
713
|
+
}
|
|
714
|
+
var tableRows = updateTable.rows,
|
|
715
|
+
tableColumns = updateTable.columns;
|
|
716
|
+
var nameColumnKey = nameColumn.key;
|
|
717
|
+
var groupbyColumnName = groupbyColumn.name;
|
|
718
|
+
var newRows = [];
|
|
719
|
+
var updatedRows = {};
|
|
720
|
+
var rowIds = [];
|
|
721
|
+
var oldRows = {};
|
|
722
|
+
var nameCellValueExistRowMap = {};
|
|
723
|
+
tableRows.forEach(function (row) {
|
|
724
|
+
var nameCellValue = row[nameColumnKey];
|
|
725
|
+
if (!nameCellValueExistRowMap[nameCellValue]) {
|
|
726
|
+
nameCellValueExistRowMap[nameCellValue] = row;
|
|
727
|
+
}
|
|
728
|
+
});
|
|
729
|
+
exportingRows.forEach(function (exportingRow) {
|
|
730
|
+
var nameCellValue = exportingRow[groupbyColumnName];
|
|
731
|
+
var existRow = nameCellValueExistRowMap[nameCellValue];
|
|
732
|
+
if (existRow) {
|
|
733
|
+
// update the row already exist
|
|
734
|
+
var exportingRowData = {};
|
|
735
|
+
var existRowData = {};
|
|
736
|
+
tableColumns.forEach(function (tableColumn) {
|
|
737
|
+
var tableColumnKey = tableColumn.key,
|
|
738
|
+
tableColumnType = tableColumn.type,
|
|
739
|
+
tableColumnName = tableColumn.name;
|
|
740
|
+
var existCellValue = existRow[tableColumnKey];
|
|
741
|
+
var exportingCellValue = exportingRow[tableColumnName];
|
|
742
|
+
if (tableColumn && isCellValueChanged(existCellValue, exportingCellValue, tableColumnType)) {
|
|
743
|
+
exportingRowData[tableColumnKey] = exportingCellValue;
|
|
744
|
+
existRowData[tableColumnKey] = existCellValue;
|
|
745
|
+
}
|
|
746
|
+
});
|
|
747
|
+
if (Object.keys(exportingRowData).length > 0) {
|
|
748
|
+
var rowId = existRow._id;
|
|
749
|
+
rowIds.push(rowId);
|
|
750
|
+
updatedRows[rowId] = exportingRowData;
|
|
751
|
+
oldRows[rowId] = existRowData;
|
|
752
|
+
}
|
|
753
|
+
} else {
|
|
754
|
+
// create new row which not exist
|
|
755
|
+
newRows.push(exportingRow);
|
|
756
|
+
}
|
|
757
|
+
});
|
|
758
|
+
return {
|
|
759
|
+
newRows: newRows,
|
|
760
|
+
updatedRows: updatedRows,
|
|
761
|
+
oldRows: oldRows,
|
|
762
|
+
rowIds: rowIds
|
|
763
|
+
};
|
|
764
|
+
};
|
|
765
|
+
|
|
766
|
+
/**
|
|
767
|
+
* statisticalResult: {
|
|
768
|
+
* columnGroupbyColumn: null,
|
|
769
|
+
* groupbyColumn: null,
|
|
770
|
+
* pivotResult: {
|
|
771
|
+
* pivot_columns: [],
|
|
772
|
+
* pivot_rows: [
|
|
773
|
+
* { name: 'xxx', original_name: 'xxx', total }
|
|
774
|
+
* ]
|
|
775
|
+
* },
|
|
776
|
+
* statisticTableColumns: null,
|
|
777
|
+
* summaryColumn: null,
|
|
778
|
+
* }
|
|
779
|
+
*
|
|
780
|
+
* @return {
|
|
781
|
+
* columns: [
|
|
782
|
+
* {
|
|
783
|
+
* name: xxx,
|
|
784
|
+
* type: CellType.DATE
|
|
785
|
+
* data: { format }
|
|
786
|
+
* }, {
|
|
787
|
+
* name: xxx,
|
|
788
|
+
* type: CellType.NUMBER
|
|
789
|
+
* data: { decimal, thousands, precision, enable_precision, format }
|
|
790
|
+
* },
|
|
791
|
+
* ],
|
|
792
|
+
* rows: [
|
|
793
|
+
* { columnName: value, xxx },
|
|
794
|
+
* ]
|
|
795
|
+
* }
|
|
796
|
+
*/
|
|
797
|
+
export var exportStatisticToTable = function exportStatisticToTable(_ref16) {
|
|
798
|
+
var statisticalResult = _ref16.statisticalResult;
|
|
799
|
+
var pivotResult = statisticalResult.pivotResult,
|
|
800
|
+
groupbyColumn = statisticalResult.groupbyColumn,
|
|
615
801
|
columnGroupbyColumn = statisticalResult.columnGroupbyColumn;
|
|
802
|
+
var pivot_columns = pivotResult.pivot_columns,
|
|
803
|
+
pivot_summary_multiple_columns = pivotResult.pivot_summary_multiple_columns;
|
|
616
804
|
if (!groupbyColumn) return {};
|
|
617
805
|
|
|
618
806
|
// two dimension table
|
|
619
807
|
if (columnGroupbyColumn) {
|
|
620
|
-
|
|
808
|
+
if (Array.isArray(pivot_summary_multiple_columns) && pivot_summary_multiple_columns.length > 0) {
|
|
809
|
+
return exportTwoDimensionWithSummaryColumnsToTable({
|
|
810
|
+
statisticalResult: statisticalResult
|
|
811
|
+
});
|
|
812
|
+
}
|
|
813
|
+
return exportTwoDimensionToTable({
|
|
814
|
+
statisticalResult: statisticalResult
|
|
815
|
+
});
|
|
816
|
+
}
|
|
817
|
+
if (!Array.isArray(pivot_columns)) return {};
|
|
818
|
+
return exportOneDimensionToTable({
|
|
819
|
+
statisticalResult: statisticalResult
|
|
820
|
+
});
|
|
821
|
+
};
|
|
822
|
+
export var updateStatisticToTable = function updateStatisticToTable(_ref17) {
|
|
823
|
+
var updateTable = _ref17.updateTable,
|
|
824
|
+
statisticalResult = _ref17.statisticalResult;
|
|
825
|
+
var groupbyColumn = statisticalResult.groupbyColumn,
|
|
826
|
+
columnGroupbyColumn = statisticalResult.columnGroupbyColumn,
|
|
827
|
+
pivotResult = statisticalResult.pivotResult;
|
|
828
|
+
var pivot_summary_multiple_columns = pivotResult.pivot_summary_multiple_columns;
|
|
829
|
+
if (!groupbyColumn) return {};
|
|
830
|
+
|
|
831
|
+
// two dimension table
|
|
832
|
+
if (columnGroupbyColumn) {
|
|
833
|
+
if (Array.isArray(pivot_summary_multiple_columns) && pivot_summary_multiple_columns.length > 0) {
|
|
834
|
+
return updateTwoDimensionWithSummaryColumnsToTable({
|
|
835
|
+
updateTable: updateTable,
|
|
836
|
+
statisticalResult: statisticalResult
|
|
837
|
+
});
|
|
838
|
+
}
|
|
839
|
+
return updateTwoDimensionToTable({
|
|
621
840
|
updateTable: updateTable,
|
|
622
|
-
statisticalResult: statisticalResult
|
|
623
|
-
t: t
|
|
841
|
+
statisticalResult: statisticalResult
|
|
624
842
|
});
|
|
625
843
|
}
|
|
626
844
|
|
|
627
845
|
// one dimension table
|
|
628
|
-
return
|
|
846
|
+
return updatedOneDimensionToTable({
|
|
629
847
|
updateTable: updateTable,
|
|
630
|
-
statisticalResult: statisticalResult
|
|
631
|
-
t: t
|
|
848
|
+
statisticalResult: statisticalResult
|
|
632
849
|
});
|
|
633
850
|
};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { FORMULA_COLUMN_TYPES_MAP, isNumber } from 'dtable-store';
|
|
2
|
+
import { STATISTICS_COUNT_TYPE, SUMMARY_METHOD_MAP } from '../constants';
|
|
3
|
+
var getCellValueFromRow = function getCellValueFromRow(row, formulaRow, columnType, columnKey, sqlKey, isSqlQuery) {
|
|
4
|
+
if (!isSqlQuery) {
|
|
5
|
+
if (FORMULA_COLUMN_TYPES_MAP[columnType]) {
|
|
6
|
+
var cellValue = formulaRow[columnKey];
|
|
7
|
+
return Array.isArray(cellValue) ? cellValue[0] : cellValue;
|
|
8
|
+
}
|
|
9
|
+
return row[columnKey];
|
|
10
|
+
}
|
|
11
|
+
return row[sqlKey];
|
|
12
|
+
};
|
|
13
|
+
export var getPivotTableSummaryTotal = function getPivotTableSummaryTotal(summaryColumnType, summaryColumnKey, sqlKey, summaryType, summaryMethod, rows, formulaRows, isSqlQuery) {
|
|
14
|
+
if (summaryType === STATISTICS_COUNT_TYPE.COUNT) {
|
|
15
|
+
return rows.length;
|
|
16
|
+
}
|
|
17
|
+
if (summaryType !== STATISTICS_COUNT_TYPE.ADVANCED) {
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
switch (summaryMethod) {
|
|
21
|
+
case SUMMARY_METHOD_MAP.Distinct_values:
|
|
22
|
+
{
|
|
23
|
+
var count = 0;
|
|
24
|
+
var existMap = {};
|
|
25
|
+
rows.forEach(function (row) {
|
|
26
|
+
var formulaRow = formulaRows && formulaRows[row._id];
|
|
27
|
+
var cellValue = getCellValueFromRow(row, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
28
|
+
if (!cellValue) {
|
|
29
|
+
if (cellValue === 0) {
|
|
30
|
+
cellValue = '0';
|
|
31
|
+
} else {
|
|
32
|
+
cellValue = !!cellValue;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (!existMap[cellValue]) {
|
|
36
|
+
existMap[cellValue] = true;
|
|
37
|
+
count++;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return count;
|
|
41
|
+
}
|
|
42
|
+
case SUMMARY_METHOD_MAP.Sum:
|
|
43
|
+
case SUMMARY_METHOD_MAP.Mean:
|
|
44
|
+
{
|
|
45
|
+
var sum = 0;
|
|
46
|
+
var validNumbersCount = 0;
|
|
47
|
+
rows.forEach(function (row) {
|
|
48
|
+
var formulaRow = formulaRows && formulaRows[row._id];
|
|
49
|
+
var cellValue = getCellValueFromRow(row, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
50
|
+
if (isNumber(cellValue)) {
|
|
51
|
+
validNumbersCount++;
|
|
52
|
+
sum += cellValue;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
if (summaryMethod === SUMMARY_METHOD_MAP.Sum) {
|
|
56
|
+
sum = Number.parseFloat(sum.toFixed(8));
|
|
57
|
+
} else if (summaryMethod === SUMMARY_METHOD_MAP.Mean) {
|
|
58
|
+
sum = validNumbersCount === 0 ? 0 : Number.parseFloat((sum / validNumbersCount).toFixed(8));
|
|
59
|
+
}
|
|
60
|
+
return sum;
|
|
61
|
+
}
|
|
62
|
+
case SUMMARY_METHOD_MAP.Max:
|
|
63
|
+
case SUMMARY_METHOD_MAP.Min:
|
|
64
|
+
{
|
|
65
|
+
if (rows.length === 0) {
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
68
|
+
var result = rows.reduce(function (current, next) {
|
|
69
|
+
var currentFormulaRow = formulaRows && formulaRows[current._id];
|
|
70
|
+
var nextFormulaRow = formulaRows && formulaRows[next._id];
|
|
71
|
+
var currentValue = getCellValueFromRow(current, currentFormulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
72
|
+
var nextValue = getCellValueFromRow(next, nextFormulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
73
|
+
if (!nextValue && nextValue !== 0) {
|
|
74
|
+
return current;
|
|
75
|
+
}
|
|
76
|
+
var isNextGreater = currentValue < nextValue;
|
|
77
|
+
if (summaryMethod === SUMMARY_METHOD_MAP.Min) {
|
|
78
|
+
return isNextGreater ? current : next;
|
|
79
|
+
} else {
|
|
80
|
+
return isNextGreater ? next : current;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
var formulaRow = formulaRows && formulaRows[result._id];
|
|
84
|
+
return getCellValueFromRow(result, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
|
|
85
|
+
}
|
|
86
|
+
default:
|
|
87
|
+
{
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
};
|
package/es/utils/sql-utils.js
CHANGED
|
@@ -37,6 +37,21 @@ export var getSqlGroup = function getSqlGroup(granularity, column) {
|
|
|
37
37
|
}
|
|
38
38
|
return "`".concat(columnName, "`");
|
|
39
39
|
};
|
|
40
|
+
export var getPieChartSqlGroupName = function getPieChartSqlGroupName(statisticRecord, selectedColumn, groupName) {
|
|
41
|
+
var original_name_list = statisticRecord.original_name_list,
|
|
42
|
+
name_list = statisticRecord.name_list;
|
|
43
|
+
var sqlString = '';
|
|
44
|
+
var list = original_name_list.length > 0 ? original_name_list : name_list;
|
|
45
|
+
list.forEach(function (item, index) {
|
|
46
|
+
if (index === 0) {
|
|
47
|
+
sqlString += getSqlGroupName(name_list[0], original_name_list[0], selectedColumn);
|
|
48
|
+
} else {
|
|
49
|
+
var sqlName = getSqlGroupName(name_list[index], original_name_list[index], selectedColumn);
|
|
50
|
+
sqlString = "".concat(sqlString, " or ").concat(groupName, "=").concat(sqlName);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return sqlString;
|
|
54
|
+
};
|
|
40
55
|
export var getSqlString = function getSqlString(statItem, statisticRecord, _ref) {
|
|
41
56
|
var isColumn = _ref.isColumn,
|
|
42
57
|
isCurrentView = _ref.isCurrentView,
|
|
@@ -63,6 +78,9 @@ export var getSqlString = function getSqlString(statItem, statisticRecord, _ref)
|
|
|
63
78
|
group_original_name = statisticRecord.group_original_name,
|
|
64
79
|
group_name = statisticRecord.group_name;
|
|
65
80
|
var sqlName = getSqlGroupName(name, original_name, selectedColumn);
|
|
81
|
+
if ((type === STAT_TYPE.PIE || type === STAT_TYPE.RING) && original_name === 'Others') {
|
|
82
|
+
sqlName = getPieChartSqlGroupName(statisticRecord, selectedColumn, groupName);
|
|
83
|
+
}
|
|
66
84
|
var sqlGroupName;
|
|
67
85
|
if (isGroup) {
|
|
68
86
|
sqlGroupName = getSqlGroupName(group_name, group_original_name, columnSelectedColumn);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dtable-statistic",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.13",
|
|
4
4
|
"description": "statistics",
|
|
5
5
|
"main": "dist/dtable-statistic.js",
|
|
6
6
|
"author": "seafile",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"@seafile/seafile-calendar": "0.0.24",
|
|
13
13
|
"comlink": "^4.3.1",
|
|
14
14
|
"dayjs": "1.10.7",
|
|
15
|
-
"dtable-store": "4.0.
|
|
16
|
-
"dtable-web-api": "4.0.
|
|
15
|
+
"dtable-store": "4.0.12",
|
|
16
|
+
"dtable-web-api": "4.0.5",
|
|
17
17
|
"glamor": "^2.20.40",
|
|
18
18
|
"html2canvas": "^1.4.1",
|
|
19
19
|
"rc-slider": "^9.7.4",
|