sea-chart 0.0.1-beta
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/README.md +120 -0
- package/dist/assets/icons/area-chart.svg +10 -0
- package/dist/assets/icons/bar-chart.svg +12 -0
- package/dist/assets/icons/card.svg +22 -0
- package/dist/assets/icons/combination-chart.svg +17 -0
- package/dist/assets/icons/dtable-logo.svg +16 -0
- package/dist/assets/icons/facet-chart.svg +12 -0
- package/dist/assets/icons/gauge.svg +18 -0
- package/dist/assets/icons/heat-map.svg +14 -0
- package/dist/assets/icons/histogram.svg +12 -0
- package/dist/assets/icons/line-chart.svg +12 -0
- package/dist/assets/icons/map.svg +20 -0
- package/dist/assets/icons/pie-chart.svg +11 -0
- package/dist/assets/icons/rectangular-tree-diagram.svg +10 -0
- package/dist/assets/icons/scatter-chart.svg +15 -0
- package/dist/assets/icons/type-change.svg +17 -0
- package/dist/assets/img/area-chart.png +0 -0
- package/dist/assets/img/area-group-chart.png +0 -0
- package/dist/assets/img/bar-group.png +0 -0
- package/dist/assets/img/bar-stack.png +0 -0
- package/dist/assets/img/bar.png +0 -0
- package/dist/assets/img/combination-chart.png +0 -0
- package/dist/assets/img/compared-chart.png +0 -0
- package/dist/assets/img/completeness-chart.png +0 -0
- package/dist/assets/img/custom-bar.png +0 -0
- package/dist/assets/img/dashboard-chart.png +0 -0
- package/dist/assets/img/group-completeness-chart.png +0 -0
- package/dist/assets/img/group_line.png +0 -0
- package/dist/assets/img/heat-map.png +0 -0
- package/dist/assets/img/horizontal-bar.png +0 -0
- package/dist/assets/img/horizontal-group-bar.png +0 -0
- package/dist/assets/img/line.png +0 -0
- package/dist/assets/img/map-bubble.png +0 -0
- package/dist/assets/img/map.png +0 -0
- package/dist/assets/img/mirror.png +0 -0
- package/dist/assets/img/number-card.png +0 -0
- package/dist/assets/img/pie.png +0 -0
- package/dist/assets/img/pivot-table.png +0 -0
- package/dist/assets/img/ring.png +0 -0
- package/dist/assets/img/scatter.png +0 -0
- package/dist/assets/img/stacked-horizontal-bar.png +0 -0
- package/dist/assets/img/treemap.png +0 -0
- package/dist/assets/img/trend-chart.png +0 -0
- package/dist/assets/img/world-map-bubble.png +0 -0
- package/dist/assets/img/world-map.png +0 -0
- package/dist/components/collaborator/index.js +26 -0
- package/dist/components/icon/index.css +5 -0
- package/dist/components/icon/index.js +24 -0
- package/dist/components/index.js +8 -0
- package/dist/components/loading/index.css +54 -0
- package/dist/components/loading/index.js +12 -0
- package/dist/components/number-input/index.js +31 -0
- package/dist/components/pixel-editor/index.css +29 -0
- package/dist/components/pixel-editor/index.js +38 -0
- package/dist/components/select-group/index.css +67 -0
- package/dist/components/select-group/index.js +52 -0
- package/dist/components/types-dialog/index.css +97 -0
- package/dist/components/types-dialog/index.js +116 -0
- package/dist/constants/geolocation.js +11 -0
- package/dist/constants/index.js +184 -0
- package/dist/constants/model.js +187 -0
- package/dist/constants/style.js +15 -0
- package/dist/constants/type-image.js +59 -0
- package/dist/constants/type.js +124 -0
- package/dist/context.js +33 -0
- package/dist/editor/index.css +0 -0
- package/dist/editor/index.js +36 -0
- package/dist/index.js +6 -0
- package/dist/intl.js +37 -0
- package/dist/locale/index.js +18 -0
- package/dist/locale/lang/de.js +141 -0
- package/dist/locale/lang/en.js +143 -0
- package/dist/locale/lang/es.js +141 -0
- package/dist/locale/lang/fr.js +141 -0
- package/dist/locale/lang/pt.js +141 -0
- package/dist/locale/lang/ru.js +141 -0
- package/dist/locale/lang/zh_CN.js +143 -0
- package/dist/model/area-group.js +41 -0
- package/dist/model/area.js +32 -0
- package/dist/model/bar-group.js +44 -0
- package/dist/model/bar-stack.js +41 -0
- package/dist/model/bar.js +38 -0
- package/dist/model/base-model.js +9 -0
- package/dist/model/basic-number-card.js +22 -0
- package/dist/model/chart.js +23 -0
- package/dist/model/combination.js +38 -0
- package/dist/model/compare-bar.js +39 -0
- package/dist/model/completeness-group.js +24 -0
- package/dist/model/completeness.js +18 -0
- package/dist/model/dashboard.js +16 -0
- package/dist/model/generic-model.js +224 -0
- package/dist/model/heat-map.js +23 -0
- package/dist/model/horizontal-bar.js +38 -0
- package/dist/model/horizontal-group-bar.js +43 -0
- package/dist/model/index.js +63 -0
- package/dist/model/line-group.js +44 -0
- package/dist/model/line.js +38 -0
- package/dist/model/map-bubble.js +27 -0
- package/dist/model/map.js +27 -0
- package/dist/model/mirror.js +26 -0
- package/dist/model/pie.js +26 -0
- package/dist/model/ring.js +26 -0
- package/dist/model/scatter.js +19 -0
- package/dist/model/stacked-horizontal-bar.js +32 -0
- package/dist/model/table.js +23 -0
- package/dist/model/tree-map.js +20 -0
- package/dist/model/trend.js +24 -0
- package/dist/model/user.js +15 -0
- package/dist/model/world-map-bubble.js +26 -0
- package/dist/model/world-map.js +26 -0
- package/dist/settings/advance-bar-settings/data-settings.js +143 -0
- package/dist/settings/advance-bar-settings/index.js +3 -0
- package/dist/settings/advance-bar-settings/style-settings.js +161 -0
- package/dist/settings/bar-settings/data-settings.js +162 -0
- package/dist/settings/bar-settings/index.js +3 -0
- package/dist/settings/bar-settings/style-settings.js +179 -0
- package/dist/settings/basic-number-card/data-settings.js +126 -0
- package/dist/settings/basic-number-card/index.js +3 -0
- package/dist/settings/basic-number-card/style-settings.js +42 -0
- package/dist/settings/combination-settings/data-settings.js +279 -0
- package/dist/settings/combination-settings/index.js +3 -0
- package/dist/settings/combination-settings/style-settings.js +174 -0
- package/dist/settings/dashboard-settings/data-settings.js +179 -0
- package/dist/settings/dashboard-settings/index.js +2 -0
- package/dist/settings/data-settings.js +73 -0
- package/dist/settings/horizontal-bar-settings/data-settings.js +55 -0
- package/dist/settings/horizontal-bar-settings/index.js +3 -0
- package/dist/settings/horizontal-bar-settings/style-settings.js +46 -0
- package/dist/settings/index.css +85 -0
- package/dist/settings/index.js +76 -0
- package/dist/settings/pie-settings/data-settings.js +146 -0
- package/dist/settings/pie-settings/index.js +3 -0
- package/dist/settings/pie-settings/style-settings.js +141 -0
- package/dist/settings/style-settings.js +118 -0
- package/dist/settings/table-settings/data-settings.js +549 -0
- package/dist/settings/table-settings/index.js +2 -0
- package/dist/settings/time-comparison-settings/data-settings.js +172 -0
- package/dist/settings/time-comparison-settings/index.js +3 -0
- package/dist/settings/time-comparison-settings/style-settings.js +213 -0
- package/dist/settings/widgets/basic-summary/index.css +12 -0
- package/dist/settings/widgets/basic-summary/index.js +176 -0
- package/dist/settings/widgets/chart-type/index.css +31 -0
- package/dist/settings/widgets/chart-type/index.js +59 -0
- package/dist/settings/widgets/common-data-settings.js +48 -0
- package/dist/settings/widgets/data-filter/index.css +17 -0
- package/dist/settings/widgets/data-filter/index.js +89 -0
- package/dist/settings/widgets/data-sort.js +44 -0
- package/dist/settings/widgets/date-summary-item.js +111 -0
- package/dist/settings/widgets/display-values-settings/index.css +13 -0
- package/dist/settings/widgets/display-values-settings/index.js +42 -0
- package/dist/settings/widgets/divider/index.css +4 -0
- package/dist/settings/widgets/divider/index.js +12 -0
- package/dist/settings/widgets/font-settings/font-size-settings.js +33 -0
- package/dist/settings/widgets/font-settings/font-weight-settings.js +44 -0
- package/dist/settings/widgets/font-settings/index.js +3 -0
- package/dist/settings/widgets/group-by.js +160 -0
- package/dist/settings/widgets/label-color.js +30 -0
- package/dist/settings/widgets/min-max-setting.js +52 -0
- package/dist/settings/widgets/mininum-slice-percent.js +63 -0
- package/dist/settings/widgets/numeric-summary-item.js +90 -0
- package/dist/settings/widgets/select-table/index.css +0 -0
- package/dist/settings/widgets/select-table/index.js +38 -0
- package/dist/settings/widgets/stack.js +50 -0
- package/dist/settings/widgets/summary-method-setting.js +66 -0
- package/dist/settings/widgets/summary-settings.js +411 -0
- package/dist/settings/widgets/switch/index.css +37 -0
- package/dist/settings/widgets/switch/index.js +24 -0
- package/dist/settings/widgets/text-horizontal-settings.js +25 -0
- package/dist/settings/widgets/time-picker.js +173 -0
- package/dist/settings/widgets/title-settings/index.js +60 -0
- package/dist/settings/widgets/title-settings/title-text.js +25 -0
- package/dist/settings/widgets/x-axios.js +0 -0
- package/dist/settings/widgets/y-axis-group-settings.js +438 -0
- package/dist/utils/cell-format-utils.js +42 -0
- package/dist/utils/chart-data-sql.js +606 -0
- package/dist/utils/chart-utils.js +1800 -0
- package/dist/utils/chart.js +6 -0
- package/dist/utils/collaborator-utils.js +39 -0
- package/dist/utils/column-2-sql-column.js +551 -0
- package/dist/utils/column-utils.js +208 -0
- package/dist/utils/custom-g2.js +612 -0
- package/dist/utils/date-translate.js +66 -0
- package/dist/utils/index.js +48 -0
- package/dist/utils/key-generator.js +13 -0
- package/dist/utils/object-utils.js +45 -0
- package/dist/utils/options-utils.js +60 -0
- package/dist/view/index.css +53 -0
- package/dist/view/index.js +189 -0
- package/dist/view/title/index.css +3 -0
- package/dist/view/title/index.js +46 -0
- package/dist/view/wrapper/area.js +150 -0
- package/dist/view/wrapper/bar-group.js +148 -0
- package/dist/view/wrapper/bar.js +138 -0
- package/dist/view/wrapper/basic-number-card.js +127 -0
- package/dist/view/wrapper/chart-component.js +261 -0
- package/dist/view/wrapper/combination.js +399 -0
- package/dist/view/wrapper/dashboard.js +164 -0
- package/dist/view/wrapper/horizontal-bar-group.js +149 -0
- package/dist/view/wrapper/horizontal-bar.js +140 -0
- package/dist/view/wrapper/horizontal-component.js +78 -0
- package/dist/view/wrapper/index.js +200 -0
- package/dist/view/wrapper/line-group.js +145 -0
- package/dist/view/wrapper/line.js +157 -0
- package/dist/view/wrapper/pie.js +185 -0
- package/dist/view/wrapper/ring.js +264 -0
- package/dist/view/wrapper/table/index.css +103 -0
- package/dist/view/wrapper/table/index.js +31 -0
- package/dist/view/wrapper/table/one-dimension-table-no-numeric-columns.js +144 -0
- package/dist/view/wrapper/table/one-dimension-table-with-numeric-columns.js +198 -0
- package/dist/view/wrapper/table/pivot-table-display-name.js +247 -0
- package/dist/view/wrapper/table/two-dimension-table.js +249 -0
- package/dist/view/wrapper/treemap.js +186 -0
- package/package.json +151 -0
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
import { CellType, filter2SqlCondition, isNumericColumn, isDateColumn } from 'dtable-utils';
|
|
2
|
+
import { CHART_TYPE, DTABLE_DB_SUMMARY_METHOD } from '../constants';
|
|
3
|
+
class ChartDataSQL {
|
|
4
|
+
constructor(_ref) {
|
|
5
|
+
var _chart$config;
|
|
6
|
+
let {
|
|
7
|
+
table,
|
|
8
|
+
chart,
|
|
9
|
+
username,
|
|
10
|
+
userId,
|
|
11
|
+
userDepartmentIdsMap
|
|
12
|
+
} = _ref;
|
|
13
|
+
this._get_column_by_key = key => {
|
|
14
|
+
return this.columnKeyMap[key];
|
|
15
|
+
};
|
|
16
|
+
this._update_filter_sql = (includeEmpty, column) => {
|
|
17
|
+
const columnName = (column === null || column === void 0 ? void 0 : column.name) || '';
|
|
18
|
+
if (!includeEmpty) {
|
|
19
|
+
const notIncludeEmptySQL = "`".concat(columnName, "` IS NOT NULL");
|
|
20
|
+
if (this.filter_sql) {
|
|
21
|
+
this.filter_sql = "WHERE ".concat(notIncludeEmptySQL, " AND ").concat(this.filter_sql);
|
|
22
|
+
} else {
|
|
23
|
+
this.filter_sql = "WHERE ".concat(notIncludeEmptySQL);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
this._statistic_column_name_to_sql = (column, groupBy) => {
|
|
28
|
+
const columnName = (column === null || column === void 0 ? void 0 : column.name) || '';
|
|
29
|
+
const validColumnName = "`".concat(columnName, "`");
|
|
30
|
+
const type = (column === null || column === void 0 ? void 0 : column.type) || '';
|
|
31
|
+
if (type === CellType.CTIME || type === CellType.MTIME || type === CellType.DATE) {
|
|
32
|
+
const dateGranularity = (groupBy['date_granularity'] || '').toUpperCase();
|
|
33
|
+
if (dateGranularity === 'DAY') {
|
|
34
|
+
return "ISODATE(".concat(validColumnName, ")");
|
|
35
|
+
}
|
|
36
|
+
if (dateGranularity === 'WEEK') {
|
|
37
|
+
return "ISODATE(STARTOFWEEK(".concat(validColumnName, ", \"monday\"))");
|
|
38
|
+
}
|
|
39
|
+
if (dateGranularity === 'MONTH') {
|
|
40
|
+
return "ISOMONTH(".concat(validColumnName, ")");
|
|
41
|
+
}
|
|
42
|
+
if (dateGranularity === 'QUARTER') {
|
|
43
|
+
return "CONCATENATE(year(".concat(validColumnName, "), \"-Q\", quarter(").concat(validColumnName, "))");
|
|
44
|
+
}
|
|
45
|
+
if (dateGranularity === 'YEAR') {
|
|
46
|
+
return "YEAR(".concat(validColumnName, ")");
|
|
47
|
+
}
|
|
48
|
+
if (dateGranularity === 'MAX') {
|
|
49
|
+
return "MAX(".concat(validColumnName, ")");
|
|
50
|
+
}
|
|
51
|
+
if (dateGranularity === 'MIN') {
|
|
52
|
+
return "MIN(".concat(validColumnName, ")");
|
|
53
|
+
}
|
|
54
|
+
return "ISOMONTH(".concat(validColumnName, ")");
|
|
55
|
+
}
|
|
56
|
+
if (type === CellType.GEOLOCATION) {
|
|
57
|
+
const geolocationGranularity = (groupBy['geolocation_granularity'] || '').toUpperCase();
|
|
58
|
+
if (geolocationGranularity === 'PROVINCE') {
|
|
59
|
+
return "PROVINCE(".concat(validColumnName, ")");
|
|
60
|
+
}
|
|
61
|
+
if (geolocationGranularity === 'CITY') {
|
|
62
|
+
return "CITY(".concat(validColumnName, ")");
|
|
63
|
+
}
|
|
64
|
+
if (geolocationGranularity === 'DISTRICT') {
|
|
65
|
+
return "DISTRICT(".concat(validColumnName, ")");
|
|
66
|
+
}
|
|
67
|
+
return validColumnName;
|
|
68
|
+
}
|
|
69
|
+
return validColumnName;
|
|
70
|
+
};
|
|
71
|
+
this._summary_column_2_sql = (summary_method, column) => {
|
|
72
|
+
const columnName = (column === null || column === void 0 ? void 0 : column.name) || '';
|
|
73
|
+
const validColumnName = "`".concat(columnName, "`");
|
|
74
|
+
if (summary_method === 'DISTINCT_VALUES') return "COUNT(DISTINCT ".concat(validColumnName, ")");
|
|
75
|
+
if (summary_method === 'ROW_COUNT') return "COUNT(".concat(validColumnName, ")");
|
|
76
|
+
return "".concat(DTABLE_DB_SUMMARY_METHOD[summary_method], "(").concat(validColumnName, ")");
|
|
77
|
+
};
|
|
78
|
+
this._basic_statistic_2_sql = () => {
|
|
79
|
+
let x_axis_column_key, x_axis_date_granularity, x_axis_geolocation_granularity, x_axis_include_empty_cells, y_axis_summary_type, y_axis_summary_method, y_axis_summary_column_key;
|
|
80
|
+
if ([CHART_TYPE.HORIZONTAL_BAR, CHART_TYPE.HORIZONTAL_GROUP_BAR].includes(this.chart_type)) {
|
|
81
|
+
x_axis_column_key = this.chart['vertical_axis_column_key'] || '';
|
|
82
|
+
x_axis_date_granularity = this.chart['vertical_axis_date_granularity'] || '';
|
|
83
|
+
x_axis_geolocation_granularity = this.chart['vertical_axis_geolocation_granularity'] || '';
|
|
84
|
+
x_axis_include_empty_cells = this.chart['vertical_axis_include_empty'] || false;
|
|
85
|
+
y_axis_summary_type = this.chart['horizontal_axis_summary_type'] || '';
|
|
86
|
+
y_axis_summary_method = this.chart['horizontal_axis_summary_method'] || '';
|
|
87
|
+
y_axis_summary_column_key = this.chart['horizontal_axis_column_key'] || '';
|
|
88
|
+
} else {
|
|
89
|
+
x_axis_column_key = this.chart['x_axis_column_key'] || '';
|
|
90
|
+
x_axis_date_granularity = this.chart['x_axis_date_granularity'] || '';
|
|
91
|
+
x_axis_geolocation_granularity = this.chart['x_axis_geolocation_granularity'] || '';
|
|
92
|
+
x_axis_include_empty_cells = this.chart['x_axis_include_empty_cells'] || false;
|
|
93
|
+
y_axis_summary_type = this.chart['y_axis_summary_type'] || '';
|
|
94
|
+
y_axis_summary_method = this.chart['y_axis_summary_method'] || '';
|
|
95
|
+
y_axis_summary_column_key = this.chart['y_axis_summary_column_key'] || '';
|
|
96
|
+
}
|
|
97
|
+
const groupby_column = this.columnKeyMap[x_axis_column_key];
|
|
98
|
+
if (!groupby_column) {
|
|
99
|
+
this.error = 'Group by column not found';
|
|
100
|
+
return '';
|
|
101
|
+
}
|
|
102
|
+
this._update_filter_sql(x_axis_include_empty_cells, groupby_column);
|
|
103
|
+
const groupby_column_name = this._statistic_column_name_to_sql(groupby_column, {
|
|
104
|
+
'date_granularity': x_axis_date_granularity,
|
|
105
|
+
'geolocation_granularity': x_axis_geolocation_granularity
|
|
106
|
+
});
|
|
107
|
+
const summary_type = y_axis_summary_type.toUpperCase();
|
|
108
|
+
let summary_column_name = '';
|
|
109
|
+
let summary_method = '';
|
|
110
|
+
let summary_column = '';
|
|
111
|
+
if (summary_type === 'COUNT') {
|
|
112
|
+
summary_column_name = this._summary_column_2_sql('COUNT', groupby_column);
|
|
113
|
+
} else {
|
|
114
|
+
summary_column = this.columnKeyMap[y_axis_summary_column_key];
|
|
115
|
+
if (summary_column) {
|
|
116
|
+
summary_method = y_axis_summary_method.toUpperCase();
|
|
117
|
+
summary_column_name = this._summary_column_2_sql(summary_method, summary_column);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (summary_column_name) {
|
|
121
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
122
|
+
}
|
|
123
|
+
return "SELECT ".concat(groupby_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
124
|
+
};
|
|
125
|
+
this._grouping_statistic_2_sql = () => {
|
|
126
|
+
let x_axis_column_key, x_axis_date_granularity, x_axis_geolocation_granularity, x_axis_include_empty_cells, y_axis_summary_type, y_axis_summary_method, y_axis_summary_column_key;
|
|
127
|
+
if (this.chart_type === CHART_TYPE.HORIZONTAL_GROUP_BAR) {
|
|
128
|
+
x_axis_column_key = this.chart['vertical_axis_column_key'] || '';
|
|
129
|
+
x_axis_date_granularity = this.chart['vertical_axis_date_granularity'] || '';
|
|
130
|
+
x_axis_geolocation_granularity = this.chart['vertical_axis_geolocation_granularity'] || '';
|
|
131
|
+
x_axis_include_empty_cells = this.chart['vertical_axis_include_empty'] || false;
|
|
132
|
+
y_axis_summary_type = this.chart['horizontal_axis_summary_type'] || '';
|
|
133
|
+
y_axis_summary_method = this.chart['horizontal_axis_summary_method'] || '';
|
|
134
|
+
y_axis_summary_column_key = this.chart['horizontal_axis_column_key'] || '';
|
|
135
|
+
} else {
|
|
136
|
+
x_axis_column_key = this.chart['x_axis_column_key'] || '';
|
|
137
|
+
x_axis_date_granularity = this.chart['x_axis_date_granularity'] || '';
|
|
138
|
+
x_axis_geolocation_granularity = this.chart['x_axis_geolocation_granularity'] || '';
|
|
139
|
+
x_axis_include_empty_cells = this.chart['x_axis_include_empty_cells'] || '';
|
|
140
|
+
y_axis_summary_type = this.chart['y_axis_summary_type'] || '';
|
|
141
|
+
y_axis_summary_method = this.chart['y_axis_summary_method'] || '';
|
|
142
|
+
y_axis_summary_column_key = this.chart['y_axis_summary_column_key'] || '';
|
|
143
|
+
}
|
|
144
|
+
const column_groupby_column_key = this.chart['column_groupby_column_key'] || '';
|
|
145
|
+
const column_groupby_date_granularity = this.chart['column_groupby_date_granularity'] || '';
|
|
146
|
+
const column_groupby_geolocation_granularity = this.chart['column_groupby_geolocation_granularity'] || '';
|
|
147
|
+
const column_groupby_multiple_numeric_column = this.chart['column_groupby_multiple_numeric_column'] || false;
|
|
148
|
+
const summary_columns = this.chart['summary_columns'] || [];
|
|
149
|
+
const groupby_column = this.columnKeyMap[x_axis_column_key];
|
|
150
|
+
if (!groupby_column) {
|
|
151
|
+
this.error = 'Group by column not found';
|
|
152
|
+
return '';
|
|
153
|
+
}
|
|
154
|
+
this._update_filter_sql(x_axis_include_empty_cells, groupby_column);
|
|
155
|
+
const groupby_column_name = this._statistic_column_name_to_sql(groupby_column, {
|
|
156
|
+
'date_granularity': x_axis_date_granularity,
|
|
157
|
+
'geolocation_granularity': x_axis_geolocation_granularity
|
|
158
|
+
});
|
|
159
|
+
const summary_type = y_axis_summary_type.toUpperCase();
|
|
160
|
+
if (summary_type === 'COUNT') {
|
|
161
|
+
const column_groupby_column = this.columnKeyMap[column_groupby_column_key];
|
|
162
|
+
if (!column_groupby_column) return this._basic_statistic_2_sql();
|
|
163
|
+
const column_groupby_column_name = this._statistic_column_name_to_sql(column_groupby_column, {
|
|
164
|
+
'date_granularity': column_groupby_date_granularity,
|
|
165
|
+
'geolocation_granularity': column_groupby_geolocation_granularity
|
|
166
|
+
});
|
|
167
|
+
const summary_column_name = this._summary_column_2_sql('COUNT', groupby_column);
|
|
168
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(column_groupby_column_name, ", ").concat(summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, ", ").concat(column_groupby_column_name, " LIMIT 0, 5000");
|
|
169
|
+
}
|
|
170
|
+
if (column_groupby_multiple_numeric_column) {
|
|
171
|
+
let column_groupby_numeric_columns = summary_columns;
|
|
172
|
+
column_groupby_numeric_columns.insert(0, {
|
|
173
|
+
'column_key': y_axis_summary_column_key,
|
|
174
|
+
'summary_method': y_axis_summary_method
|
|
175
|
+
});
|
|
176
|
+
let column_groupby_numeric_column_names = [];
|
|
177
|
+
for (let i = 0; i < column_groupby_numeric_columns.length; i++) {
|
|
178
|
+
var _summary_column_obj$s;
|
|
179
|
+
const summary_column_obj = column_groupby_numeric_columns[i];
|
|
180
|
+
const summary_column_key = summary_column_obj['column_key'];
|
|
181
|
+
const summary_method = (_summary_column_obj$s = summary_column_obj['summary_method']) === null || _summary_column_obj$s === void 0 ? void 0 : _summary_column_obj$s.toUpperCase();
|
|
182
|
+
if (!summary_column_key) continue;
|
|
183
|
+
const summary_column = this._get_column_by_key(summary_column_key);
|
|
184
|
+
if (!summary_column) continue;
|
|
185
|
+
const summary_column_name = this._summary_column_2_sql(summary_method, summary_column);
|
|
186
|
+
column_groupby_numeric_column_names.push(summary_column_name);
|
|
187
|
+
}
|
|
188
|
+
const column_groupby_numeric_column_names_string = column_groupby_numeric_column_names.join(', ');
|
|
189
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(column_groupby_numeric_column_names_string, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
190
|
+
}
|
|
191
|
+
const summary_column = this._get_column_by_key(y_axis_summary_column_key);
|
|
192
|
+
if (!summary_column) return this._basic_statistic_2_sql();
|
|
193
|
+
const summary_method = y_axis_summary_method.toUpperCase();
|
|
194
|
+
const column_groupby_column = this._get_column_by_key(column_groupby_column_key);
|
|
195
|
+
const summary_column_name = this._summary_column_2_sql(summary_method, summary_column);
|
|
196
|
+
if (!column_groupby_column) {
|
|
197
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
198
|
+
}
|
|
199
|
+
const column_groupby_column_name = this._statistic_column_name_to_sql(column_groupby_column, {
|
|
200
|
+
'date_granularity': column_groupby_date_granularity,
|
|
201
|
+
'geolocation_granularity': column_groupby_geolocation_granularity
|
|
202
|
+
});
|
|
203
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(column_groupby_column_name, ", ").concat(summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, ", ").concat(column_groupby_column_name, " LIMIT 0, 5000");
|
|
204
|
+
};
|
|
205
|
+
this._combination_chart_statistic_2_sql = () => {
|
|
206
|
+
const x_axis_column_key = this.chart['x_axis_column_key'] || '';
|
|
207
|
+
const x_axis_date_granularity = this.chart['x_axis_date_granularity'] || '';
|
|
208
|
+
const x_axis_geolocation_granularity = this.chart['x_axis_geolocation_granularity'] || '';
|
|
209
|
+
const x_axis_include_empty_cells = this.chart['x_axis_include_empty_cells'] || false;
|
|
210
|
+
const y_axis_left_summary_type = this.chart['y_axis_left_summary_type'] || '';
|
|
211
|
+
const y_axis_left_summary_method = this.chart['y_axis_left_summary_method'] || '';
|
|
212
|
+
const y_axis_left_summary_column = this.chart['y_axis_left_summary_column'] || '';
|
|
213
|
+
const y_axis_left_group_by_multiple_numeric_column = this.chart['y_axis_left_group_by_multiple_numeric_column'] || false;
|
|
214
|
+
const y_axis_left_group_by_numeric_columns = this.chart['y_axis_left_group_by_numeric_columns'] || [];
|
|
215
|
+
const y_axis_right_summary_type = this.chart['y_axis_right_summary_type'] || '';
|
|
216
|
+
const y_axis_right_summary_method = this.chart['y_axis_right_summary_method'] || '';
|
|
217
|
+
const y_axis_right_summary_column = this.chart['y_axis_right_summary_column'] || '';
|
|
218
|
+
const groupby_column = this._get_column_by_key(x_axis_column_key);
|
|
219
|
+
if (!groupby_column) {
|
|
220
|
+
this.error = 'Group by column not found';
|
|
221
|
+
return '';
|
|
222
|
+
}
|
|
223
|
+
this._update_filter_sql(x_axis_include_empty_cells, groupby_column);
|
|
224
|
+
const groupby_column_name = this._statistic_column_name_to_sql(groupby_column, {
|
|
225
|
+
'date_granularity': x_axis_date_granularity,
|
|
226
|
+
'geolocation_granularity': x_axis_geolocation_granularity
|
|
227
|
+
});
|
|
228
|
+
const left_summary_type = y_axis_left_summary_type.toUpperCase();
|
|
229
|
+
const right_summary_type = y_axis_right_summary_type.toUpperCase();
|
|
230
|
+
if (left_summary_type === 'COUNT') {
|
|
231
|
+
let summary_column_name = '';
|
|
232
|
+
if (right_summary_type === 'COUNT') {
|
|
233
|
+
summary_column_name = this._summary_column_2_sql('COUNT', groupby_column);
|
|
234
|
+
} else {
|
|
235
|
+
const right_summary_column = this._get_column_by_key(y_axis_right_summary_column);
|
|
236
|
+
if (right_summary_column) {
|
|
237
|
+
const right_summary_method = y_axis_right_summary_method.toUpperCase();
|
|
238
|
+
summary_column_name = this._summary_column_2_sql(right_summary_method, right_summary_column);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (summary_column_name) {
|
|
242
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
243
|
+
}
|
|
244
|
+
return "SELECT ".concat(groupby_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
245
|
+
}
|
|
246
|
+
if (y_axis_left_group_by_multiple_numeric_column) {
|
|
247
|
+
let column_groupby_numeric_columns = y_axis_left_group_by_numeric_columns;
|
|
248
|
+
column_groupby_numeric_columns.insert(0, {
|
|
249
|
+
'column_key': y_axis_left_summary_column,
|
|
250
|
+
'summary_method': y_axis_left_summary_method
|
|
251
|
+
});
|
|
252
|
+
let column_groupby_numeric_column_names = [];
|
|
253
|
+
for (let i = 0; i < column_groupby_numeric_columns.length; i++) {
|
|
254
|
+
var _summary_column_obj$s2;
|
|
255
|
+
const summary_column_obj = column_groupby_numeric_columns[i];
|
|
256
|
+
const summary_column_key = summary_column_obj['column_key'] || '';
|
|
257
|
+
const summary_method = (_summary_column_obj$s2 = summary_column_obj['summary_method']) === null || _summary_column_obj$s2 === void 0 ? void 0 : _summary_column_obj$s2.toUpperCase();
|
|
258
|
+
if (!summary_column_key) continue;
|
|
259
|
+
const summary_column = this._get_column_by_key(summary_column_key);
|
|
260
|
+
if (!summary_column) continue;
|
|
261
|
+
const summary_column_name = this._summary_column_2_sql(summary_method, summary_column);
|
|
262
|
+
if (!column_groupby_numeric_column_names.includes(summary_column_name)) {
|
|
263
|
+
column_groupby_numeric_column_names.push(summary_column_name);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
let right_summary_column_name = '';
|
|
267
|
+
if (right_summary_type === 'COUNT') {
|
|
268
|
+
right_summary_column_name = this._summary_column_2_sql('COUNT', groupby_column);
|
|
269
|
+
} else {
|
|
270
|
+
const right_summary_column = this._get_column_by_key(y_axis_right_summary_column);
|
|
271
|
+
if (right_summary_column) {
|
|
272
|
+
const right_summary_method = y_axis_right_summary_method.toUpperCase();
|
|
273
|
+
right_summary_column_name = this._summary_column_2_sql(right_summary_method, right_summary_column);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
if (right_summary_column_name) {
|
|
277
|
+
if (!column_groupby_numeric_column_names.includes(right_summary_column_name)) {
|
|
278
|
+
column_groupby_numeric_column_names.push(right_summary_column_name);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
const column_groupby_numeric_column_names_string = column_groupby_numeric_column_names.join(', ');
|
|
282
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(column_groupby_numeric_column_names_string, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
283
|
+
}
|
|
284
|
+
const summary_column = this._get_column_by_key(y_axis_left_summary_column);
|
|
285
|
+
const summary_method = y_axis_left_summary_method.toUpperCase();
|
|
286
|
+
const left_summary_column_name = this._summary_column_2_sql(summary_method, summary_column);
|
|
287
|
+
let right_summary_column_name;
|
|
288
|
+
if (right_summary_type === 'COUNT') {
|
|
289
|
+
right_summary_column_name = this._summary_column_2_sql('COUNT', groupby_column);
|
|
290
|
+
} else {
|
|
291
|
+
const right_summary_column = this._get_column_by_key(y_axis_right_summary_column);
|
|
292
|
+
if (right_summary_column) {
|
|
293
|
+
const right_summary_method = y_axis_right_summary_method.toUpperCase();
|
|
294
|
+
right_summary_column_name = this._summary_column_2_sql(right_summary_method, right_summary_column);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (right_summary_column_name) {
|
|
298
|
+
if (left_summary_column_name === right_summary_column_name) {
|
|
299
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(left_summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
300
|
+
}
|
|
301
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(right_summary_column_name, ", ").concat(left_summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
302
|
+
}
|
|
303
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(left_summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
304
|
+
};
|
|
305
|
+
this._one_dimension_statistic_table_2_sql = () => {
|
|
306
|
+
const groupby_column_key = this.chart['groupby_column_key'] || '';
|
|
307
|
+
let summary_type = this.chart['summary_type'] || '';
|
|
308
|
+
const summary_column_key = this.chart['summary_column_key'] || '';
|
|
309
|
+
const groupby_date_granularity = this.chart['groupby_date_granularity'] || '';
|
|
310
|
+
const groupby_geolocation_granularity = this.chart['groupby_geolocation_granularity'] || '';
|
|
311
|
+
const groupby_include_empty_cells = this.chart['groupby_include_empty_cells'] || false;
|
|
312
|
+
let summary_method = this.chart['summary_method'] || '';
|
|
313
|
+
const summary_columns = this.chart['summary_columns'] || [];
|
|
314
|
+
if (!summary_method) {
|
|
315
|
+
this.error = 'Summary method is not valid';
|
|
316
|
+
return '';
|
|
317
|
+
}
|
|
318
|
+
const groupby_column = this._get_column_by_key(groupby_column_key);
|
|
319
|
+
if (!groupby_column) {
|
|
320
|
+
this.error = 'Group by column not found';
|
|
321
|
+
return '';
|
|
322
|
+
}
|
|
323
|
+
this._update_filter_sql(groupby_include_empty_cells, groupby_column);
|
|
324
|
+
const groupby_column_name = this._statistic_column_name_to_sql(groupby_column, {
|
|
325
|
+
'date_granularity': groupby_date_granularity,
|
|
326
|
+
'geolocation_granularity': groupby_geolocation_granularity
|
|
327
|
+
});
|
|
328
|
+
summary_type = summary_type.toUpperCase();
|
|
329
|
+
if (summary_type === 'COUNT') {
|
|
330
|
+
const summary_column_name = this._summary_column_2_sql('COUNT', groupby_column);
|
|
331
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
332
|
+
}
|
|
333
|
+
if (summary_columns) {
|
|
334
|
+
const summary_column = this._get_column_by_key(summary_column_key);
|
|
335
|
+
summary_method = summary_method.toUpperCase();
|
|
336
|
+
let summary_column_names = [];
|
|
337
|
+
if (summary_column && (isNumericColumn(summary_column) || isDateColumn(summary_column))) {
|
|
338
|
+
const summary_column_name = this._summary_column_2_sql(summary_method, summary_column);
|
|
339
|
+
summary_column_names.push(summary_column_name);
|
|
340
|
+
}
|
|
341
|
+
summary_columns.forEach(column_option => {
|
|
342
|
+
const {
|
|
343
|
+
column_key,
|
|
344
|
+
summary_method
|
|
345
|
+
} = column_option;
|
|
346
|
+
const method = summary_method === null || summary_method === void 0 ? void 0 : summary_method.toUpperCase();
|
|
347
|
+
const column = this._get_column_by_key(column_key);
|
|
348
|
+
if (column && (isNumericColumn(column) || isDateColumn(column))) {
|
|
349
|
+
const column_name = this._summary_column_2_sql(method, column);
|
|
350
|
+
summary_column_names.push(column_name);
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
let summary_column_names_str = summary_column_names.join(', ');
|
|
354
|
+
if (summary_column_names_str) {
|
|
355
|
+
summary_column_names_str = ", ".concat(summary_column_names_str);
|
|
356
|
+
}
|
|
357
|
+
return "SELECT ".concat(groupby_column_name).concat(summary_column_names_str, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
358
|
+
}
|
|
359
|
+
summary_method = summary_method.toUpperCase();
|
|
360
|
+
let new_numeric_column_keys = [summary_column_key];
|
|
361
|
+
let numeric_column_names = [];
|
|
362
|
+
new_numeric_column_keys.forEach(column_key => {
|
|
363
|
+
const column = this._get_column_by_key(column_key);
|
|
364
|
+
if (column && (isNumericColumn(column) || isDateColumn(column))) {
|
|
365
|
+
const column_name = this._summary_column_2_sql(summary_method, column);
|
|
366
|
+
numeric_column_names.append(column_name);
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
if (numeric_column_names.length > 0) {
|
|
370
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(numeric_column_names.join(', '), " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
371
|
+
}
|
|
372
|
+
return "SELECT ".concat(groupby_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
373
|
+
};
|
|
374
|
+
this._two_dimension_statistic_table_2_sql = () => {
|
|
375
|
+
const groupby_column_key = this.chart['groupby_column_key'] || '';
|
|
376
|
+
const column_groupby_column_key = this.chart['column_groupby_column_key'] || '';
|
|
377
|
+
let summary_type = this.chart['summary_type'] || '';
|
|
378
|
+
const summary_column_key = this.chart['summary_column_key'] || '';
|
|
379
|
+
const groupby_date_granularity = this.chart['groupby_date_granularity'] || '';
|
|
380
|
+
const groupby_geolocation_granularity = this.chart['groupby_geolocation_granularity'] || '';
|
|
381
|
+
const groupby_include_empty_cells = this.chart['groupby_include_empty_cells'] || false;
|
|
382
|
+
const column_groupby_date_granularity = this.chart['column_groupby_date_granularity'] || '';
|
|
383
|
+
const column_groupby_geolocation_granularity = this.chart['column_groupby_geolocation_granularity'] || '';
|
|
384
|
+
let summary_method = this.chart['summary_method'] || '';
|
|
385
|
+
const column_groupby_column = this._get_column_by_key(column_groupby_column_key);
|
|
386
|
+
if (!column_groupby_column) {
|
|
387
|
+
return this._one_dimension_statistic_table_2_sql();
|
|
388
|
+
}
|
|
389
|
+
const groupby_column = this._get_column_by_key(groupby_column_key);
|
|
390
|
+
if (!groupby_column) {
|
|
391
|
+
this.error = 'Group by column not found';
|
|
392
|
+
return '';
|
|
393
|
+
}
|
|
394
|
+
this._update_filter_sql(groupby_include_empty_cells, groupby_column);
|
|
395
|
+
const groupby_column_name = this._statistic_column_name_to_sql(groupby_column, {
|
|
396
|
+
'date_granularity': groupby_date_granularity,
|
|
397
|
+
'geolocation_granularity': groupby_geolocation_granularity
|
|
398
|
+
});
|
|
399
|
+
const column_groupby_column_name = this._statistic_column_name_to_sql(column_groupby_column, {
|
|
400
|
+
'date_granularity': column_groupby_date_granularity,
|
|
401
|
+
'geolocation_granularity': column_groupby_geolocation_granularity
|
|
402
|
+
});
|
|
403
|
+
summary_type = summary_type.toUpperCase();
|
|
404
|
+
let summary_column_name = '';
|
|
405
|
+
if (summary_type === 'COUNT') {
|
|
406
|
+
summary_column_name = this._summary_column_2_sql('COUNT', groupby_column);
|
|
407
|
+
} else {
|
|
408
|
+
const summary_column = this._get_column_by_key(summary_column_key);
|
|
409
|
+
if (!summary_column) {
|
|
410
|
+
summary_column_name = this._summary_column_2_sql('COUNT', groupby_column);
|
|
411
|
+
} else {
|
|
412
|
+
if (!summary_method) {
|
|
413
|
+
this.error = 'Summary method is not valid';
|
|
414
|
+
return '';
|
|
415
|
+
}
|
|
416
|
+
summary_method = summary_method.toUpperCase();
|
|
417
|
+
summary_column_name = this._summary_column_2_sql(summary_method, summary_column);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(column_groupby_column_name, ", ").concat(summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, ", ").concat(column_groupby_column_name, " LIMIT 0, 5000");
|
|
421
|
+
};
|
|
422
|
+
this._pie_chart_statistic_2_sql = () => {
|
|
423
|
+
const groupby_column_key = this.chart['groupby_column_key'] || '';
|
|
424
|
+
let summary_type = this.chart['summary_type'] || '';
|
|
425
|
+
let summary_method = this.chart['summary_method'] || '';
|
|
426
|
+
const summary_column_key = this.chart['summary_column_key'] || '';
|
|
427
|
+
const groupby_date_granularity = this.chart['groupby_date_granularity'] || '';
|
|
428
|
+
const groupby_geolocation_granularity = this.chart['groupby_geolocation_granularity'] || '';
|
|
429
|
+
const groupby_include_empty_cells = this.chart['groupby_include_empty_cells'] || false;
|
|
430
|
+
const groupby_column = this._get_column_by_key(groupby_column_key);
|
|
431
|
+
if (!groupby_column) {
|
|
432
|
+
this.error = 'Group by column not found';
|
|
433
|
+
return '';
|
|
434
|
+
}
|
|
435
|
+
this._update_filter_sql(groupby_include_empty_cells, groupby_column);
|
|
436
|
+
const groupby_column_name = this._statistic_column_name_to_sql(groupby_column, {
|
|
437
|
+
'date_granularity': groupby_date_granularity,
|
|
438
|
+
'geolocation_granularity': groupby_geolocation_granularity
|
|
439
|
+
});
|
|
440
|
+
summary_type = summary_type.toUpperCase();
|
|
441
|
+
let summary_column_name = '';
|
|
442
|
+
if (summary_type === 'COUNT') {
|
|
443
|
+
summary_column_name = this._summary_column_2_sql('COUNT', groupby_column);
|
|
444
|
+
} else {
|
|
445
|
+
if (!summary_method) {
|
|
446
|
+
this.error = 'Summary method is not valid';
|
|
447
|
+
return '';
|
|
448
|
+
}
|
|
449
|
+
const summary_column = this._get_column_by_key(summary_column_key);
|
|
450
|
+
if (summary_column) {
|
|
451
|
+
summary_method = summary_method.toUpperCase();
|
|
452
|
+
summary_column_name = this._summary_column_2_sql(summary_method, summary_column);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
if (summary_column_name) {
|
|
456
|
+
return "SELECT ".concat(groupby_column_name, ", ").concat(summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
457
|
+
}
|
|
458
|
+
return "SELECT ".concat(groupby_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " GROUP BY ").concat(groupby_column_name, " LIMIT 0, 5000");
|
|
459
|
+
};
|
|
460
|
+
this._basic_number_card_chart_statistic_2_sql = () => {
|
|
461
|
+
const numeric_column_key = this.chart['numeric_column_key'] || '';
|
|
462
|
+
let summary_method = this.chart['summary_method'] || '';
|
|
463
|
+
const numeric_column = this._get_column_by_key(numeric_column_key);
|
|
464
|
+
if (!numeric_column) {
|
|
465
|
+
this.error = 'Numeric column not found';
|
|
466
|
+
return '';
|
|
467
|
+
}
|
|
468
|
+
if (!summary_method) {
|
|
469
|
+
this.error = 'Summary method is not valid';
|
|
470
|
+
return '';
|
|
471
|
+
}
|
|
472
|
+
this._update_filter_sql(true, numeric_column);
|
|
473
|
+
summary_method = summary_method.toUpperCase();
|
|
474
|
+
const summary_column_name = this._summary_column_2_sql(summary_method, numeric_column);
|
|
475
|
+
return "SELECT ".concat(summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " LIMIT 0, 5000");
|
|
476
|
+
};
|
|
477
|
+
this._dashboard_chart_statistic_2_sql = () => {
|
|
478
|
+
const target_column_key = this.chart['target_value_column_key'] || '';
|
|
479
|
+
let target_summary_method = this.chart['target_value_column_summary_method'] || '';
|
|
480
|
+
const target_column = this._get_column_by_key(target_column_key);
|
|
481
|
+
if (!target_column) {
|
|
482
|
+
this.error = 'Target column not found';
|
|
483
|
+
return '';
|
|
484
|
+
}
|
|
485
|
+
if (!target_summary_method) {
|
|
486
|
+
this.error = 'Target summary method is not valid';
|
|
487
|
+
return '';
|
|
488
|
+
}
|
|
489
|
+
target_summary_method = target_summary_method.toUpperCase();
|
|
490
|
+
const target_summary_column_name = this._summary_column_2_sql(target_summary_method, target_column);
|
|
491
|
+
const total_column_key = this.chart['total_value_column_key'] || '';
|
|
492
|
+
let total_summary_method = this.chart['total_value_column_summary_method'] || '';
|
|
493
|
+
const total_column = this._get_column_by_key(total_column_key);
|
|
494
|
+
if (!total_column) {
|
|
495
|
+
this.error = 'Total column not found';
|
|
496
|
+
return '';
|
|
497
|
+
}
|
|
498
|
+
if (!total_summary_method) {
|
|
499
|
+
this.error = 'Total summary method is not valid';
|
|
500
|
+
return '';
|
|
501
|
+
}
|
|
502
|
+
this._update_filter_sql(true, target_column);
|
|
503
|
+
total_summary_method = total_summary_method.toUpperCase();
|
|
504
|
+
const total_summary_column_name = this._summary_column_2_sql(total_summary_method, total_column);
|
|
505
|
+
return "SELECT ".concat(target_summary_column_name, ", ").concat(total_summary_column_name, " FROM ").concat(this.table_name, " ").concat(this.filter_sql, " LIMIT 0, 5000");
|
|
506
|
+
};
|
|
507
|
+
this.to_sql = () => {
|
|
508
|
+
if (this.error) {
|
|
509
|
+
return {
|
|
510
|
+
sql: '',
|
|
511
|
+
error: this.error
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
if ([CHART_TYPE.BAR, CHART_TYPE.LINE, CHART_TYPE.HORIZONTAL_BAR, CHART_TYPE.AREA].includes(this.chart_type)) {
|
|
515
|
+
const sql = this._basic_statistic_2_sql();
|
|
516
|
+
return {
|
|
517
|
+
sql,
|
|
518
|
+
error: this.error
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
if ([CHART_TYPE.BAR_GROUP, CHART_TYPE.LINE_GROUP, CHART_TYPE.HORIZONTAL_GROUP_BAR].includes(this.chart_type)) {
|
|
522
|
+
const column_groupby_column_key = this.chart['column_groupby_column_key'] || '';
|
|
523
|
+
const column_groupby_multiple_numeric_column = this.chart['column_groupby_multiple_numeric_column'] || false;
|
|
524
|
+
if (!(column_groupby_column_key || column_groupby_multiple_numeric_column)) {
|
|
525
|
+
const sql = this._basic_statistic_2_sql();
|
|
526
|
+
return {
|
|
527
|
+
sql,
|
|
528
|
+
error: this.error
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
const sql = this._grouping_statistic_2_sql();
|
|
532
|
+
return {
|
|
533
|
+
sql,
|
|
534
|
+
error: this.error
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
if (this.chart_type === CHART_TYPE.COMBINATION) {
|
|
538
|
+
const sql = this._combination_chart_statistic_2_sql();
|
|
539
|
+
return {
|
|
540
|
+
sql,
|
|
541
|
+
error: this.error
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
if ([CHART_TYPE.PIE, CHART_TYPE.RING, CHART_TYPE.TREE_MAP].includes(this.chart_type)) {
|
|
545
|
+
const sql = this._pie_chart_statistic_2_sql();
|
|
546
|
+
return {
|
|
547
|
+
sql,
|
|
548
|
+
error: this.error
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
if (this.chart_type === CHART_TYPE.BASIC_NUMBER_CARD) {
|
|
552
|
+
const sql = this._basic_number_card_chart_statistic_2_sql();
|
|
553
|
+
return {
|
|
554
|
+
sql,
|
|
555
|
+
error: this.error
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
if (this.chart_type === CHART_TYPE.DASHBOARD) {
|
|
559
|
+
const sql = this._dashboard_chart_statistic_2_sql();
|
|
560
|
+
return {
|
|
561
|
+
sql,
|
|
562
|
+
error: this.error
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
if (this.chart_type === CHART_TYPE.TABLE) {
|
|
566
|
+
const column_groupby_column_key = this.chart['column_groupby_column_key'] || '';
|
|
567
|
+
const groupby_column_key = this.chart['groupby_column_key'] || '';
|
|
568
|
+
if (!groupby_column_key) {
|
|
569
|
+
return {
|
|
570
|
+
sql: '',
|
|
571
|
+
error: 'Groupby column not set'
|
|
572
|
+
};
|
|
573
|
+
}
|
|
574
|
+
if (!column_groupby_column_key) {
|
|
575
|
+
const sql = this._one_dimension_statistic_table_2_sql();
|
|
576
|
+
return {
|
|
577
|
+
sql,
|
|
578
|
+
error: this.error
|
|
579
|
+
};
|
|
580
|
+
}
|
|
581
|
+
const sql = this._two_dimension_statistic_table_2_sql();
|
|
582
|
+
return {
|
|
583
|
+
sql,
|
|
584
|
+
error: this.error
|
|
585
|
+
};
|
|
586
|
+
}
|
|
587
|
+
return {};
|
|
588
|
+
};
|
|
589
|
+
this.error = '';
|
|
590
|
+
this.table = table;
|
|
591
|
+
this.chart = (chart === null || chart === void 0 ? void 0 : chart.config) || {};
|
|
592
|
+
this.username = username;
|
|
593
|
+
this.userId = userId;
|
|
594
|
+
const tableName = (table === null || table === void 0 ? void 0 : table.name) || '';
|
|
595
|
+
this.table_name = "`".concat(tableName, "`");
|
|
596
|
+
this.chart_type = (chart === null || chart === void 0 ? void 0 : (_chart$config = chart.config) === null || _chart$config === void 0 ? void 0 : _chart$config.type) || '';
|
|
597
|
+
|
|
598
|
+
// columns
|
|
599
|
+
this.columnKeyMap = {};
|
|
600
|
+
Array.isArray(table.columns) && table.columns.forEach(column => {
|
|
601
|
+
this.columnKeyMap[column.key] = column;
|
|
602
|
+
});
|
|
603
|
+
this.filter_sql = filter2SqlCondition(table, chart, username, userId, userDepartmentIdsMap);
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
export default ChartDataSQL;
|