sea-chart 2.0.37 → 2.0.38
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/dist/api/index.js +20 -69
- package/dist/assets/css/sea-chart-d3-tooltip.css +0 -1
- package/dist/components/cell-factory/FormatterConfig.js +55 -62
- package/dist/components/cell-factory/SimpleCellFormatter.js +5 -12
- package/dist/components/cell-factory/SingleSelectOption.js +11 -18
- package/dist/components/cell-factory/cell-editor-factory.js +5 -12
- package/dist/components/cell-factory/cell-formatter-factory.js +4 -11
- package/dist/components/cell-factory/link-content.js +30 -38
- package/dist/components/chart-color-selector/color-selector.js +11 -18
- package/dist/components/collaborator/index.js +7 -14
- package/dist/components/color-picker/index.js +12 -19
- package/dist/components/color-popover/color-rules/color-rule.js +26 -34
- package/dist/components/color-popover/color-rules/index.js +7 -15
- package/dist/components/color-popover/color-rules/rule-filters/filter.js +27 -34
- package/dist/components/color-popover/color-rules/rule-filters/index.js +17 -25
- package/dist/components/color-popover/color-rules/rule-filters/number-input.js +9 -17
- package/dist/components/color-popover/color-rules-popover.js +31 -37
- package/dist/components/color-popover/color-selector-popover.js +12 -20
- package/dist/components/color-setting/color-group-selector.js +13 -21
- package/dist/components/common-add-tool/index.js +8 -15
- package/dist/components/data-process-setter/data-setting-header.js +7 -14
- package/dist/components/data-process-setter/hide-column-setter.js +13 -20
- package/dist/components/data-process-setter/index.js +4 -27
- package/dist/components/data-process-setter/sort-setter.js +18 -26
- package/dist/components/draggable/Draggable.js +7 -13
- package/dist/components/drill-down-settings/drill-down-fields-popover/index.js +41 -48
- package/dist/components/drill-down-settings/drill-down-fields-settings/index.js +10 -18
- package/dist/components/drill-down-settings/index.js +11 -18
- package/dist/components/dtable-popover/index.js +13 -20
- package/dist/components/dtable-search-input/index.js +13 -21
- package/dist/components/font-settings/index.js +14 -22
- package/dist/components/goal-line-setting/goal-setting-item.js +6 -14
- package/dist/components/goal-line-setting/index.js +12 -19
- package/dist/components/highlighter/highlighter.js +7 -14
- package/dist/components/icon/index.js +12 -23
- package/dist/components/index.js +7 -48
- package/dist/components/loading/index.js +6 -13
- package/dist/components/number-input/index.js +11 -24
- package/dist/components/pixel-editor/index.js +15 -23
- package/dist/components/popover/hide-column-popover/hide-column-popover-widgets/hide-column-item.js +13 -16
- package/dist/components/popover/hide-column-popover/hide-column-popover.css +5 -1
- package/dist/components/popover/hide-column-popover/hide-column-popover.js +28 -38
- package/dist/components/popover/sort-popover/sort-popover-widgets/sort-utils.js +9 -18
- package/dist/components/popover/sort-popover/sort-popover.js +58 -69
- package/dist/components/resize-handle/ResizeHandle.js +6 -13
- package/dist/components/row-card/row-card-header-cell.js +17 -24
- package/dist/components/row-card/row-card-header.js +15 -22
- package/dist/components/row-card/row-card-item.js +35 -43
- package/dist/components/row-card/row-card.js +17 -25
- package/dist/components/statistic-record-dialog/index.js +61 -68
- package/dist/components/tooltip/index.js +39 -28
- package/dist/components/types-dialog/index.js +62 -70
- package/dist/components/types-dialog/use-force-update.js +4 -10
- package/dist/constants/color-rules.js +8 -14
- package/dist/constants/common-constants.js +8 -14
- package/dist/constants/error.js +2 -8
- package/dist/constants/geolocation.js +9 -15
- package/dist/constants/index.js +142 -271
- package/dist/constants/key-codes.js +0 -2
- package/dist/constants/model.js +3 -9
- package/dist/constants/regions.js +3 -8
- package/dist/constants/style.js +6 -12
- package/dist/constants/table.js +1 -7
- package/dist/constants/type-image.js +33 -39
- package/dist/constants/type.js +3 -9
- package/dist/context.js +13 -20
- package/dist/editor/index.js +13 -16
- package/dist/index.js +13 -104
- package/dist/intl.js +10 -17
- package/dist/locale/index.js +16 -23
- package/dist/locale/lang/de.js +2 -7
- package/dist/locale/lang/en.js +2 -7
- package/dist/locale/lang/es.js +2 -7
- package/dist/locale/lang/fr.js +2 -7
- package/dist/locale/lang/pt.js +2 -7
- package/dist/locale/lang/ru.js +2 -7
- package/dist/locale/lang/zh_CN.js +2 -7
- package/dist/model/area-group.js +12 -19
- package/dist/model/area.js +12 -19
- package/dist/model/bar-custom.js +11 -18
- package/dist/model/bar-group.js +12 -19
- package/dist/model/bar-stack.js +10 -17
- package/dist/model/bar.js +11 -18
- package/dist/model/base-model.js +4 -11
- package/dist/model/basic-number-card.js +13 -20
- package/dist/model/chart.js +7 -13
- package/dist/model/combination.js +15 -22
- package/dist/model/compare-bar.js +14 -21
- package/dist/model/completeness-group.js +11 -18
- package/dist/model/completeness.js +10 -17
- package/dist/model/dashboard.js +7 -14
- package/dist/model/funnel.js +14 -21
- package/dist/model/generic-model.js +135 -143
- package/dist/model/heat-map.js +9 -16
- package/dist/model/horizontal-bar.js +11 -18
- package/dist/model/horizontal-group-bar.js +10 -17
- package/dist/model/index.js +69 -93
- package/dist/model/line-group.js +13 -20
- package/dist/model/line.js +12 -19
- package/dist/model/map-bubble.js +14 -17
- package/dist/model/map.js +12 -19
- package/dist/model/mirror.js +13 -20
- package/dist/model/pie.js +12 -19
- package/dist/model/ring.js +12 -19
- package/dist/model/scatter.js +10 -17
- package/dist/model/stacked-horizontal-bar.js +11 -18
- package/dist/model/table-element.js +5 -12
- package/dist/model/table.js +7 -14
- package/dist/model/tree-map.js +7 -14
- package/dist/model/trend.js +11 -18
- package/dist/model/user.js +1 -7
- package/dist/model/world-map-bubble.js +12 -19
- package/dist/model/world-map.js +12 -19
- package/dist/services/map-json.js +14 -17
- package/dist/settings/advance-bar-settings/data-settings.js +36 -44
- package/dist/settings/advance-bar-settings/index.js +3 -20
- package/dist/settings/advance-bar-settings/style-settings.js +66 -73
- package/dist/settings/bar-settings/data-settings.js +39 -47
- package/dist/settings/bar-settings/index.js +3 -20
- package/dist/settings/bar-settings/style-settings.js +51 -59
- package/dist/settings/basic-number-card/data-settings.js +50 -57
- package/dist/settings/basic-number-card/index.js +3 -20
- package/dist/settings/basic-number-card/style-settings.js +19 -27
- package/dist/settings/combination-settings/data-settings.js +55 -64
- package/dist/settings/combination-settings/index.js +3 -20
- package/dist/settings/combination-settings/style-settings.js +67 -75
- package/dist/settings/completeness-settings/callbacks/callbacks.js +16 -27
- package/dist/settings/completeness-settings/data-settings/completion-settings.js +21 -28
- package/dist/settings/completeness-settings/data-settings/data-settings.js +25 -32
- package/dist/settings/completeness-settings/index.js +3 -20
- package/dist/settings/completeness-settings/style-settings.js +19 -26
- package/dist/settings/dashboard-settings/data-settings.js +44 -51
- package/dist/settings/dashboard-settings/index.js +2 -13
- package/dist/settings/data-settings.js +72 -79
- package/dist/settings/funnel-settings/components/dnd-item/dnd-item.js +12 -19
- package/dist/settings/funnel-settings/components/dnd-list.js +15 -23
- package/dist/settings/funnel-settings/components/funnel-label-setting.js +32 -40
- package/dist/settings/funnel-settings/components/funnel-layer-setting.js +22 -30
- package/dist/settings/funnel-settings/data-settings.js +23 -31
- package/dist/settings/funnel-settings/index.js +3 -20
- package/dist/settings/funnel-settings/style-settings.js +11 -19
- package/dist/settings/heat-map-settings/data-settings.js +18 -26
- package/dist/settings/heat-map-settings/index.js +3 -20
- package/dist/settings/heat-map-settings/style-settings.js +18 -26
- package/dist/settings/horizontal-bar-settings/data-settings.js +12 -19
- package/dist/settings/horizontal-bar-settings/index.js +3 -20
- package/dist/settings/horizontal-bar-settings/style-settings.js +12 -19
- package/dist/settings/index.js +57 -70
- package/dist/settings/map-settings/components/location-field-selector.js +10 -17
- package/dist/settings/map-settings/components/map-level-selector.js +11 -18
- package/dist/settings/map-settings/components/map-province-city-selector.js +19 -26
- package/dist/settings/map-settings/index.js +3 -20
- package/dist/settings/map-settings/map-data-settings.js +23 -30
- package/dist/settings/map-settings/map-style-settings.js +27 -35
- package/dist/settings/mirror-settings/data-settings.js +26 -34
- package/dist/settings/mirror-settings/index.js +2 -13
- package/dist/settings/pie-settings/data-settings.js +33 -41
- package/dist/settings/pie-settings/index.js +3 -20
- package/dist/settings/pie-settings/style-settings.js +47 -55
- package/dist/settings/scatter/data-settings.js +27 -34
- package/dist/settings/scatter/index.js +3 -12
- package/dist/settings/stacks-settings/index.js +19 -27
- package/dist/settings/stacks-settings/stack-item-settings.js +19 -27
- package/dist/settings/style-settings.js +65 -73
- package/dist/settings/table-element-settings/components/data-filter.js +49 -58
- package/dist/settings/table-element-settings/data-settings.js +21 -29
- package/dist/settings/table-element-settings/index.css +1 -31
- package/dist/settings/table-element-settings/index.js +2 -13
- package/dist/settings/table-settings/data-settings.js +113 -120
- package/dist/settings/table-settings/index.js +2 -13
- package/dist/settings/time-comparison-settings/data-settings.js +43 -51
- package/dist/settings/time-comparison-settings/index.js +3 -20
- package/dist/settings/time-comparison-settings/style-settings.js +44 -52
- package/dist/settings/trend-settings/data-settings.js +24 -32
- package/dist/settings/trend-settings/index.js +3 -20
- package/dist/settings/trend-settings/style-setting.js +19 -27
- package/dist/settings/widgets/basic-summary/index.js +59 -66
- package/dist/settings/widgets/chart-type/index.js +18 -26
- package/dist/settings/widgets/color-settings/index.js +72 -80
- package/dist/settings/widgets/common-data-settings.js +27 -34
- package/dist/settings/widgets/data-filter/index.js +59 -59
- package/dist/settings/widgets/data-sort.js +16 -24
- package/dist/settings/widgets/date-summary-item.js +26 -34
- package/dist/settings/widgets/display-values-settings/index.js +14 -22
- package/dist/settings/widgets/divider/index.js +8 -16
- package/dist/settings/widgets/font-settings/font-color-settings.js +11 -19
- package/dist/settings/widgets/font-settings/font-size-settings.js +14 -22
- package/dist/settings/widgets/font-settings/font-weight-settings.js +17 -25
- package/dist/settings/widgets/font-settings/index.js +4 -27
- package/dist/settings/widgets/group-by.js +52 -59
- package/dist/settings/widgets/min-max-setting.js +10 -18
- package/dist/settings/widgets/mininum-slice-percent.js +10 -18
- package/dist/settings/widgets/numeric-summary-item.js +25 -33
- package/dist/settings/widgets/select-line-type/index.js +10 -17
- package/dist/settings/widgets/select-table/index.js +9 -16
- package/dist/settings/widgets/select-view/index.js +20 -28
- package/dist/settings/widgets/stack.js +14 -22
- package/dist/settings/widgets/summary-method-setting.js +17 -25
- package/dist/settings/widgets/summary-settings.js +75 -82
- package/dist/settings/widgets/switch/index.js +9 -16
- package/dist/settings/widgets/text-horizontal-settings.js +15 -23
- package/dist/settings/widgets/time-picker.js +29 -37
- package/dist/settings/widgets/title-settings/index.js +29 -37
- package/dist/settings/widgets/title-settings/title-text.js +5 -12
- package/dist/settings/widgets/x-axios.js +0 -1
- package/dist/settings/widgets/y-axis-group-settings.js +65 -72
- package/dist/utils/cell-format-utils.js +25 -33
- package/dist/utils/cell-value-utils.js +4 -11
- package/dist/utils/chart-utils/base-utils.js +467 -367
- package/dist/utils/chart-utils/index.js +29 -40
- package/dist/utils/chart-utils/original-data-utils/basic-chart-calculator.js +78 -85
- package/dist/utils/chart-utils/original-data-utils/card-calculator.js +20 -21
- package/dist/utils/chart-utils/original-data-utils/combination-calculator.js +45 -52
- package/dist/utils/chart-utils/original-data-utils/compare-bar-chart-calculator.js +21 -28
- package/dist/utils/chart-utils/original-data-utils/completeness-calculator.js +33 -40
- package/dist/utils/chart-utils/original-data-utils/dashboard-calculator.js +28 -26
- package/dist/utils/chart-utils/original-data-utils/index.js +50 -57
- package/dist/utils/chart-utils/original-data-utils/mirror-calculator.js +19 -26
- package/dist/utils/chart-utils/original-data-utils/pivot-table-calculator.js +94 -97
- package/dist/utils/chart-utils/original-data-utils/scatter-calculator.js +19 -25
- package/dist/utils/chart-utils/original-data-utils/trend-calculator.js +50 -36
- package/dist/utils/chart-utils/sql-statistics-utils.js +385 -388
- package/dist/utils/chart.js +9 -17
- package/dist/utils/collaborator-manager.js +3 -9
- package/dist/utils/collaborator-utils.js +19 -31
- package/dist/utils/collaborator.js +6 -15
- package/dist/utils/color-utils.js +18 -29
- package/dist/utils/column-utils.js +88 -102
- package/dist/utils/common-utils.js +28 -53
- package/dist/utils/concurrency-manager.js +1 -7
- package/dist/utils/contexts.js +7 -11
- package/dist/utils/date-translate.js +12 -20
- package/dist/utils/digital-sign-utils.js +7 -14
- package/dist/utils/event-bus.js +1 -7
- package/dist/utils/hotkey.js +5 -11
- package/dist/utils/index.js +73 -219
- package/dist/utils/key-generator.js +2 -9
- package/dist/utils/map.js +22 -31
- package/dist/utils/object-utils.js +2 -8
- package/dist/utils/options-utils.js +10 -18
- package/dist/utils/row-record-utils.js +251 -183
- package/dist/utils/row-utils.js +27 -38
- package/dist/utils/search.js +24 -32
- package/dist/utils/sql/chart-data-sql.js +106 -112
- package/dist/utils/sql/column-2-sql-column.js +162 -172
- package/dist/utils/sql/index.js +3 -27
- package/dist/utils/trend-utils.js +50 -45
- package/dist/view/index.css +2 -8
- package/dist/view/index.js +102 -103
- package/dist/view/title/index.js +16 -24
- package/dist/view/wrapper/area-group.js +57 -57
- package/dist/view/wrapper/area.js +43 -51
- package/dist/view/wrapper/bar-compare.js +56 -48
- package/dist/view/wrapper/bar-custom-stack.js +73 -55
- package/dist/view/wrapper/bar-group.js +94 -73
- package/dist/view/wrapper/bar-stack.js +49 -57
- package/dist/view/wrapper/bar.js +40 -48
- package/dist/view/wrapper/basic-number-card.js +50 -34
- package/dist/view/wrapper/chart-component.js +164 -569
- package/dist/view/wrapper/combination.js +55 -63
- package/dist/view/wrapper/completeness-group.js +140 -93
- package/dist/view/wrapper/completeness.js +36 -44
- package/dist/view/wrapper/dashboard.js +104 -59
- package/dist/view/wrapper/funnel.js +40 -43
- package/dist/view/wrapper/heat-map.js +62 -70
- package/dist/view/wrapper/horizontal-bar-group.js +70 -58
- package/dist/view/wrapper/horizontal-bar-stack.js +48 -56
- package/dist/view/wrapper/horizontal-bar.js +41 -49
- package/dist/view/wrapper/index.js +107 -115
- package/dist/view/wrapper/line-group.js +49 -52
- package/dist/view/wrapper/line.js +42 -50
- package/dist/view/wrapper/map-bubble.js +40 -48
- package/dist/view/wrapper/map-world-bubble.js +40 -47
- package/dist/view/wrapper/map-world.js +42 -49
- package/dist/view/wrapper/map.js +42 -50
- package/dist/view/wrapper/mirror.js +41 -49
- package/dist/view/wrapper/pie.js +45 -53
- package/dist/view/wrapper/ring.js +50 -58
- package/dist/view/wrapper/scatter.js +50 -56
- package/dist/view/wrapper/table/index.js +14 -22
- package/dist/view/wrapper/table/one-dimension-table-no-numeric-columns.js +49 -57
- package/dist/view/wrapper/table/one-dimension-table-with-numeric-columns.js +53 -61
- package/dist/view/wrapper/table/pivot-table-display-name.js +82 -90
- package/dist/view/wrapper/table/two-dimension-table.js +85 -92
- package/dist/view/wrapper/table-element/components/dataset-utils.js +23 -36
- package/dist/view/wrapper/table-element/components/formatter.js +90 -99
- package/dist/view/wrapper/table-element/components/formatters/FileFormatter/index.js +23 -32
- package/dist/view/wrapper/table-element/components/formatters/formula-formatter.js +9 -16
- package/dist/view/wrapper/table-element/components/formatters/link-formatter.js +90 -97
- package/dist/view/wrapper/table-element/components/formula-formatter.js +9 -16
- package/dist/view/wrapper/table-element/components/link-formatter.js +90 -97
- package/dist/view/wrapper/table-element/components/record.js +13 -20
- package/dist/view/wrapper/table-element/components/records-body.js +9 -17
- package/dist/view/wrapper/table-element/components/records-header/index.js +7 -16
- package/dist/view/wrapper/table-element/components/records-header/records-header-cell.js +8 -16
- package/dist/view/wrapper/table-element/components/records.js +25 -33
- package/dist/view/wrapper/table-element/components/resize-column-handle/resize-column-handle.js +8 -13
- package/dist/view/wrapper/table-element/components/utils.js +6 -16
- package/dist/view/wrapper/table-element/components/value-display-utils.js +4 -11
- package/dist/view/wrapper/table-element/components/vertical-scrollbar/index.js +6 -13
- package/dist/view/wrapper/table-element/index.js +30 -43
- package/dist/view/wrapper/treemap.js +38 -46
- package/dist/view/wrapper/trend.js +80 -65
- package/package.json +15 -12
|
@@ -1,109 +1,99 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.default = void 0;
|
|
9
|
-
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
10
|
-
var _dtableUtils = require("dtable-utils");
|
|
11
|
-
var _lodash = require("lodash");
|
|
12
|
-
var _lodashEs = require("lodash-es");
|
|
13
|
-
var _constants = require("../../constants");
|
|
14
|
-
var _sql = require("../sql");
|
|
15
|
-
var _cellFormatUtils = require("../cell-format-utils");
|
|
16
|
-
var _column2SqlColumn = require("../sql/column-2-sql-column");
|
|
17
|
-
var _columnUtils = require("../column-utils");
|
|
18
|
-
var _trendUtils = require("../trend-utils");
|
|
19
|
-
var _intl = _interopRequireDefault(require("../../intl"));
|
|
20
|
-
var _dateTranslate = require("../date-translate");
|
|
21
|
-
var _baseUtils = _interopRequireWildcard(require("./base-utils"));
|
|
22
1
|
var _SQLStatisticsUtils;
|
|
2
|
+
import dayjs from 'dayjs';
|
|
3
|
+
import { CellType, MULTIPLE_CELL_VALUE_COLUMN_TYPE_MAP, getFormulaDisplayString, getPrecisionNumber, getTableById, getTableColumnByKey, isNumber } from 'dtable-utils';
|
|
4
|
+
import { isObject } from 'lodash';
|
|
5
|
+
import { cloneDeep } from 'lodash-es';
|
|
6
|
+
import { CHART_SUMMARY_TYPE, CHART_TYPE, SUPPORT_DATA_SORT_CHART_TYPES, TABLE_DIMENSIONS, Y_AXIS_TYPE_PREFIX, STYLE_COLORS, TREND_TYPES, CHART_STYLE_COLORS, MAP_CHART_TYPES } from '../../constants';
|
|
7
|
+
import { chartColumn2SqlColumn, summaryMethodColumn2SqlColumn } from '../sql';
|
|
8
|
+
import { getClientLinkDisplayString } from '../cell-format-utils';
|
|
9
|
+
import { column2SqlColumn } from '../sql/column-2-sql-column';
|
|
10
|
+
import { formatNumericValue, getFormattedValue, getSummaryResult } from '../column-utils';
|
|
11
|
+
import { getCompareDate } from '../trend-utils';
|
|
12
|
+
import intl from '../../intl';
|
|
13
|
+
import { convertQuarterToDate } from '../date-translate';
|
|
14
|
+
import BaseUtils, { findIfColumnDataIsArray } from './base-utils';
|
|
23
15
|
class SQLStatisticsUtils {}
|
|
24
16
|
_SQLStatisticsUtils = SQLStatisticsUtils;
|
|
25
17
|
SQLStatisticsUtils.DATA_SOURCE = 'sql_statistics';
|
|
26
18
|
SQLStatisticsUtils.getGroupLabelFromDB = async (cellValue, column, chart, isPivot) => {
|
|
27
|
-
const dateGranularity = _baseUtils.default.getDateGranularityByType(chart);
|
|
28
19
|
const {
|
|
29
20
|
type,
|
|
30
21
|
data
|
|
31
22
|
} = column;
|
|
32
23
|
switch (type) {
|
|
33
|
-
case
|
|
24
|
+
case CellType.TEXT:
|
|
34
25
|
{
|
|
35
26
|
return cellValue || null;
|
|
36
27
|
}
|
|
37
|
-
case
|
|
38
|
-
case
|
|
39
|
-
case
|
|
28
|
+
case CellType.DATE:
|
|
29
|
+
case CellType.CTIME:
|
|
30
|
+
case CellType.MTIME:
|
|
40
31
|
{
|
|
41
|
-
// handled in sql query result
|
|
42
32
|
return cellValue;
|
|
43
33
|
}
|
|
44
|
-
case
|
|
34
|
+
case CellType.NUMBER:
|
|
45
35
|
{
|
|
46
36
|
if (!cellValue && cellValue !== 0) return null;
|
|
47
|
-
return
|
|
37
|
+
return getPrecisionNumber(cellValue, data);
|
|
48
38
|
}
|
|
49
|
-
case
|
|
39
|
+
case CellType.SINGLE_SELECT:
|
|
50
40
|
{
|
|
51
41
|
let isInvalidValue = data && data.options && data.options.findIndex(opt => opt.id === cellValue) < 0;
|
|
52
42
|
return isInvalidValue ? null : cellValue;
|
|
53
43
|
}
|
|
54
|
-
case
|
|
44
|
+
case CellType.MULTIPLE_SELECT:
|
|
55
45
|
{
|
|
56
46
|
let options = data && data.options;
|
|
57
47
|
if (!Array.isArray(options) || options.length === 0) return [];
|
|
58
48
|
if (!Array.isArray(cellValue) || cellValue.length === 0) return [];
|
|
59
49
|
return cellValue.filter(optionId => options.find(option => option.id === optionId));
|
|
60
50
|
}
|
|
61
|
-
case
|
|
51
|
+
case CellType.COLLABORATOR:
|
|
62
52
|
{
|
|
63
53
|
if (!Array.isArray(cellValue) || cellValue.length === 0) return [];
|
|
64
54
|
return cellValue;
|
|
65
55
|
}
|
|
66
|
-
case
|
|
67
|
-
case
|
|
56
|
+
case CellType.CREATOR:
|
|
57
|
+
case CellType.LAST_MODIFIER:
|
|
68
58
|
{
|
|
69
59
|
return cellValue ? cellValue : null;
|
|
70
60
|
}
|
|
71
|
-
case
|
|
61
|
+
case CellType.GEOLOCATION:
|
|
62
|
+
{
|
|
63
|
+
return cellValue || null;
|
|
64
|
+
}
|
|
65
|
+
case CellType.FORMULA:
|
|
72
66
|
{
|
|
67
|
+
if (Array.isArray(cellValue)) {
|
|
68
|
+
const validValue = getFormulaDisplayString(cellValue, data) || [];
|
|
69
|
+
return validValue;
|
|
70
|
+
}
|
|
73
71
|
return cellValue || null;
|
|
74
72
|
}
|
|
75
|
-
case
|
|
76
|
-
case _dtableUtils.CellType.LINK_FORMULA:
|
|
73
|
+
case CellType.LINK_FORMULA:
|
|
77
74
|
{
|
|
78
75
|
const {
|
|
79
|
-
array_type,
|
|
80
76
|
result_type
|
|
81
77
|
} = data || {};
|
|
82
|
-
const validValue = (0, _dtableUtils.getFormulaDisplayString)(cellValue, data) || [];
|
|
83
|
-
if (array_type === 'date' && (cellValue === null || cellValue === void 0 ? void 0 : cellValue.length) === 1) {
|
|
84
|
-
if (!dateGranularity) return validValue;
|
|
85
|
-
if (dateGranularity.toUpperCase() === 'QUARTER') return _dtableUtils.DateUtils.getDateByGranularity(validValue, 'QUARTAR');
|
|
86
|
-
return _dtableUtils.DateUtils.getDateByGranularity(validValue, dateGranularity);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
78
|
// handles mutiple select
|
|
90
79
|
if (result_type === 'array') {
|
|
91
80
|
return cellValue;
|
|
92
81
|
}
|
|
82
|
+
const validValue = getFormulaDisplayString(cellValue, data) || [];
|
|
93
83
|
if (!validValue && validValue !== 0) {
|
|
94
84
|
return null;
|
|
95
85
|
}
|
|
96
86
|
return validValue;
|
|
97
87
|
}
|
|
98
|
-
case
|
|
88
|
+
case CellType.LINK:
|
|
99
89
|
{
|
|
100
|
-
return Array.isArray(cellValue) ? cellValue.map(linked =>
|
|
90
|
+
return Array.isArray(cellValue) ? cellValue.map(linked => getClientLinkDisplayString([linked], data, {})) : [];
|
|
101
91
|
}
|
|
102
|
-
case
|
|
92
|
+
case CellType.CHECKBOX:
|
|
103
93
|
{
|
|
104
94
|
return String(cellValue) === 'true' ? 'Checked' : 'Unchecked';
|
|
105
95
|
}
|
|
106
|
-
case
|
|
96
|
+
case CellType.RATE:
|
|
107
97
|
{
|
|
108
98
|
return cellValue ? String(cellValue) : null;
|
|
109
99
|
}
|
|
@@ -178,7 +168,7 @@ SQLStatisticsUtils.updateTwoDimensionRows = (chart, pivot_rows, pivot_columns, i
|
|
|
178
168
|
const {
|
|
179
169
|
summary_type
|
|
180
170
|
} = chart.config;
|
|
181
|
-
const isCount = summary_type ===
|
|
171
|
+
const isCount = summary_type === CHART_SUMMARY_TYPE.COUNT;
|
|
182
172
|
const {
|
|
183
173
|
sqlSummaryColumnKey,
|
|
184
174
|
summarySQLColumnName2ColumnKey = {}
|
|
@@ -198,11 +188,11 @@ SQLStatisticsUtils.updateTwoDimensionRows = (chart, pivot_rows, pivot_columns, i
|
|
|
198
188
|
let {
|
|
199
189
|
key
|
|
200
190
|
} = c;
|
|
201
|
-
if (
|
|
191
|
+
if (BaseUtils.isSameGroup(isColumnDataAsAnArray, cellValue, key)) {
|
|
202
192
|
if (cells[key]) {
|
|
203
193
|
cells[key].rows.push(row);
|
|
204
194
|
if (isCount) {
|
|
205
|
-
if (
|
|
195
|
+
if (BaseUtils.isCollaboratorColumnOrMultipleColumn(columnMap)) {
|
|
206
196
|
cells[key].total = total + row[sqlSummaryColumnKey];
|
|
207
197
|
} else {
|
|
208
198
|
cells[key].total = row[sqlSummaryColumnKey];
|
|
@@ -214,10 +204,10 @@ SQLStatisticsUtils.updateTwoDimensionRows = (chart, pivot_rows, pivot_columns, i
|
|
|
214
204
|
const nextValue = row[currentSqlName];
|
|
215
205
|
// use columnKey to find current value
|
|
216
206
|
const currentValue = Object.values(cells[key].total).find(item => item[2] === columnKey)[1];
|
|
217
|
-
const computedValue =
|
|
207
|
+
const computedValue = BaseUtils.getSummaryValue({
|
|
218
208
|
summaryMethod: current.summary_method.toUpperCase(),
|
|
219
209
|
summaryColumn: current.column
|
|
220
|
-
}, currentValue, nextValue,
|
|
210
|
+
}, currentValue, nextValue, BaseUtils.isCollaboratorColumnOrMultipleColumn(columnMap));
|
|
221
211
|
const columnName = current.column.name;
|
|
222
212
|
|
|
223
213
|
// keep column key to find currentValue on updating
|
|
@@ -255,7 +245,7 @@ SQLStatisticsUtils.updateTwoDimensionRows = (chart, pivot_rows, pivot_columns, i
|
|
|
255
245
|
} else {
|
|
256
246
|
updatedPivotRow.total = Object.values(cells).reduce((acc, item) => {
|
|
257
247
|
item.total.forEach(t => {
|
|
258
|
-
|
|
248
|
+
isNumber(t[1]) && (acc += t[1]);
|
|
259
249
|
});
|
|
260
250
|
return acc;
|
|
261
251
|
}, 0);
|
|
@@ -271,7 +261,7 @@ SQLStatisticsUtils.updateTwoDimensionRows = (chart, pivot_rows, pivot_columns, i
|
|
|
271
261
|
let {
|
|
272
262
|
key
|
|
273
263
|
} = c;
|
|
274
|
-
if (
|
|
264
|
+
if (BaseUtils.isSameGroup(isColumnDataAsAnArray, cellValue, key)) {
|
|
275
265
|
let total;
|
|
276
266
|
if (isCount) {
|
|
277
267
|
total = row[sqlSummaryColumnKey];
|
|
@@ -296,9 +286,9 @@ SQLStatisticsUtils.updateTwoDimensionRows = (chart, pivot_rows, pivot_columns, i
|
|
|
296
286
|
const cellList = Object.values(cells);
|
|
297
287
|
total = cellList.reduce((acc, item) => {
|
|
298
288
|
let num;
|
|
299
|
-
if (
|
|
289
|
+
if (isObject(item.total)) {
|
|
300
290
|
num = item.total.reduce((acc, item) => {
|
|
301
|
-
|
|
291
|
+
isNumber(item[1]) && (acc += item[1]);
|
|
302
292
|
return acc;
|
|
303
293
|
}, 0);
|
|
304
294
|
} else {
|
|
@@ -328,7 +318,7 @@ SQLStatisticsUtils.getAndUpdateTwoDimensionTotal = (pivot_columns_total, pivot_c
|
|
|
328
318
|
if (cell) {
|
|
329
319
|
let pivot_column_total = pivot_columns_total && pivot_columns_total[key] ? pivot_columns_total[key] : 0;
|
|
330
320
|
const currentCellTotal = Array.isArray(cell.total) ? cell.total.reduce((acc, item) => {
|
|
331
|
-
|
|
321
|
+
isNumber(item[1]) && (acc += item[1]);
|
|
332
322
|
return acc;
|
|
333
323
|
}, 0) : parseInt(cell.total);
|
|
334
324
|
pivot_columns_total[key] = pivot_column_total + currentCellTotal;
|
|
@@ -350,22 +340,22 @@ SQLStatisticsUtils.oneDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
350
340
|
} = chartSQLMap;
|
|
351
341
|
let pivot_columns = [];
|
|
352
342
|
let pivot_rows = [];
|
|
353
|
-
const isCount = summary_type ===
|
|
343
|
+
const isCount = summary_type === CHART_SUMMARY_TYPE.COUNT;
|
|
354
344
|
|
|
355
345
|
// if key is an array, handle it here ,currently only handle collaborator and multiple select
|
|
356
346
|
// MULTIPLE_CELL_VALUE_COLUMN_TYPE = [CellType.COLLABORATOR, CellType.MULTIPLE_SELECT, CellType.LINK]
|
|
357
|
-
const isGroupByColumnLinkFormula = groupbyColumn.type ===
|
|
347
|
+
const isGroupByColumnLinkFormula = groupbyColumn.type === CellType.LINK_FORMULA;
|
|
358
348
|
let newSqlRows = sqlRows;
|
|
359
349
|
if (isGroupByColumnLinkFormula) {
|
|
360
350
|
const {
|
|
361
351
|
array_type
|
|
362
352
|
} = groupbyColumn.data;
|
|
363
|
-
if ([
|
|
364
|
-
newSqlRows =
|
|
353
|
+
if ([CellType.COLLABORATOR, CellType.MULTIPLE_SELECT].includes(array_type)) {
|
|
354
|
+
newSqlRows = BaseUtils.formatedTableSqlRowsByCollaboratorAndMultiple(chart, sqlRows, chartSQLMap, columnMap);
|
|
365
355
|
}
|
|
366
356
|
}
|
|
367
|
-
if ([
|
|
368
|
-
newSqlRows =
|
|
357
|
+
if ([CellType.COLLABORATOR, CellType.MULTIPLE_SELECT].includes(groupbyColumn.type)) {
|
|
358
|
+
newSqlRows = BaseUtils.formatedTableSqlRowsByCollaboratorAndMultiple(chart, sqlRows, chartSQLMap, columnMap);
|
|
369
359
|
}
|
|
370
360
|
if (isCount) {
|
|
371
361
|
let allTotal = 0;
|
|
@@ -381,7 +371,7 @@ SQLStatisticsUtils.oneDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
381
371
|
}
|
|
382
372
|
});
|
|
383
373
|
}
|
|
384
|
-
if (groupbyColumn.type ===
|
|
374
|
+
if (groupbyColumn.type === CellType.LINK_FORMULA && groupbyColumn.data.array_type === 'date') {
|
|
385
375
|
pivot_rows = pivot_rows.reduce((acc, item) => {
|
|
386
376
|
const {
|
|
387
377
|
name,
|
|
@@ -398,7 +388,7 @@ SQLStatisticsUtils.oneDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
398
388
|
return acc;
|
|
399
389
|
}, []);
|
|
400
390
|
}
|
|
401
|
-
|
|
391
|
+
BaseUtils.sortCharts(pivot_rows, groupbyColumn, 'name', true);
|
|
402
392
|
return {
|
|
403
393
|
pivot_columns,
|
|
404
394
|
pivot_rows: pivot_rows,
|
|
@@ -417,7 +407,7 @@ SQLStatisticsUtils.oneDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
417
407
|
let totalTemplate = {};
|
|
418
408
|
Object.values(summaryColumnKeys).forEach(key => {
|
|
419
409
|
const summaryMethod = summaryTableColumnKey2Method[key];
|
|
420
|
-
totalTemplate[key] =
|
|
410
|
+
totalTemplate[key] = BaseUtils.initTotal(summaryMethod);
|
|
421
411
|
pivot_columns.push({
|
|
422
412
|
key
|
|
423
413
|
});
|
|
@@ -434,14 +424,14 @@ SQLStatisticsUtils.oneDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
434
424
|
let columnKey = summarySQLColumnName2ColumnKey[key];
|
|
435
425
|
let summaryColumn = summaryTableColumnKey2Column[columnKey];
|
|
436
426
|
const summaryMethod = summaryTableColumnKey2Method[columnKey];
|
|
437
|
-
let value = row[key] ||
|
|
438
|
-
allTotal[columnKey] =
|
|
427
|
+
let value = row[key] || BaseUtils.initTotal(summaryMethod);
|
|
428
|
+
allTotal[columnKey] = BaseUtils.getSummaryValue({
|
|
439
429
|
summaryColumn,
|
|
440
430
|
summaryMethod
|
|
441
431
|
}, allTotal[columnKey], value);
|
|
442
|
-
if (
|
|
432
|
+
if (BaseUtils.isDateSummaryColumn(summaryColumn)) {
|
|
443
433
|
rowTotal[columnKey] = value;
|
|
444
|
-
} else if (
|
|
434
|
+
} else if (BaseUtils.isNumericSummaryColumn(summaryColumn)) {
|
|
445
435
|
rowTotal[columnKey] = rowTotal[columnKey] + value;
|
|
446
436
|
}
|
|
447
437
|
});
|
|
@@ -451,7 +441,7 @@ SQLStatisticsUtils.oneDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
451
441
|
total: rowTotal
|
|
452
442
|
});
|
|
453
443
|
}
|
|
454
|
-
if (groupbyColumn.type ===
|
|
444
|
+
if (groupbyColumn.type === CellType.LINK_FORMULA && groupbyColumn.data.array_type === 'date') {
|
|
455
445
|
pivot_rows = pivot_rows.reduce((acc, item) => {
|
|
456
446
|
const {
|
|
457
447
|
name,
|
|
@@ -484,12 +474,12 @@ SQLStatisticsUtils.oneDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
484
474
|
total: allTotal[key]
|
|
485
475
|
};
|
|
486
476
|
}
|
|
487
|
-
|
|
477
|
+
BaseUtils.sortCharts(pivot_rows, groupbyColumn, 'name', true);
|
|
488
478
|
return {
|
|
489
479
|
pivot_columns,
|
|
490
480
|
pivot_rows,
|
|
491
481
|
pivot_columns_total: allTotal,
|
|
492
|
-
dimensions:
|
|
482
|
+
dimensions: TABLE_DIMENSIONS.ONE
|
|
493
483
|
};
|
|
494
484
|
};
|
|
495
485
|
SQLStatisticsUtils.twoDimensionTableSQLResult2JavaScript = async (chart, sqlRows, chartSQLMap, columnMap, tables) => {
|
|
@@ -517,8 +507,8 @@ SQLStatisticsUtils.twoDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
517
507
|
let newSqlRows = sqlRows;
|
|
518
508
|
|
|
519
509
|
// handle LINK_FORMULA
|
|
520
|
-
const isGroupByColumnLinkFormula = groupbyColumn.type ===
|
|
521
|
-
const isColumnGroupByColumnLinkFormula = columnGroupbyColumn.type ===
|
|
510
|
+
const isGroupByColumnLinkFormula = groupbyColumn.type === CellType.LINK_FORMULA;
|
|
511
|
+
const isColumnGroupByColumnLinkFormula = columnGroupbyColumn.type === CellType.LINK_FORMULA;
|
|
522
512
|
let isRowGroupbyColumnDataAsAnArray, isGroupbyColumnDataAsAnArray;
|
|
523
513
|
|
|
524
514
|
// Group by column
|
|
@@ -526,14 +516,14 @@ SQLStatisticsUtils.twoDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
526
516
|
if (isGroupByColumnLinkFormula && groupbyColumn.data.array_type !== 'date') {
|
|
527
517
|
isGroupbyColumnDataAsAnArray = true;
|
|
528
518
|
} else {
|
|
529
|
-
isGroupbyColumnDataAsAnArray = !!
|
|
519
|
+
isGroupbyColumnDataAsAnArray = !!MULTIPLE_CELL_VALUE_COLUMN_TYPE_MAP[groupbyColumn.type];
|
|
530
520
|
}
|
|
531
521
|
|
|
532
522
|
// column group by column
|
|
533
523
|
if (isColumnGroupByColumnLinkFormula && groupbyColumn.data.array_type !== 'date') {
|
|
534
524
|
isRowGroupbyColumnDataAsAnArray = true;
|
|
535
525
|
} else {
|
|
536
|
-
isRowGroupbyColumnDataAsAnArray = !!
|
|
526
|
+
isRowGroupbyColumnDataAsAnArray = !!MULTIPLE_CELL_VALUE_COLUMN_TYPE_MAP[columnGroupbyColumn.type];
|
|
537
527
|
}
|
|
538
528
|
|
|
539
529
|
// if key is an array, handle it here ,currently only handle collaborator and multiple select
|
|
@@ -542,12 +532,12 @@ SQLStatisticsUtils.twoDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
542
532
|
const {
|
|
543
533
|
array_type
|
|
544
534
|
} = groupbyColumn.data;
|
|
545
|
-
if ([
|
|
546
|
-
newSqlRows =
|
|
535
|
+
if ([CellType.COLLABORATOR, CellType.MULTIPLE_SELECT].includes(array_type)) {
|
|
536
|
+
newSqlRows = BaseUtils.formatedTableSqlRowsByCollaboratorAndMultiple(chart, sqlRows, chartSQLMap, columnMap);
|
|
547
537
|
}
|
|
548
538
|
}
|
|
549
|
-
if ([
|
|
550
|
-
newSqlRows =
|
|
539
|
+
if ([CellType.COLLABORATOR, CellType.MULTIPLE_SELECT].includes(groupbyColumn.type)) {
|
|
540
|
+
newSqlRows = BaseUtils.formatedTableSqlRowsByCollaboratorAndMultiple(chart, sqlRows, chartSQLMap, columnMap);
|
|
551
541
|
}
|
|
552
542
|
let pivot_columns = [];
|
|
553
543
|
let pivot_rows = [];
|
|
@@ -558,12 +548,12 @@ SQLStatisticsUtils.twoDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
558
548
|
for (const row of newSqlRows) {
|
|
559
549
|
const columnGroupbyColumnCellValue = row[sqlColumnGroupbyColumnKey];
|
|
560
550
|
let columnGroupbyColumnCellValueKey;
|
|
561
|
-
if (
|
|
551
|
+
if (BaseUtils.isCollaborator(columnGroupbyColumn)) {
|
|
562
552
|
columnGroupbyColumnCellValueKey = columnGroupbyColumnCellValue || [];
|
|
563
553
|
} else {
|
|
564
554
|
columnGroupbyColumnCellValueKey = await _SQLStatisticsUtils.getGroupLabelFromDB(columnGroupbyColumnCellValue, columnGroupbyColumn, chart.config, true);
|
|
565
555
|
}
|
|
566
|
-
if (
|
|
556
|
+
if (BaseUtils.isValidCellValue(columnGroupbyColumnCellValue, groupby_include_empty_cells)) {
|
|
567
557
|
_SQLStatisticsUtils.updateTwoDimensionColumns(pivot_columns, columnGroupbyColumnCellValueKey, {
|
|
568
558
|
isIncludeEmpty: groupby_include_empty_cells,
|
|
569
559
|
isCellValueAsAnArray: isRowGroupbyColumnDataAsAnArray
|
|
@@ -573,19 +563,19 @@ SQLStatisticsUtils.twoDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
573
563
|
for (const row of newSqlRows) {
|
|
574
564
|
const groupbyColumnCellValue = row[sqlGroupbyColumnKey];
|
|
575
565
|
let groupbyColumnCellValueKey;
|
|
576
|
-
if (
|
|
566
|
+
if (BaseUtils.isCollaborator(groupbyColumn)) {
|
|
577
567
|
groupbyColumnCellValueKey = groupbyColumnCellValue || [];
|
|
578
568
|
} else {
|
|
579
569
|
groupbyColumnCellValueKey = await _SQLStatisticsUtils.getGroupLabelFromDB(groupbyColumnCellValue, groupbyColumn, chart.config, true);
|
|
580
570
|
}
|
|
581
571
|
const columnGroupbyColumnCellValue = row[sqlColumnGroupbyColumnKey];
|
|
582
572
|
let columnGroupbyColumnCellValueKey;
|
|
583
|
-
if (
|
|
573
|
+
if (BaseUtils.isCollaborator(columnGroupbyColumn)) {
|
|
584
574
|
columnGroupbyColumnCellValueKey = columnGroupbyColumnCellValue || [];
|
|
585
575
|
} else {
|
|
586
576
|
columnGroupbyColumnCellValueKey = await _SQLStatisticsUtils.getGroupLabelFromDB(columnGroupbyColumnCellValue, columnGroupbyColumn, chart.config, true);
|
|
587
577
|
}
|
|
588
|
-
if (
|
|
578
|
+
if (BaseUtils.isValidCellValue(groupbyColumnCellValue, groupby_include_empty_cells)) {
|
|
589
579
|
// data is an array is handled previously, but to keep capability, still use old code
|
|
590
580
|
if (isGroupbyColumnDataAsAnArray) {
|
|
591
581
|
if ((!Array.isArray(groupbyColumnCellValueKey) || groupbyColumnCellValueKey.length === 0) && groupby_include_empty_cells) {
|
|
@@ -622,15 +612,15 @@ SQLStatisticsUtils.twoDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
622
612
|
}
|
|
623
613
|
|
|
624
614
|
// update Collaborator and Multiple mean value
|
|
625
|
-
if (
|
|
626
|
-
const new_pivot_rows =
|
|
615
|
+
if (BaseUtils.isCollaboratorColumnOrMultipleColumn(columnMap)) {
|
|
616
|
+
const new_pivot_rows = BaseUtils.updateCollaboratorAndMultipleAvg(pivot_rows, [singleNumeriColumnWithMethod, ...multipleNumericColumnsWithMethod]);
|
|
627
617
|
pivot_rows = new_pivot_rows;
|
|
628
618
|
}
|
|
629
619
|
[pivot_columns_total, pivot_table_total] = _SQLStatisticsUtils.getAndUpdateTwoDimensionTotal(pivot_columns_total, pivot_columns, pivot_rows, pivot_table_total, chart);
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
if ((groupbyColumn === null || groupbyColumn === void 0 ? void 0 : groupbyColumn.type) ===
|
|
633
|
-
pivot_rows =
|
|
620
|
+
BaseUtils.sortCharts(pivot_rows, groupbyColumn, 'name', true);
|
|
621
|
+
BaseUtils.sortCharts(pivot_columns, columnGroupbyColumn, 'key', true);
|
|
622
|
+
if ((groupbyColumn === null || groupbyColumn === void 0 ? void 0 : groupbyColumn.type) === CellType.COLLABORATOR) {
|
|
623
|
+
pivot_rows = BaseUtils.mergePivotTableSameCollaborator(pivot_rows);
|
|
634
624
|
}
|
|
635
625
|
const summary_columns = [summaryColumn, ...summaryColumnsWithMethod.map(item => item.column)];
|
|
636
626
|
return {
|
|
@@ -639,7 +629,7 @@ SQLStatisticsUtils.twoDimensionTableSQLResult2JavaScript = async (chart, sqlRows
|
|
|
639
629
|
pivot_rows,
|
|
640
630
|
pivot_columns_total,
|
|
641
631
|
pivot_table_total,
|
|
642
|
-
dimensions:
|
|
632
|
+
dimensions: TABLE_DIMENSIONS.TWO,
|
|
643
633
|
isSingleNumericColumn
|
|
644
634
|
};
|
|
645
635
|
};
|
|
@@ -660,7 +650,7 @@ SQLStatisticsUtils.basicChartSQLResult2JavaScript = async (chart, sqlRows, chart
|
|
|
660
650
|
groupbyColumn,
|
|
661
651
|
summaryColumn
|
|
662
652
|
} = columnMap;
|
|
663
|
-
const isGroupbyColumnDataAsAnArray =
|
|
653
|
+
const isGroupbyColumnDataAsAnArray = findIfColumnDataIsArray(groupbyColumn);
|
|
664
654
|
const {
|
|
665
655
|
sqlGroupbyColumnKey,
|
|
666
656
|
sqlSummaryColumnKey
|
|
@@ -670,10 +660,10 @@ SQLStatisticsUtils.basicChartSQLResult2JavaScript = async (chart, sqlRows, chart
|
|
|
670
660
|
const cellValue = row[sqlGroupbyColumnKey];
|
|
671
661
|
const summaryValue = row[sqlSummaryColumnKey];
|
|
672
662
|
let formatted_value = cellValue;
|
|
673
|
-
if (y_axis_summary_type ===
|
|
674
|
-
formatted_value =
|
|
663
|
+
if (y_axis_summary_type === CHART_SUMMARY_TYPE.ADVANCED) {
|
|
664
|
+
formatted_value = getFormattedValue(cellValue, y_axis_summary_column_key, y_axis_summary_method);
|
|
675
665
|
}
|
|
676
|
-
if (
|
|
666
|
+
if (BaseUtils.isValidCellValue(cellValue, x_axis_include_empty_cells || groupby_include_empty_cells)) {
|
|
677
667
|
const key = await _SQLStatisticsUtils.getGroupLabelFromDB(cellValue, groupbyColumn, chart.config);
|
|
678
668
|
if (isGroupbyColumnDataAsAnArray) {
|
|
679
669
|
if (!Array.isArray(key) || key.length === 0) {
|
|
@@ -731,11 +721,11 @@ SQLStatisticsUtils.basicChartSQLResult2JavaScript = async (chart, sqlRows, chart
|
|
|
731
721
|
}
|
|
732
722
|
}
|
|
733
723
|
}
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
if (
|
|
738
|
-
|
|
724
|
+
BaseUtils.sortCharts(result, groupbyColumn, 'name');
|
|
725
|
+
await BaseUtils.updateTableViewList(result, groupbyColumn, 'name', 'color', false, true);
|
|
726
|
+
BaseUtils.updateSummaryValuePrecision(result, summaryColumn, 'value');
|
|
727
|
+
if (SUPPORT_DATA_SORT_CHART_TYPES.includes(type) && sort_type) {
|
|
728
|
+
BaseUtils.sortChartData(result, sort_type);
|
|
739
729
|
return result;
|
|
740
730
|
}
|
|
741
731
|
return result;
|
|
@@ -764,28 +754,28 @@ SQLStatisticsUtils.customChartSQLResult2JavaScript = async (chart, sqlRows, char
|
|
|
764
754
|
groupbyColumn,
|
|
765
755
|
summaryColumn
|
|
766
756
|
} = columnMap;
|
|
767
|
-
const table =
|
|
757
|
+
const table = getTableById(tables, table_id);
|
|
768
758
|
const stack = y_axises[index];
|
|
769
759
|
if (!stack) return [];
|
|
770
760
|
const {
|
|
771
761
|
column_groupby_numeric_columns
|
|
772
762
|
} = stack;
|
|
773
|
-
const y_axis_type =
|
|
763
|
+
const y_axis_type = `${Y_AXIS_TYPE_PREFIX}${index}`;
|
|
774
764
|
let summaryMethods = [];
|
|
775
765
|
let originalMethods = [];
|
|
776
766
|
let groupColumnNames = [];
|
|
777
767
|
let numericColumns = [];
|
|
778
768
|
column_groupby_numeric_columns.forEach(item => {
|
|
779
|
-
const numericColumn =
|
|
769
|
+
const numericColumn = getTableColumnByKey(table, item.column_key);
|
|
780
770
|
const groupColumnName = numericColumn.name;
|
|
781
771
|
numericColumns.push(numericColumn);
|
|
782
772
|
groupColumnNames.push(groupColumnName);
|
|
783
|
-
summaryMethods.push(
|
|
773
|
+
summaryMethods.push(summaryMethodColumn2SqlColumn(item.summary_method.toUpperCase(), numericColumn).key);
|
|
784
774
|
originalMethods.push(item.summary_method);
|
|
785
775
|
});
|
|
786
776
|
const {
|
|
787
777
|
key: sqlGroupbyColumnKey
|
|
788
|
-
} =
|
|
778
|
+
} = column2SqlColumn(groupbyColumn, {
|
|
789
779
|
dateGranularity: x_axis_date_granularity,
|
|
790
780
|
geolocationGranularity: x_axis_geolocation_granularity
|
|
791
781
|
});
|
|
@@ -799,8 +789,8 @@ SQLStatisticsUtils.customChartSQLResult2JavaScript = async (chart, sqlRows, char
|
|
|
799
789
|
if (!(x_axis_include_empty_cells || x_axis_include_empty) && isEmpty) return;
|
|
800
790
|
let value = row[summaryMethod] || 0;
|
|
801
791
|
let formatted_value = value;
|
|
802
|
-
value =
|
|
803
|
-
formatted_value =
|
|
792
|
+
value = formatNumericValue(value, numericColumns[index]);
|
|
793
|
+
formatted_value = getFormattedValue(value, numericColumns[index], originalMethods[index]);
|
|
804
794
|
groupItems.push({
|
|
805
795
|
name: label,
|
|
806
796
|
value,
|
|
@@ -812,7 +802,7 @@ SQLStatisticsUtils.customChartSQLResult2JavaScript = async (chart, sqlRows, char
|
|
|
812
802
|
});
|
|
813
803
|
result = result.concat(groupItems);
|
|
814
804
|
}
|
|
815
|
-
const isCellValueAsAnArray =
|
|
805
|
+
const isCellValueAsAnArray = findIfColumnDataIsArray(groupbyColumn);
|
|
816
806
|
if (isCellValueAsAnArray) {
|
|
817
807
|
const takenApart = [];
|
|
818
808
|
const assembled = [];
|
|
@@ -822,7 +812,7 @@ SQLStatisticsUtils.customChartSQLResult2JavaScript = async (chart, sqlRows, char
|
|
|
822
812
|
name: names
|
|
823
813
|
} = item;
|
|
824
814
|
if (!Array.isArray(names)) return;
|
|
825
|
-
if (!(names
|
|
815
|
+
if (!(names === null || names === void 0 ? void 0 : names.length)) {
|
|
826
816
|
takenApart.push({
|
|
827
817
|
...item,
|
|
828
818
|
name: null
|
|
@@ -853,9 +843,9 @@ SQLStatisticsUtils.customChartSQLResult2JavaScript = async (chart, sqlRows, char
|
|
|
853
843
|
});
|
|
854
844
|
result = assembled;
|
|
855
845
|
}
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
846
|
+
BaseUtils.sortCharts(result, groupbyColumn, 'name');
|
|
847
|
+
await BaseUtils.updateTableViewList(result, groupbyColumn, 'name', '', false, true);
|
|
848
|
+
BaseUtils.updateSummaryValuePrecision(result, summaryColumn, 'value');
|
|
859
849
|
return result;
|
|
860
850
|
};
|
|
861
851
|
SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQLMap, columnMap, tables) => {
|
|
@@ -880,20 +870,21 @@ SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQL
|
|
|
880
870
|
y_axis_summary_method,
|
|
881
871
|
display_increase
|
|
882
872
|
} = config;
|
|
883
|
-
const groupName1 =
|
|
884
|
-
const groupName2 =
|
|
873
|
+
const groupName1 = `${x_axis_date_range_start} - ${x_axis_date_range_end}`;
|
|
874
|
+
const groupName2 = `${x_axis_compared_date_range_start} - ${x_axis_compared_date_range_end}`;
|
|
885
875
|
const dateRangeResult = new Map();
|
|
886
876
|
let dateComparedResult = new Map();
|
|
887
|
-
const isAdvanced = y_axis_summary_type ===
|
|
877
|
+
const isAdvanced = y_axis_summary_type === CHART_SUMMARY_TYPE.ADVANCED;
|
|
888
878
|
const startDate = new Date(x_axis_date_range_start);
|
|
889
879
|
const endDate = new Date(x_axis_date_range_end);
|
|
890
880
|
const comparedStartDate = new Date(x_axis_compared_date_range_start);
|
|
891
881
|
const comparedEndDate = new Date(x_axis_compared_date_range_end);
|
|
892
882
|
for (const item of sqlRows) {
|
|
893
883
|
let name = item[sqlGroupbyColumnKey];
|
|
884
|
+
if (!name) continue;
|
|
894
885
|
const label = await _SQLStatisticsUtils.getGroupLabelFromDB(name, groupbyColumn, chart.config);
|
|
895
886
|
if (x_axis_date_granularity === 'quarter') {
|
|
896
|
-
name =
|
|
887
|
+
name = convertQuarterToDate(name);
|
|
897
888
|
} else if (x_axis_date_granularity === 'year') {
|
|
898
889
|
// set the date to the first day of the year, and set the time to 8:05, cause the time zone is UTC+8,
|
|
899
890
|
// need to ensure time is at the range of user's slected time
|
|
@@ -906,30 +897,50 @@ SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQL
|
|
|
906
897
|
const currentValue = dateRangeResult.get(label);
|
|
907
898
|
if (!currentValue) {
|
|
908
899
|
if (isAdvanced) {
|
|
909
|
-
dateRangeResult.set(label,
|
|
900
|
+
dateRangeResult.set(label, {
|
|
901
|
+
value: [value],
|
|
902
|
+
date: name,
|
|
903
|
+
rows: [item]
|
|
904
|
+
});
|
|
910
905
|
} else {
|
|
911
|
-
dateRangeResult.set(label,
|
|
906
|
+
dateRangeResult.set(label, {
|
|
907
|
+
value,
|
|
908
|
+
date: name,
|
|
909
|
+
rows: [item]
|
|
910
|
+
});
|
|
912
911
|
}
|
|
913
912
|
} else {
|
|
914
913
|
if (isAdvanced) {
|
|
915
|
-
currentValue.push(value);
|
|
914
|
+
currentValue.value.push(value);
|
|
915
|
+
currentValue.rows.push(item);
|
|
916
916
|
} else {
|
|
917
|
-
|
|
917
|
+
currentValue.value = value + currentValue.value;
|
|
918
|
+
currentValue.rows.push(item);
|
|
918
919
|
}
|
|
919
920
|
}
|
|
920
921
|
} else if (name >= comparedStartDate && name <= comparedEndDate) {
|
|
921
922
|
const currentValue = dateComparedResult.get(label);
|
|
922
923
|
if (!currentValue) {
|
|
923
924
|
if (isAdvanced) {
|
|
924
|
-
dateComparedResult.set(label,
|
|
925
|
+
dateComparedResult.set(label, {
|
|
926
|
+
value: [value],
|
|
927
|
+
date: name,
|
|
928
|
+
rows: [item]
|
|
929
|
+
});
|
|
925
930
|
} else {
|
|
926
|
-
dateComparedResult.set(label,
|
|
931
|
+
dateComparedResult.set(label, {
|
|
932
|
+
value,
|
|
933
|
+
date: name,
|
|
934
|
+
rows: [item]
|
|
935
|
+
});
|
|
927
936
|
}
|
|
928
937
|
} else {
|
|
929
938
|
if (isAdvanced) {
|
|
930
|
-
|
|
939
|
+
currentValue.value.push(value);
|
|
940
|
+
currentValue.rows.push(item);
|
|
931
941
|
} else {
|
|
932
|
-
|
|
942
|
+
currentValue.value = value + currentValue.value;
|
|
943
|
+
currentValue.rows.push(item);
|
|
933
944
|
}
|
|
934
945
|
}
|
|
935
946
|
}
|
|
@@ -937,38 +948,53 @@ SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQL
|
|
|
937
948
|
let comparedResult = [];
|
|
938
949
|
let rangeResult = [];
|
|
939
950
|
const data = (summaryColumn === null || summaryColumn === void 0 ? void 0 : summaryColumn.data) || {};
|
|
940
|
-
|
|
941
|
-
|
|
951
|
+
|
|
952
|
+
// convert Map to array and sort by date
|
|
953
|
+
const sortedDateRangeEntries = Array.from(dateRangeResult.entries()).sort((a, b) => {
|
|
954
|
+
return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;
|
|
955
|
+
});
|
|
956
|
+
const sortedDateComparedEntries = Array.from(dateComparedResult.entries()).sort((a, b) => {
|
|
957
|
+
return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;
|
|
958
|
+
});
|
|
959
|
+
for (let item of sortedDateRangeEntries) {
|
|
960
|
+
const {
|
|
961
|
+
value: rawValue,
|
|
962
|
+
rows
|
|
963
|
+
} = item[1] || {};
|
|
964
|
+
let value = rawValue;
|
|
942
965
|
let formatted_value = value;
|
|
943
966
|
if (isAdvanced) {
|
|
944
|
-
value =
|
|
945
|
-
formatted_value =
|
|
967
|
+
value = getSummaryResult(rawValue, y_axis_summary_method, data.precision);
|
|
968
|
+
formatted_value = getFormattedValue(value, summaryColumn, y_axis_summary_method);
|
|
946
969
|
}
|
|
947
970
|
rangeResult.push({
|
|
948
971
|
name: item[0],
|
|
949
972
|
group_name: groupName1,
|
|
950
973
|
raw_name: item[0],
|
|
951
974
|
value,
|
|
975
|
+
rows: rows || [],
|
|
952
976
|
formatted_value
|
|
953
977
|
});
|
|
954
978
|
}
|
|
955
979
|
let index = 0;
|
|
956
|
-
for (let item of
|
|
980
|
+
for (let item of sortedDateComparedEntries) {
|
|
957
981
|
let dateRangeItem = rangeResult[index];
|
|
958
982
|
if (!dateRangeItem) {
|
|
959
983
|
break;
|
|
960
984
|
}
|
|
961
|
-
let value = item[1];
|
|
985
|
+
let value = item[1].value;
|
|
986
|
+
const rows = item[1].rows;
|
|
962
987
|
let formatted_value = value;
|
|
963
988
|
if (isAdvanced) {
|
|
964
|
-
value =
|
|
965
|
-
formatted_value =
|
|
989
|
+
value = getSummaryResult(item[1].value, y_axis_summary_method, data.precision);
|
|
990
|
+
formatted_value = getFormattedValue(value, summaryColumn, y_axis_summary_method);
|
|
966
991
|
}
|
|
967
992
|
const newItem = {
|
|
968
993
|
name: dateRangeItem.name,
|
|
969
994
|
group_name: groupName2,
|
|
970
995
|
raw_name: item[0],
|
|
971
996
|
value,
|
|
997
|
+
rows,
|
|
972
998
|
formatted_value
|
|
973
999
|
};
|
|
974
1000
|
if (display_increase) {
|
|
@@ -985,8 +1011,10 @@ SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQL
|
|
|
985
1011
|
if (comparedResult.length > rangeResult.length) {
|
|
986
1012
|
comparedResult = comparedResult.slice(0, rangeResult.length);
|
|
987
1013
|
}
|
|
988
|
-
|
|
989
|
-
|
|
1014
|
+
BaseUtils.updateSummaryValuePrecision(comparedResult, summaryColumn, 'value');
|
|
1015
|
+
BaseUtils.updateSummaryValuePrecision(rangeResult, summaryColumn, 'value');
|
|
1016
|
+
BaseUtils.sortCharts(rangeResult, groupbyColumn, 'name');
|
|
1017
|
+
BaseUtils.sortCharts(comparedResult, groupbyColumn, 'name');
|
|
990
1018
|
return [...comparedResult, ...rangeResult];
|
|
991
1019
|
};
|
|
992
1020
|
SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, chartSQLMap, columnMap, tables) => {
|
|
@@ -1003,7 +1031,7 @@ SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, char
|
|
|
1003
1031
|
table_id,
|
|
1004
1032
|
y_axis_left_group_by_numeric_columns
|
|
1005
1033
|
} = config;
|
|
1006
|
-
const table =
|
|
1034
|
+
const table = getTableById(tables, table_id);
|
|
1007
1035
|
const {
|
|
1008
1036
|
groupbyColumn,
|
|
1009
1037
|
summaryColumn
|
|
@@ -1017,7 +1045,7 @@ SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, char
|
|
|
1017
1045
|
sqlRightSummaryColumnKey,
|
|
1018
1046
|
sqlLeftSummaryColumnKey
|
|
1019
1047
|
} = chartSQLMap;
|
|
1020
|
-
const isGroupbyColumnDataAsAnArray =
|
|
1048
|
+
const isGroupbyColumnDataAsAnArray = findIfColumnDataIsArray(groupbyColumn);
|
|
1021
1049
|
let result = [];
|
|
1022
1050
|
if (!y_axis_left_group_by_multiple_numeric_column) {
|
|
1023
1051
|
// let leftSummaryColumn, rightSummaryColumn;
|
|
@@ -1044,7 +1072,7 @@ SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, char
|
|
|
1044
1072
|
if (itemIdx < 0) {
|
|
1045
1073
|
result.push({
|
|
1046
1074
|
// color is defined by index of the name
|
|
1047
|
-
color:
|
|
1075
|
+
color: STYLE_COLORS[0].colors[index % 12],
|
|
1048
1076
|
name: null,
|
|
1049
1077
|
rows: [row],
|
|
1050
1078
|
value_left: valueLeft,
|
|
@@ -1061,7 +1089,7 @@ SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, char
|
|
|
1061
1089
|
let itemIdx = result.findIndex(v => v.name === item);
|
|
1062
1090
|
if (itemIdx < 0) {
|
|
1063
1091
|
result.push({
|
|
1064
|
-
color:
|
|
1092
|
+
color: STYLE_COLORS[0].colors[index % 12],
|
|
1065
1093
|
name: item,
|
|
1066
1094
|
rows: [row],
|
|
1067
1095
|
value_left: valueLeft,
|
|
@@ -1079,7 +1107,7 @@ SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, char
|
|
|
1079
1107
|
let itemIdx = result.findIndex(v => v.name === key);
|
|
1080
1108
|
if (itemIdx < 0) {
|
|
1081
1109
|
result.push({
|
|
1082
|
-
color:
|
|
1110
|
+
color: STYLE_COLORS[0].colors[index % 12],
|
|
1083
1111
|
name: key,
|
|
1084
1112
|
rows: [row],
|
|
1085
1113
|
value_left: valueLeft,
|
|
@@ -1099,11 +1127,11 @@ SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, char
|
|
|
1099
1127
|
// rightSummaryColumn = getTableColumnByKey(table, y_axis_right_summary_column);
|
|
1100
1128
|
// }
|
|
1101
1129
|
const groupItems = [];
|
|
1102
|
-
let leftSummaryColumn =
|
|
1130
|
+
let leftSummaryColumn = getTableColumnByKey(table, y_axis_left_summary_column);
|
|
1103
1131
|
const summaryMethod = y_axis_left_summary_method.toUpperCase();
|
|
1104
1132
|
const {
|
|
1105
1133
|
key
|
|
1106
|
-
} =
|
|
1134
|
+
} = summaryMethodColumn2SqlColumn(summaryMethod, leftSummaryColumn || {});
|
|
1107
1135
|
const groupItem = {
|
|
1108
1136
|
sqlName: key,
|
|
1109
1137
|
column: leftSummaryColumn
|
|
@@ -1113,12 +1141,12 @@ SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, char
|
|
|
1113
1141
|
groupItems.push(groupItem);
|
|
1114
1142
|
}
|
|
1115
1143
|
y_axis_left_group_by_numeric_columns.forEach((item, index) => {
|
|
1116
|
-
const column =
|
|
1144
|
+
const column = getTableColumnByKey(table, item.column_key);
|
|
1117
1145
|
if (column) {
|
|
1118
1146
|
const itemSummaryMethod = item.summary_method.toUpperCase();
|
|
1119
1147
|
const {
|
|
1120
1148
|
key
|
|
1121
|
-
} =
|
|
1149
|
+
} = summaryMethodColumn2SqlColumn(itemSummaryMethod, column || {});
|
|
1122
1150
|
const groupItem = {
|
|
1123
1151
|
sqlName: key,
|
|
1124
1152
|
column
|
|
@@ -1159,7 +1187,7 @@ SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, char
|
|
|
1159
1187
|
rows: [item],
|
|
1160
1188
|
group_name: groupName,
|
|
1161
1189
|
// for multiple numeric_columns, color is defined by group_name
|
|
1162
|
-
color:
|
|
1190
|
+
color: STYLE_COLORS[0].colors[index % 12]
|
|
1163
1191
|
});
|
|
1164
1192
|
} else {
|
|
1165
1193
|
const itemRow = result[itemIdx];
|
|
@@ -1184,16 +1212,16 @@ SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, char
|
|
|
1184
1212
|
value_right: valueRight,
|
|
1185
1213
|
rows: [item],
|
|
1186
1214
|
group_name: groupName,
|
|
1187
|
-
color:
|
|
1215
|
+
color: STYLE_COLORS[0].colors[index % 12]
|
|
1188
1216
|
});
|
|
1189
1217
|
});
|
|
1190
1218
|
}
|
|
1191
1219
|
}
|
|
1192
1220
|
}
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1221
|
+
await BaseUtils.updateTableViewList(result, groupbyColumn, 'name', '', false, true);
|
|
1222
|
+
BaseUtils.sortCharts(result, groupbyColumn, 'name');
|
|
1223
|
+
BaseUtils.updateSummaryValuePrecision(result, summaryColumnLeft, 'value_left');
|
|
1224
|
+
BaseUtils.updateSummaryValuePrecision(result, summaryColumnRight, 'value_right');
|
|
1197
1225
|
return result;
|
|
1198
1226
|
};
|
|
1199
1227
|
SQLStatisticsUtils.dashboardSQLResult2JavaScript = (chart, sqlRows, chartSQLMap, columnMap, tables) => {
|
|
@@ -1209,17 +1237,17 @@ SQLStatisticsUtils.dashboardSQLResult2JavaScript = (chart, sqlRows, chartSQLMap,
|
|
|
1209
1237
|
total_value_column_key,
|
|
1210
1238
|
table_id
|
|
1211
1239
|
} = config;
|
|
1212
|
-
const table =
|
|
1213
|
-
const targetColumn =
|
|
1214
|
-
const totalColumn =
|
|
1240
|
+
const table = getTableById(tables, table_id);
|
|
1241
|
+
const targetColumn = getTableColumnByKey(table, target_value_column_key);
|
|
1242
|
+
const totalColumn = getTableColumnByKey(table, total_value_column_key);
|
|
1215
1243
|
const targetSummaryMethod = target_value_column_summary_method.toUpperCase();
|
|
1216
1244
|
const totalSummaryMethod = total_value_column_summary_method.toUpperCase();
|
|
1217
1245
|
const {
|
|
1218
1246
|
key: targetResultKey
|
|
1219
|
-
} =
|
|
1247
|
+
} = summaryMethodColumn2SqlColumn(targetSummaryMethod, targetColumn);
|
|
1220
1248
|
const {
|
|
1221
1249
|
key: totalResultKey
|
|
1222
|
-
} =
|
|
1250
|
+
} = summaryMethodColumn2SqlColumn(totalSummaryMethod, totalColumn);
|
|
1223
1251
|
const targetResult = summaryResult[targetResultKey];
|
|
1224
1252
|
const totalResult = summaryResult[totalResultKey];
|
|
1225
1253
|
if (totalResult === 0) {
|
|
@@ -1274,12 +1302,12 @@ SQLStatisticsUtils.groupingTwoDimensionChartSQLResult2JavaScript = async (chart,
|
|
|
1274
1302
|
sqlSummaryColumnKey
|
|
1275
1303
|
} = chartSQLMap;
|
|
1276
1304
|
let result = [];
|
|
1277
|
-
const isGroupbyColumnDataAsAnArray =
|
|
1278
|
-
const isColumnGroupbyColumnDataAsAnArray =
|
|
1305
|
+
const isGroupbyColumnDataAsAnArray = findIfColumnDataIsArray(groupbyColumn);
|
|
1306
|
+
const isColumnGroupbyColumnDataAsAnArray = findIfColumnDataIsArray(columnGroupbyColumn);
|
|
1279
1307
|
for (const row of sqlRows) {
|
|
1280
1308
|
const groupbyColumnCellValue = row[sqlGroupbyColumnKey];
|
|
1281
1309
|
const groupbyColumnCellValueKey = await _SQLStatisticsUtils.getGroupLabelFromDB(groupbyColumnCellValue, groupbyColumn, chart.config);
|
|
1282
|
-
if (
|
|
1310
|
+
if (BaseUtils.isValidCellValue(groupbyColumnCellValueKey, includeEmpty)) {
|
|
1283
1311
|
const columnGroupbyColumnCellValue = row[sqlColumnGroupbyColumnKey];
|
|
1284
1312
|
const columnGroupbyColumnCellValueKey = await _SQLStatisticsUtils.getGroupLabelFromDB(columnGroupbyColumnCellValue, columnGroupbyColumn, chart.config);
|
|
1285
1313
|
const count = row[sqlSummaryColumnKey];
|
|
@@ -1296,10 +1324,73 @@ SQLStatisticsUtils.groupingTwoDimensionChartSQLResult2JavaScript = async (chart,
|
|
|
1296
1324
|
}
|
|
1297
1325
|
}
|
|
1298
1326
|
}
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1327
|
+
|
|
1328
|
+
// fill empty group name with value 0
|
|
1329
|
+
const allGroupNames = new Set();
|
|
1330
|
+
const nameGroupMap = new Map();
|
|
1331
|
+
result.forEach(item => {
|
|
1332
|
+
const {
|
|
1333
|
+
name,
|
|
1334
|
+
group_name: groupName
|
|
1335
|
+
} = item;
|
|
1336
|
+
allGroupNames.add(groupName);
|
|
1337
|
+
if (!nameGroupMap.has(name)) {
|
|
1338
|
+
nameGroupMap.set(name, new Set());
|
|
1339
|
+
}
|
|
1340
|
+
nameGroupMap.get(name).add(groupName);
|
|
1341
|
+
});
|
|
1342
|
+
const isEmptyGroupName = groupName => groupName === undefined || groupName === null || groupName === '';
|
|
1343
|
+
const groupNameList = Array.from(allGroupNames).sort((a, b) => {
|
|
1344
|
+
const aEmpty = isEmptyGroupName(a);
|
|
1345
|
+
const bEmpty = isEmptyGroupName(b);
|
|
1346
|
+
if (aEmpty && !bEmpty) return 1;
|
|
1347
|
+
if (!aEmpty && bEmpty) return -1;
|
|
1348
|
+
return `${a !== null && a !== void 0 ? a : ''}`.localeCompare(`${b !== null && b !== void 0 ? b : ''}`);
|
|
1349
|
+
});
|
|
1350
|
+
nameGroupMap.forEach((groupSet, name) => {
|
|
1351
|
+
groupNameList.forEach(groupName => {
|
|
1352
|
+
if (!groupSet.has(groupName)) {
|
|
1353
|
+
result.push({
|
|
1354
|
+
name,
|
|
1355
|
+
rows: [],
|
|
1356
|
+
group_name: groupName,
|
|
1357
|
+
value: 0
|
|
1358
|
+
});
|
|
1359
|
+
}
|
|
1360
|
+
});
|
|
1361
|
+
});
|
|
1362
|
+
|
|
1363
|
+
// ensure each name keeps original order while its group_name entries follow the normalized group order
|
|
1364
|
+
const groupOrder = new Map(groupNameList.map((groupName, index) => [groupName, index]));
|
|
1365
|
+
const nameOrder = [];
|
|
1366
|
+
const seenNames = new Set();
|
|
1367
|
+
const nameBuckets = new Map();
|
|
1368
|
+
result.forEach(item => {
|
|
1369
|
+
if (!seenNames.has(item.name)) {
|
|
1370
|
+
seenNames.add(item.name);
|
|
1371
|
+
nameOrder.push(item.name);
|
|
1372
|
+
}
|
|
1373
|
+
if (!nameBuckets.has(item.name)) {
|
|
1374
|
+
nameBuckets.set(item.name, []);
|
|
1375
|
+
}
|
|
1376
|
+
nameBuckets.get(item.name).push(item);
|
|
1377
|
+
});
|
|
1378
|
+
const orderedResult = [];
|
|
1379
|
+
nameOrder.forEach(name => {
|
|
1380
|
+
const items = nameBuckets.get(name).sort((a, b) => {
|
|
1381
|
+
var _a$group_name, _b$group_name;
|
|
1382
|
+
const aOrder = groupOrder.has(a.group_name) ? groupOrder.get(a.group_name) : Number.MAX_SAFE_INTEGER;
|
|
1383
|
+
const bOrder = groupOrder.has(b.group_name) ? groupOrder.get(b.group_name) : Number.MAX_SAFE_INTEGER;
|
|
1384
|
+
if (aOrder !== bOrder) return aOrder - bOrder;
|
|
1385
|
+
return `${(_a$group_name = a.group_name) !== null && _a$group_name !== void 0 ? _a$group_name : ''}`.localeCompare(`${(_b$group_name = b.group_name) !== null && _b$group_name !== void 0 ? _b$group_name : ''}`);
|
|
1386
|
+
});
|
|
1387
|
+
orderedResult.push(...items);
|
|
1388
|
+
});
|
|
1389
|
+
result.splice(0, result.length, ...orderedResult);
|
|
1390
|
+
BaseUtils.sortCharts(result, groupbyColumn, 'name');
|
|
1391
|
+
await BaseUtils.updateTableViewList(result, groupbyColumn, 'name', 'color', false, true);
|
|
1392
|
+
await BaseUtils.updateTableViewList(result, columnGroupbyColumn, 'group_name', 'group_color', false, false);
|
|
1393
|
+
BaseUtils.updateSummaryValuePrecision(result, summaryColumn, 'value');
|
|
1303
1394
|
return result;
|
|
1304
1395
|
};
|
|
1305
1396
|
SQLStatisticsUtils.groupingChartSQLResult2JavaScript = async (chart, sqlRows, chartSQLMap, columnMap, tables) => {
|
|
@@ -1318,7 +1409,7 @@ SQLStatisticsUtils.groupingChartSQLResult2JavaScript = async (chart, sqlRows, ch
|
|
|
1318
1409
|
summaryColumn,
|
|
1319
1410
|
summaryColumnsWithMethod
|
|
1320
1411
|
} = columnMap;
|
|
1321
|
-
if (y_axis_summary_type ===
|
|
1412
|
+
if (y_axis_summary_type === CHART_SUMMARY_TYPE.COUNT) {
|
|
1322
1413
|
if (!columnGroupbyColumn) return await _SQLStatisticsUtils.basicChartSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables);
|
|
1323
1414
|
return await _SQLStatisticsUtils.groupingTwoDimensionChartSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables);
|
|
1324
1415
|
}
|
|
@@ -1330,11 +1421,11 @@ SQLStatisticsUtils.groupingChartSQLResult2JavaScript = async (chart, sqlRows, ch
|
|
|
1330
1421
|
summaryColumns
|
|
1331
1422
|
} = chartSQLMap;
|
|
1332
1423
|
let result = [];
|
|
1333
|
-
const isGroupbyColumnDataAsAnArray =
|
|
1424
|
+
const isGroupbyColumnDataAsAnArray = findIfColumnDataIsArray(groupbyColumn);
|
|
1334
1425
|
for (const row of sqlRows) {
|
|
1335
1426
|
const groupbyColumnCellValue = row[sqlGroupbyColumnKey];
|
|
1336
1427
|
const groupbyColumnCellValueKey = await _SQLStatisticsUtils.getGroupLabelFromDB(groupbyColumnCellValue, groupbyColumn, chart.config);
|
|
1337
|
-
if (
|
|
1428
|
+
if (BaseUtils.isValidCellValue(groupbyColumnCellValueKey, includeEmpty)) {
|
|
1338
1429
|
Object.keys(summaryColumns).forEach(sqlSummaryColumnName => {
|
|
1339
1430
|
const {
|
|
1340
1431
|
sqlSummaryColumnKey,
|
|
@@ -1355,8 +1446,8 @@ SQLStatisticsUtils.groupingChartSQLResult2JavaScript = async (chart, sqlRows, ch
|
|
|
1355
1446
|
});
|
|
1356
1447
|
}
|
|
1357
1448
|
}
|
|
1358
|
-
|
|
1359
|
-
|
|
1449
|
+
BaseUtils.sortCharts(result, groupbyColumn, 'name');
|
|
1450
|
+
await BaseUtils.updateTableViewList(result, groupbyColumn, 'name', 'color', false, true);
|
|
1360
1451
|
const allSummaryColumns = [summaryColumn].concat(summaryColumnsWithMethod.map(item => item.column));
|
|
1361
1452
|
|
|
1362
1453
|
// format precision of enabled precision columns
|
|
@@ -1369,7 +1460,7 @@ SQLStatisticsUtils.groupingChartSQLResult2JavaScript = async (chart, sqlRows, ch
|
|
|
1369
1460
|
});
|
|
1370
1461
|
Object.values(columnNameResultMap).forEach(items => {
|
|
1371
1462
|
const targetColumn = allSummaryColumns.find(column => column.name === items[0].group_name);
|
|
1372
|
-
|
|
1463
|
+
BaseUtils.updateSummaryValuePrecision(items, targetColumn, 'value');
|
|
1373
1464
|
});
|
|
1374
1465
|
return result;
|
|
1375
1466
|
}
|
|
@@ -1392,11 +1483,11 @@ SQLStatisticsUtils.heatMapChartSQLResult2JavaScript = (chart, sqlRows, chartSQLM
|
|
|
1392
1483
|
if (currentValue || currentValue === 0) {
|
|
1393
1484
|
let value = item[sqlSummaryColumnKey];
|
|
1394
1485
|
if (summaryColumn) {
|
|
1395
|
-
value =
|
|
1486
|
+
value = formatNumericValue(value, summaryColumn);
|
|
1396
1487
|
}
|
|
1397
1488
|
const name = typeof currentValue === 'string' ? currentValue : currentValue.country_region;
|
|
1398
1489
|
result.push({
|
|
1399
|
-
name: (
|
|
1490
|
+
name: dayjs(name).format('YYYY-MM-DD'),
|
|
1400
1491
|
value
|
|
1401
1492
|
});
|
|
1402
1493
|
}
|
|
@@ -1408,7 +1499,7 @@ SQLStatisticsUtils.heatMapChartSQLResult2JavaScript = (chart, sqlRows, chartSQLM
|
|
|
1408
1499
|
data.push(item);
|
|
1409
1500
|
return;
|
|
1410
1501
|
}
|
|
1411
|
-
const year = (
|
|
1502
|
+
const year = dayjs(item.name).year();
|
|
1412
1503
|
data.push({
|
|
1413
1504
|
...item,
|
|
1414
1505
|
year
|
|
@@ -1446,7 +1537,7 @@ SQLStatisticsUtils.mirrorMapChartSQLResult2JavaScript = async (chart, sqlRows, c
|
|
|
1446
1537
|
const {
|
|
1447
1538
|
sqlSummaryColumnKey
|
|
1448
1539
|
} = chartSQLMap;
|
|
1449
|
-
const isAdvanced = summary_type ===
|
|
1540
|
+
const isAdvanced = summary_type === CHART_SUMMARY_TYPE.ADVANCED;
|
|
1450
1541
|
const newResult = [];
|
|
1451
1542
|
const groupData = _SQLStatisticsUtils.getGroupData(sqlRows, columnGroupbyColumn);
|
|
1452
1543
|
if (groupData.length > 0) {
|
|
@@ -1462,8 +1553,8 @@ SQLStatisticsUtils.mirrorMapChartSQLResult2JavaScript = async (chart, sqlRows, c
|
|
|
1462
1553
|
let value = item[sqlSummaryColumnKey];
|
|
1463
1554
|
let formattedValue = value;
|
|
1464
1555
|
if (isAdvanced) {
|
|
1465
|
-
value =
|
|
1466
|
-
formattedValue =
|
|
1556
|
+
value = formatNumericValue(value, summaryColumn);
|
|
1557
|
+
formattedValue = getFormattedValue(value, summary_column_key, summary_method);
|
|
1467
1558
|
}
|
|
1468
1559
|
newResult.push({
|
|
1469
1560
|
name: label,
|
|
@@ -1471,7 +1562,7 @@ SQLStatisticsUtils.mirrorMapChartSQLResult2JavaScript = async (chart, sqlRows, c
|
|
|
1471
1562
|
value: equal2GroupData0 ? value : 0,
|
|
1472
1563
|
formatted_value: equal2GroupData0 ? formattedValue : 0,
|
|
1473
1564
|
group_name: ((_groupData$ = groupData[0]) === null || _groupData$ === void 0 ? void 0 : _groupData$.name) || '',
|
|
1474
|
-
color: ((_groupData$2 = groupData[0]) === null || _groupData$2 === void 0 ? void 0 : _groupData$2.color) ||
|
|
1565
|
+
color: ((_groupData$2 = groupData[0]) === null || _groupData$2 === void 0 ? void 0 : _groupData$2.color) || STYLE_COLORS[0].colors[0],
|
|
1475
1566
|
rows: [item]
|
|
1476
1567
|
});
|
|
1477
1568
|
groupData[1] && newResult.push({
|
|
@@ -1480,7 +1571,7 @@ SQLStatisticsUtils.mirrorMapChartSQLResult2JavaScript = async (chart, sqlRows, c
|
|
|
1480
1571
|
value: equal2GroupData1 ? value : 0,
|
|
1481
1572
|
formatted_value: equal2GroupData1 ? formattedValue : 0,
|
|
1482
1573
|
group_name: ((_groupData$3 = groupData[1]) === null || _groupData$3 === void 0 ? void 0 : _groupData$3.name) || '',
|
|
1483
|
-
color: ((_groupData$4 = groupData[1]) === null || _groupData$4 === void 0 ? void 0 : _groupData$4.color) ||
|
|
1574
|
+
color: ((_groupData$4 = groupData[1]) === null || _groupData$4 === void 0 ? void 0 : _groupData$4.color) || STYLE_COLORS[0].colors[0],
|
|
1484
1575
|
rows: [item]
|
|
1485
1576
|
});
|
|
1486
1577
|
}
|
|
@@ -1511,14 +1602,14 @@ SQLStatisticsUtils.trendMapChartSQLResult2JavaScript = (chart, sqlRows, chartSQL
|
|
|
1511
1602
|
const {
|
|
1512
1603
|
compareValue: value1,
|
|
1513
1604
|
comparedValue: value2
|
|
1514
|
-
} =
|
|
1605
|
+
} = BaseUtils.summaryDurationResult(sqlRows, date_granularity, summary_type, summary_method, true, sqlGroupbyColumnKey, sqlSummaryColumnKey);
|
|
1515
1606
|
compareValue = value1;
|
|
1516
1607
|
comparedValue = value2;
|
|
1517
1608
|
} else {
|
|
1518
1609
|
const {
|
|
1519
1610
|
compareDate,
|
|
1520
1611
|
comparedDate
|
|
1521
|
-
} = (
|
|
1612
|
+
} = getCompareDate(date_granularity, 'app');
|
|
1522
1613
|
for (const item of sqlRows) {
|
|
1523
1614
|
if (!item[sqlGroupbyColumnKey]) continue;
|
|
1524
1615
|
const currentDate = item[sqlGroupbyColumnKey] + '';
|
|
@@ -1548,11 +1639,11 @@ SQLStatisticsUtils.trendMapChartSQLResult2JavaScript = (chart, sqlRows, chartSQL
|
|
|
1548
1639
|
}
|
|
1549
1640
|
let type;
|
|
1550
1641
|
if (compareValue > comparedValue) {
|
|
1551
|
-
type =
|
|
1642
|
+
type = TREND_TYPES.UP;
|
|
1552
1643
|
} else if (compareValue < comparedValue) {
|
|
1553
|
-
type =
|
|
1644
|
+
type = TREND_TYPES.DOWN;
|
|
1554
1645
|
} else if (compareValue === comparedValue) {
|
|
1555
|
-
type =
|
|
1646
|
+
type = TREND_TYPES.EQUAL;
|
|
1556
1647
|
}
|
|
1557
1648
|
if (compareValue === 0 && comparedValue === 0) {
|
|
1558
1649
|
result = '0%';
|
|
@@ -1569,15 +1660,15 @@ SQLStatisticsUtils.sqlResult2JavaScript = async (chart, sqlRows, chartSQLMap, co
|
|
|
1569
1660
|
type
|
|
1570
1661
|
} = chart.config;
|
|
1571
1662
|
switch (type) {
|
|
1572
|
-
case
|
|
1663
|
+
case CHART_TYPE.TABLE_ELEMENT:
|
|
1573
1664
|
{
|
|
1574
1665
|
return {
|
|
1575
1666
|
result: sqlRows
|
|
1576
1667
|
};
|
|
1577
1668
|
}
|
|
1578
|
-
case
|
|
1669
|
+
case CHART_TYPE.TABLE:
|
|
1579
1670
|
{
|
|
1580
|
-
sqlRows =
|
|
1671
|
+
sqlRows = BaseUtils.recalculateAvg(sqlRows);
|
|
1581
1672
|
const {
|
|
1582
1673
|
column_groupby_column_key
|
|
1583
1674
|
} = chart.config;
|
|
@@ -1593,106 +1684,106 @@ SQLStatisticsUtils.sqlResult2JavaScript = async (chart, sqlRows, chartSQLMap, co
|
|
|
1593
1684
|
}
|
|
1594
1685
|
return result;
|
|
1595
1686
|
}
|
|
1596
|
-
case
|
|
1597
|
-
case
|
|
1598
|
-
case
|
|
1687
|
+
case CHART_TYPE.PIE:
|
|
1688
|
+
case CHART_TYPE.RING:
|
|
1689
|
+
case CHART_TYPE.TREE_MAP:
|
|
1599
1690
|
{
|
|
1600
1691
|
return {
|
|
1601
1692
|
result: await _SQLStatisticsUtils.basicChartSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1602
1693
|
};
|
|
1603
1694
|
}
|
|
1604
|
-
case
|
|
1695
|
+
case CHART_TYPE.BASIC_NUMBER_CARD:
|
|
1605
1696
|
{
|
|
1606
1697
|
return {
|
|
1607
1698
|
result: _SQLStatisticsUtils.basicNumberCardSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1608
1699
|
};
|
|
1609
1700
|
}
|
|
1610
|
-
case
|
|
1701
|
+
case CHART_TYPE.DASHBOARD:
|
|
1611
1702
|
{
|
|
1612
1703
|
return {
|
|
1613
1704
|
result: _SQLStatisticsUtils.dashboardSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1614
1705
|
};
|
|
1615
1706
|
}
|
|
1616
|
-
case
|
|
1617
|
-
case
|
|
1618
|
-
case
|
|
1619
|
-
case
|
|
1620
|
-
case
|
|
1707
|
+
case CHART_TYPE.BAR:
|
|
1708
|
+
case CHART_TYPE.LINE:
|
|
1709
|
+
case CHART_TYPE.HORIZONTAL_BAR:
|
|
1710
|
+
case CHART_TYPE.AREA:
|
|
1711
|
+
case CHART_TYPE.FUNNEL:
|
|
1621
1712
|
{
|
|
1622
1713
|
return {
|
|
1623
1714
|
result: await _SQLStatisticsUtils.basicChartSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1624
1715
|
};
|
|
1625
1716
|
}
|
|
1626
|
-
case
|
|
1627
|
-
case
|
|
1717
|
+
case CHART_TYPE.COMPLETENESS:
|
|
1718
|
+
case CHART_TYPE.COMPLETENESS_GROUP:
|
|
1628
1719
|
{
|
|
1629
|
-
const result = _SQLStatisticsUtils.completenessSQlResult(chart, sqlRows, chartSQLMap, tables);
|
|
1720
|
+
const result = await _SQLStatisticsUtils.completenessSQlResult(chart, sqlRows, chartSQLMap, tables);
|
|
1630
1721
|
return {
|
|
1631
1722
|
result
|
|
1632
1723
|
};
|
|
1633
1724
|
}
|
|
1634
|
-
case
|
|
1725
|
+
case CHART_TYPE.COMBINATION:
|
|
1635
1726
|
{
|
|
1636
1727
|
return {
|
|
1637
1728
|
result: await _SQLStatisticsUtils.combinationSQLResult2Javascript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1638
1729
|
};
|
|
1639
1730
|
}
|
|
1640
|
-
case
|
|
1731
|
+
case CHART_TYPE.COMPARE_BAR:
|
|
1641
1732
|
{
|
|
1642
1733
|
return {
|
|
1643
1734
|
result: await _SQLStatisticsUtils.compareSQLResult2Javascript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1644
1735
|
};
|
|
1645
1736
|
}
|
|
1646
|
-
case
|
|
1647
|
-
case
|
|
1648
|
-
case
|
|
1649
|
-
case
|
|
1650
|
-
case
|
|
1651
|
-
case
|
|
1737
|
+
case CHART_TYPE.BAR_GROUP:
|
|
1738
|
+
case CHART_TYPE.BAR_STACK:
|
|
1739
|
+
case CHART_TYPE.LINE_GROUP:
|
|
1740
|
+
case CHART_TYPE.AREA_GROUP:
|
|
1741
|
+
case CHART_TYPE.HORIZONTAL_GROUP_BAR:
|
|
1742
|
+
case CHART_TYPE.STACKED_HORIZONTAL_BAR:
|
|
1652
1743
|
{
|
|
1653
1744
|
return {
|
|
1654
1745
|
result: await _SQLStatisticsUtils.groupingChartSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1655
1746
|
};
|
|
1656
1747
|
}
|
|
1657
|
-
case
|
|
1748
|
+
case CHART_TYPE.SCATTER:
|
|
1658
1749
|
{
|
|
1659
1750
|
return {
|
|
1660
|
-
result: _SQLStatisticsUtils.scatterSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1751
|
+
result: await _SQLStatisticsUtils.scatterSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1661
1752
|
};
|
|
1662
1753
|
}
|
|
1663
|
-
case
|
|
1754
|
+
case CHART_TYPE.BAR_CUSTOM:
|
|
1664
1755
|
{
|
|
1665
1756
|
return {
|
|
1666
1757
|
result: await _SQLStatisticsUtils.customChartSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables, params)
|
|
1667
1758
|
};
|
|
1668
1759
|
}
|
|
1669
|
-
case
|
|
1670
|
-
case
|
|
1760
|
+
case CHART_TYPE.MAP:
|
|
1761
|
+
case CHART_TYPE.MAP_BUBBLE:
|
|
1671
1762
|
{
|
|
1672
1763
|
return {
|
|
1673
1764
|
result: _SQLStatisticsUtils.mapSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1674
1765
|
};
|
|
1675
1766
|
}
|
|
1676
|
-
case
|
|
1677
|
-
case
|
|
1767
|
+
case CHART_TYPE.WORLD_MAP:
|
|
1768
|
+
case CHART_TYPE.WORLD_MAP_BUBBLE:
|
|
1678
1769
|
{
|
|
1679
1770
|
return {
|
|
1680
1771
|
result: _SQLStatisticsUtils.worldMapSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1681
1772
|
};
|
|
1682
1773
|
}
|
|
1683
|
-
case
|
|
1774
|
+
case CHART_TYPE.HEAT_MAP:
|
|
1684
1775
|
{
|
|
1685
1776
|
return {
|
|
1686
1777
|
result: _SQLStatisticsUtils.heatMapChartSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1687
1778
|
};
|
|
1688
1779
|
}
|
|
1689
|
-
case
|
|
1780
|
+
case CHART_TYPE.MIRROR:
|
|
1690
1781
|
{
|
|
1691
1782
|
return {
|
|
1692
1783
|
result: await _SQLStatisticsUtils.mirrorMapChartSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
1693
1784
|
};
|
|
1694
1785
|
}
|
|
1695
|
-
case
|
|
1786
|
+
case CHART_TYPE.TREND:
|
|
1696
1787
|
{
|
|
1697
1788
|
return {
|
|
1698
1789
|
result: _SQLStatisticsUtils.trendMapChartSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
|
|
@@ -1711,16 +1802,10 @@ SQLStatisticsUtils._get_completeness_name = (row, column) => {
|
|
|
1711
1802
|
}
|
|
1712
1803
|
return value;
|
|
1713
1804
|
};
|
|
1714
|
-
SQLStatisticsUtils.completenessSQlResult = (chart, sqlRows, chartSQLMap, tables) => {
|
|
1715
|
-
const {
|
|
1716
|
-
config: {
|
|
1717
|
-
type
|
|
1718
|
-
}
|
|
1719
|
-
} = chart;
|
|
1720
|
-
const isGroup = type === _constants.CHART_TYPE.COMPLETENESS_GROUP;
|
|
1805
|
+
SQLStatisticsUtils.completenessSQlResult = async (chart, sqlRows, chartSQLMap, tables) => {
|
|
1721
1806
|
const {
|
|
1722
1807
|
sqlColumns,
|
|
1723
|
-
|
|
1808
|
+
sqlColumnGroupbyColumnKey
|
|
1724
1809
|
} = chartSQLMap;
|
|
1725
1810
|
const {
|
|
1726
1811
|
name_column,
|
|
@@ -1728,134 +1813,23 @@ SQLStatisticsUtils.completenessSQlResult = (chart, sqlRows, chartSQLMap, tables)
|
|
|
1728
1813
|
target_column,
|
|
1729
1814
|
column_groupby_column
|
|
1730
1815
|
} = sqlColumns;
|
|
1731
|
-
const
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
if (
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
row[name_column.key] = _intl.default.get('Empty');
|
|
1740
|
-
acc[_intl.default.get('Empty')] = row;
|
|
1741
|
-
return acc;
|
|
1742
|
-
}
|
|
1743
|
-
names.forEach(name => {
|
|
1744
|
-
if (!acc[name]) {
|
|
1745
|
-
row[name_column.key] = name;
|
|
1746
|
-
acc[name] = row;
|
|
1747
|
-
} else {
|
|
1748
|
-
const accRow = acc[name];
|
|
1749
|
-
Object.keys(row).forEach(key => {
|
|
1750
|
-
if (key === completed_column.key || key === target_column.key) {
|
|
1751
|
-
// in case of null
|
|
1752
|
-
if (!row[key]) {
|
|
1753
|
-
row[key] = 0;
|
|
1754
|
-
}
|
|
1755
|
-
if (!accRow[key]) {
|
|
1756
|
-
accRow[key] = 0;
|
|
1757
|
-
}
|
|
1758
|
-
accRow[key] = accRow[key] + row[key];
|
|
1759
|
-
}
|
|
1760
|
-
});
|
|
1761
|
-
}
|
|
1762
|
-
});
|
|
1763
|
-
return acc;
|
|
1764
|
-
}, {});
|
|
1765
|
-
summedSqlRows = Object.values(sumSqlRows);
|
|
1766
|
-
} else {
|
|
1767
|
-
const sumSqlRows = sqlRows.reduce((acc, row) => {
|
|
1768
|
-
const nameValue = row[name_column.key];
|
|
1769
|
-
if (!nameValue) {
|
|
1770
|
-
row[name_column.key] = _intl.default.get('Empty');
|
|
1771
|
-
acc[_intl.default.get('Empty')] = row;
|
|
1772
|
-
return acc;
|
|
1773
|
-
}
|
|
1774
|
-
if (!acc[nameValue]) {
|
|
1775
|
-
acc[nameValue] = row;
|
|
1776
|
-
} else {
|
|
1777
|
-
const accRow = acc[nameValue];
|
|
1778
|
-
Object.keys(row).forEach(key => {
|
|
1779
|
-
if (key === completed_column.key || key === target_column.key) {
|
|
1780
|
-
accRow[key] = accRow[key] + row[key];
|
|
1781
|
-
}
|
|
1782
|
-
});
|
|
1783
|
-
}
|
|
1784
|
-
return acc;
|
|
1785
|
-
}, {});
|
|
1786
|
-
summedSqlRows = Object.values(sumSqlRows);
|
|
1787
|
-
}
|
|
1788
|
-
} else {
|
|
1789
|
-
if (nameColumnDataAsAnArray) {
|
|
1790
|
-
const sumSqlRows = sqlRows.reduce((acc, row) => {
|
|
1791
|
-
const groupby = row[sqlColumnGroupByColumnKey];
|
|
1792
|
-
const names = row[name_column.key];
|
|
1793
|
-
if (!names) {
|
|
1794
|
-
const key = "empty_".concat(groupby);
|
|
1795
|
-
row[name_column.key] = _intl.default.get('Empty');
|
|
1796
|
-
acc[key] = row;
|
|
1797
|
-
return acc;
|
|
1798
|
-
}
|
|
1799
|
-
names.forEach(name => {
|
|
1800
|
-
const key = "".concat(name, "_").concat(groupby);
|
|
1801
|
-
if (!acc[key]) {
|
|
1802
|
-
row[name_column.key] = name;
|
|
1803
|
-
acc[key] = row;
|
|
1804
|
-
} else {
|
|
1805
|
-
const accRow = acc[key];
|
|
1806
|
-
Object.keys(row).forEach(k => {
|
|
1807
|
-
if (key === completed_column.key || key === target_column.key) {
|
|
1808
|
-
accRow[key] = accRow[key] + row[key];
|
|
1809
|
-
}
|
|
1810
|
-
});
|
|
1811
|
-
}
|
|
1812
|
-
});
|
|
1813
|
-
return acc;
|
|
1814
|
-
}, {});
|
|
1815
|
-
summedSqlRows = Object.values(sumSqlRows);
|
|
1816
|
-
} else {
|
|
1817
|
-
const sumSqlRows = sqlRows.reduce((acc, row) => {
|
|
1818
|
-
const nameValue = row[name_column.key];
|
|
1819
|
-
const groupby = row[sqlColumnGroupByColumnKey];
|
|
1820
|
-
if (!nameValue) {
|
|
1821
|
-
const key = "empty_".concat(groupby);
|
|
1822
|
-
row[name_column.key] = _intl.default.get('Empty');
|
|
1823
|
-
acc[key] = row;
|
|
1824
|
-
return acc;
|
|
1825
|
-
}
|
|
1826
|
-
const key = "".concat(nameValue, "_").concat(groupby);
|
|
1827
|
-
if (!acc[key]) {
|
|
1828
|
-
acc[key] = row;
|
|
1829
|
-
} else {
|
|
1830
|
-
const accRow = acc[key];
|
|
1831
|
-
Object.keys(row).forEach(key => {
|
|
1832
|
-
if (key === completed_column.key || key === target_column.key) {
|
|
1833
|
-
accRow[key] = accRow[key] + row[key];
|
|
1834
|
-
}
|
|
1835
|
-
});
|
|
1836
|
-
}
|
|
1837
|
-
return acc;
|
|
1838
|
-
}, {});
|
|
1839
|
-
summedSqlRows = Object.values(sumSqlRows);
|
|
1840
|
-
}
|
|
1816
|
+
const nameColumnDataAsAnArray = findIfColumnDataIsArray(name_column);
|
|
1817
|
+
// group by name_column, so it can only have one value
|
|
1818
|
+
let originalSqlRows = cloneDeep(sqlRows);
|
|
1819
|
+
if (nameColumnDataAsAnArray) {
|
|
1820
|
+
sqlRows.forEach(row => {
|
|
1821
|
+
var _row$name_column$key;
|
|
1822
|
+
row[name_column.key] = (_row$name_column$key = row[name_column.key]) === null || _row$name_column$key === void 0 ? void 0 : _row$name_column$key[0];
|
|
1823
|
+
});
|
|
1841
1824
|
}
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
summedSqlRows.forEach(row => {
|
|
1825
|
+
await BaseUtils.updateTableViewList(sqlRows, name_column, name_column.key, 'color', false, true);
|
|
1826
|
+
if (sqlColumnGroupbyColumnKey) await BaseUtils.updateTableViewList(sqlRows, column_groupby_column, sqlColumnGroupbyColumnKey, 'color', false, false);
|
|
1827
|
+
const res = [];
|
|
1828
|
+
sqlRows.forEach((row, index) => {
|
|
1847
1829
|
const nameValue = row[name_column.key];
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
if (sqlColumnGroupByColumnKey) {
|
|
1852
|
-
targetValue = row["SUM(".concat(target_column.name, ")")];
|
|
1853
|
-
completedValue = row["SUM(".concat(completed_column.name, ")")];
|
|
1854
|
-
groupby = row[sqlColumnGroupByColumnKey] || _intl.default.get('Empty');
|
|
1855
|
-
} else {
|
|
1856
|
-
completedValue = _SQLStatisticsUtils._get_completeness_name(row, completed_column);
|
|
1857
|
-
targetValue = _SQLStatisticsUtils._get_completeness_name(row, target_column);
|
|
1858
|
-
}
|
|
1830
|
+
const targetValue = row[`SUM(${target_column.name})`];
|
|
1831
|
+
const completedValue = row[`SUM(${completed_column.name})`];
|
|
1832
|
+
const groupby = row[sqlColumnGroupbyColumnKey] || intl.get('Empty');
|
|
1859
1833
|
let completedRate;
|
|
1860
1834
|
if (!targetValue && completedValue) {
|
|
1861
1835
|
completedRate = 100;
|
|
@@ -1872,8 +1846,9 @@ SQLStatisticsUtils.completenessSQlResult = (chart, sqlRows, chartSQLMap, tables)
|
|
|
1872
1846
|
original_name,
|
|
1873
1847
|
group_name: 'completed',
|
|
1874
1848
|
groupby,
|
|
1875
|
-
color: row.color ||
|
|
1876
|
-
value: completedValue
|
|
1849
|
+
color: row.color || CHART_STYLE_COLORS[0],
|
|
1850
|
+
value: completedValue,
|
|
1851
|
+
rows: [originalSqlRows[index]]
|
|
1877
1852
|
});
|
|
1878
1853
|
res.push({
|
|
1879
1854
|
name: nameValue,
|
|
@@ -1882,7 +1857,8 @@ SQLStatisticsUtils.completenessSQlResult = (chart, sqlRows, chartSQLMap, tables)
|
|
|
1882
1857
|
value: Math.max(targetValue - completedValue, 0),
|
|
1883
1858
|
groupby,
|
|
1884
1859
|
color: '#bdbdbd',
|
|
1885
|
-
completedRate
|
|
1860
|
+
completedRate,
|
|
1861
|
+
rows: [originalSqlRows[index]]
|
|
1886
1862
|
});
|
|
1887
1863
|
});
|
|
1888
1864
|
|
|
@@ -1894,9 +1870,29 @@ SQLStatisticsUtils.completenessSQlResult = (chart, sqlRows, chartSQLMap, tables)
|
|
|
1894
1870
|
return 1;
|
|
1895
1871
|
}
|
|
1896
1872
|
});
|
|
1897
|
-
|
|
1873
|
+
|
|
1874
|
+
// deduplicate by (name, group_name)
|
|
1875
|
+
const deduplicatedRes = [];
|
|
1876
|
+
const keyMap = {};
|
|
1877
|
+
res.forEach(item => {
|
|
1878
|
+
const key = `${item.name}_${item.group_name}`;
|
|
1879
|
+
if (!keyMap[key]) {
|
|
1880
|
+
keyMap[key] = item;
|
|
1881
|
+
deduplicatedRes.push(item);
|
|
1882
|
+
} else {
|
|
1883
|
+
const existingItem = keyMap[key];
|
|
1884
|
+
existingItem.value = (existingItem.value || 0) + (item.value || 0);
|
|
1885
|
+
if (item.rows) {
|
|
1886
|
+
existingItem.rows = (existingItem.rows || []).concat(item.rows);
|
|
1887
|
+
}
|
|
1888
|
+
if (item.group_name === 'rest' && item.completedRate !== undefined) {
|
|
1889
|
+
existingItem.completedRate = item.completedRate;
|
|
1890
|
+
}
|
|
1891
|
+
}
|
|
1892
|
+
});
|
|
1893
|
+
return deduplicatedRes;
|
|
1898
1894
|
};
|
|
1899
|
-
SQLStatisticsUtils.scatterSQLResult2JavaScript = (chart, sqlRows, chartSQLMap, columnMap, tables) => {
|
|
1895
|
+
SQLStatisticsUtils.scatterSQLResult2JavaScript = async (chart, sqlRows, chartSQLMap, columnMap, tables) => {
|
|
1900
1896
|
const {
|
|
1901
1897
|
sqlXColumnKey,
|
|
1902
1898
|
sqlYColumnKey,
|
|
@@ -1908,15 +1904,15 @@ SQLStatisticsUtils.scatterSQLResult2JavaScript = (chart, sqlRows, chartSQLMap, c
|
|
|
1908
1904
|
summaryColumn
|
|
1909
1905
|
} = columnMap;
|
|
1910
1906
|
// format sql rows
|
|
1911
|
-
const originalSqlRows =
|
|
1907
|
+
const originalSqlRows = cloneDeep(sqlRows);
|
|
1912
1908
|
const isScatter = true;
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
if (sqlColumnGroupbyColumnKey)
|
|
1909
|
+
await BaseUtils.updateTableViewList(sqlRows, groupbyColumn, groupbyColumn.key, 'color', isScatter, true);
|
|
1910
|
+
await BaseUtils.updateTableViewList(sqlRows, summaryColumn, summaryColumn.key, 'color', isScatter, true);
|
|
1911
|
+
if (sqlColumnGroupbyColumnKey) await BaseUtils.updateTableViewList(sqlRows, columnGroupbyColumn, sqlColumnGroupbyColumnKey, 'color', isScatter, false);
|
|
1916
1912
|
const res = [];
|
|
1917
1913
|
sqlRows.forEach((row, index) => {
|
|
1918
|
-
const xValue = row[sqlXColumnKey]
|
|
1919
|
-
const yValue = row[sqlYColumnKey]
|
|
1914
|
+
const xValue = row[sqlXColumnKey];
|
|
1915
|
+
const yValue = row[sqlYColumnKey];
|
|
1920
1916
|
const groupby = row[sqlColumnGroupbyColumnKey] ? '' + row[sqlColumnGroupbyColumnKey] : null;
|
|
1921
1917
|
const originalSqlRow = originalSqlRows[index];
|
|
1922
1918
|
const originalXValue = originalSqlRow[sqlXColumnKey];
|
|
@@ -1924,16 +1920,17 @@ SQLStatisticsUtils.scatterSQLResult2JavaScript = (chart, sqlRows, chartSQLMap, c
|
|
|
1924
1920
|
const originalGroupby = originalSqlRow[sqlColumnGroupbyColumnKey];
|
|
1925
1921
|
res.push({
|
|
1926
1922
|
name: xValue,
|
|
1927
|
-
value: yValue,
|
|
1923
|
+
value: yValue !== null ? Number(yValue) : yValue,
|
|
1928
1924
|
groupby,
|
|
1925
|
+
rows: [originalSqlRow],
|
|
1929
1926
|
original_value: {
|
|
1930
|
-
rows: [originalSqlRow],
|
|
1931
1927
|
name: originalXValue,
|
|
1932
1928
|
value: originalYValue,
|
|
1933
1929
|
groupby: originalGroupby
|
|
1934
1930
|
}
|
|
1935
1931
|
});
|
|
1936
1932
|
});
|
|
1933
|
+
BaseUtils.sortCharts(res, groupbyColumn, 'name');
|
|
1937
1934
|
return res;
|
|
1938
1935
|
};
|
|
1939
1936
|
SQLStatisticsUtils.mapSQLResult2JavaScript = (chart, sqlRows, chartSQLMap, columnMap, tables) => {
|
|
@@ -2031,8 +2028,8 @@ SQLStatisticsUtils.worldMapSQLResult2JavaScript = (chart, sqlRows, chartSQLMap,
|
|
|
2031
2028
|
let value = nameValueMap[name];
|
|
2032
2029
|
let formatted_value = value;
|
|
2033
2030
|
if (summary_type === 'advanced') {
|
|
2034
|
-
value =
|
|
2035
|
-
formatted_value =
|
|
2031
|
+
value = formatNumericValue(value, summaryColumn);
|
|
2032
|
+
formatted_value = getFormattedValue(value, summaryColumn, summary_method);
|
|
2036
2033
|
}
|
|
2037
2034
|
acc.push({
|
|
2038
2035
|
name,
|
|
@@ -2048,8 +2045,8 @@ SQLStatisticsUtils.worldMapSQLResult2JavaScript = (chart, sqlRows, chartSQLMap,
|
|
|
2048
2045
|
let value = item[sqlSummaryColumnKey];
|
|
2049
2046
|
let formatted_value = value;
|
|
2050
2047
|
if (summary_type === 'advanced') {
|
|
2051
|
-
value =
|
|
2052
|
-
formatted_value =
|
|
2048
|
+
value = formatNumericValue(value, summaryColumn);
|
|
2049
|
+
formatted_value = getFormattedValue(value, summaryColumn, summary_method);
|
|
2053
2050
|
}
|
|
2054
2051
|
if (currentValue) {
|
|
2055
2052
|
const name = typeof currentValue === 'string' ? currentValue : currentValue.country_region;
|
|
@@ -2067,7 +2064,7 @@ SQLStatisticsUtils.calculateChart = async (chart, value, callback, sqlRows) => {
|
|
|
2067
2064
|
const {
|
|
2068
2065
|
tables
|
|
2069
2066
|
} = value;
|
|
2070
|
-
if (!
|
|
2067
|
+
if (!BaseUtils.isValidExistChart(tables, chart)) {
|
|
2071
2068
|
const tip_message = 'Please_complete_the_chart_configuration_first';
|
|
2072
2069
|
return callback && callback('', tip_message, null);
|
|
2073
2070
|
}
|
|
@@ -2077,7 +2074,7 @@ SQLStatisticsUtils.calculateChart = async (chart, value, callback, sqlRows) => {
|
|
|
2077
2074
|
type
|
|
2078
2075
|
} = chart;
|
|
2079
2076
|
const chartType = config.type;
|
|
2080
|
-
const newConfig =
|
|
2077
|
+
const newConfig = BaseUtils.convertConfig(config);
|
|
2081
2078
|
const newChart = {
|
|
2082
2079
|
id,
|
|
2083
2080
|
config: newConfig,
|
|
@@ -2086,11 +2083,11 @@ SQLStatisticsUtils.calculateChart = async (chart, value, callback, sqlRows) => {
|
|
|
2086
2083
|
const {
|
|
2087
2084
|
table_id
|
|
2088
2085
|
} = config;
|
|
2089
|
-
const table =
|
|
2090
|
-
const groupbyColumn =
|
|
2091
|
-
const columnGroupbyColumn =
|
|
2092
|
-
const summaryColumn =
|
|
2093
|
-
const summaryColumnsWithMethod =
|
|
2086
|
+
const table = getTableById(tables, table_id);
|
|
2087
|
+
const groupbyColumn = BaseUtils.getGroupColumn(table, newChart);
|
|
2088
|
+
const columnGroupbyColumn = BaseUtils.getColumnGroupColumn(table, newChart);
|
|
2089
|
+
const summaryColumn = BaseUtils.getSummaryColumn(table, newChart);
|
|
2090
|
+
const summaryColumnsWithMethod = BaseUtils.getSummaryColumnsWithMethod(table, newChart);
|
|
2094
2091
|
// summary column is referring to single_numeric_column, but summaryColumns is referring to multiple_numeric_column
|
|
2095
2092
|
// single_numeric_column is used as the first setting option when switched to multiple_numeric_column
|
|
2096
2093
|
const columnMap = {
|
|
@@ -2102,7 +2099,7 @@ SQLStatisticsUtils.calculateChart = async (chart, value, callback, sqlRows) => {
|
|
|
2102
2099
|
const chartTableColumns = table.columns;
|
|
2103
2100
|
let chartSQLMap = null;
|
|
2104
2101
|
try {
|
|
2105
|
-
chartSQLMap =
|
|
2102
|
+
chartSQLMap = chartColumn2SqlColumn(newChart, table);
|
|
2106
2103
|
} catch (error) {
|
|
2107
2104
|
let error_message = 'There_are_some_problems_with_the_filters';
|
|
2108
2105
|
if (error.message) error_message = error.message;
|
|
@@ -2111,7 +2108,7 @@ SQLStatisticsUtils.calculateChart = async (chart, value, callback, sqlRows) => {
|
|
|
2111
2108
|
const tipMessage = 'There_are_no_statistic_results_yet';
|
|
2112
2109
|
|
|
2113
2110
|
// Custom Bar
|
|
2114
|
-
if (chartType ===
|
|
2111
|
+
if (chartType === CHART_TYPE.BAR_CUSTOM) {
|
|
2115
2112
|
const result = [];
|
|
2116
2113
|
for (const [index, item] of sqlRows.entries()) {
|
|
2117
2114
|
if (item.length !== 0) {
|
|
@@ -2138,14 +2135,14 @@ SQLStatisticsUtils.calculateChart = async (chart, value, callback, sqlRows) => {
|
|
|
2138
2135
|
}
|
|
2139
2136
|
|
|
2140
2137
|
// map is special, still need to show map even data is empty
|
|
2141
|
-
if (!Array.isArray(sqlRows) || sqlRows.length === 0 && !
|
|
2138
|
+
if (!Array.isArray(sqlRows) || sqlRows.length === 0 && !MAP_CHART_TYPES.includes(chartType)) {
|
|
2142
2139
|
callback && callback('', tipMessage, null);
|
|
2143
2140
|
return;
|
|
2144
2141
|
}
|
|
2145
2142
|
const chartResult = await _SQLStatisticsUtils.sqlResult2JavaScript(newChart, sqlRows, chartSQLMap, columnMap, tables);
|
|
2146
2143
|
|
|
2147
2144
|
// map is special
|
|
2148
|
-
if (
|
|
2145
|
+
if (BaseUtils.imEmptyChartResult(chartResult) && !chartType.includes('map')) {
|
|
2149
2146
|
callback && callback('', tipMessage, null);
|
|
2150
2147
|
return;
|
|
2151
2148
|
}
|
|
@@ -2165,7 +2162,7 @@ SQLStatisticsUtils.calculateStaticChart = (chart, value, statisticalResult, call
|
|
|
2165
2162
|
config
|
|
2166
2163
|
} = chart;
|
|
2167
2164
|
const tables = value.tables;
|
|
2168
|
-
const newConfig =
|
|
2165
|
+
const newConfig = BaseUtils.convertConfig(config);
|
|
2169
2166
|
const newChart = {
|
|
2170
2167
|
id,
|
|
2171
2168
|
config: newConfig
|
|
@@ -2173,31 +2170,31 @@ SQLStatisticsUtils.calculateStaticChart = (chart, value, statisticalResult, call
|
|
|
2173
2170
|
const {
|
|
2174
2171
|
type
|
|
2175
2172
|
} = config;
|
|
2176
|
-
if ([
|
|
2173
|
+
if ([CHART_TYPE.TABLE, CHART_TYPE.TABLE_ELEMENT].includes(type)) return callback && callback('', '', statisticalResult);
|
|
2177
2174
|
const {
|
|
2178
2175
|
table_id,
|
|
2179
2176
|
sort_type
|
|
2180
2177
|
} = config;
|
|
2181
|
-
const table =
|
|
2182
|
-
const groupbyColumn =
|
|
2178
|
+
const table = getTableById(tables, table_id);
|
|
2179
|
+
const groupbyColumn = BaseUtils.getGroupColumn(table, newChart);
|
|
2183
2180
|
let result = statisticalResult.result;
|
|
2184
2181
|
if (!result) {
|
|
2185
2182
|
const tip_message = 'There_are_no_statistic_results_yet';
|
|
2186
2183
|
return callback && callback('', tip_message, null);
|
|
2187
2184
|
}
|
|
2188
|
-
if (
|
|
2189
|
-
|
|
2185
|
+
if (SUPPORT_DATA_SORT_CHART_TYPES.includes(type) && sort_type) {
|
|
2186
|
+
BaseUtils.sortChartData(result, sort_type);
|
|
2190
2187
|
const newStatisticalResult = {
|
|
2191
2188
|
...statisticalResult,
|
|
2192
2189
|
result
|
|
2193
2190
|
};
|
|
2194
2191
|
return callback && callback('', '', newStatisticalResult);
|
|
2195
2192
|
}
|
|
2196
|
-
|
|
2193
|
+
BaseUtils.sortCharts(result, groupbyColumn, 'name');
|
|
2197
2194
|
const newStatisticalResult = {
|
|
2198
2195
|
...statisticalResult,
|
|
2199
2196
|
result
|
|
2200
2197
|
};
|
|
2201
2198
|
return callback && callback('', '', newStatisticalResult);
|
|
2202
2199
|
};
|
|
2203
|
-
|
|
2200
|
+
export default SQLStatisticsUtils;
|