@quillsql/react 2.13.40 → 2.13.42
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/cjs/Chart.d.ts +5 -1
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +51 -28
- package/dist/cjs/ChartBuilder.d.ts +30 -3
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +483 -182
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +11 -1
- package/dist/cjs/Context.d.ts +16 -4
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +95 -46
- package/dist/cjs/Dashboard.d.ts +6 -3
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +69 -28
- package/dist/cjs/QuillProvider.d.ts +4 -8
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.d.ts +2 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +190 -48
- package/dist/cjs/SQLEditor.d.ts +8 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +94 -10
- package/dist/cjs/Table.d.ts +21 -1
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +30 -192
- package/dist/cjs/components/Chart/BarChart.d.ts +5 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +4 -3
- package/dist/cjs/components/Chart/CustomReferenceLine.d.ts +2 -0
- package/dist/cjs/components/Chart/CustomReferenceLine.d.ts.map +1 -0
- package/dist/cjs/components/Chart/CustomReferenceLine.js +26 -0
- package/dist/cjs/components/Chart/GaugeChart.d.ts +11 -0
- package/dist/cjs/components/Chart/GaugeChart.d.ts.map +1 -0
- package/dist/cjs/components/Chart/GaugeChart.js +198 -0
- package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/InternalChart.js +14 -11
- package/dist/cjs/components/Chart/LineChart.d.ts +5 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +4 -3
- package/dist/cjs/components/Chart/MapChart.d.ts +36 -0
- package/dist/cjs/components/Chart/MapChart.d.ts.map +1 -0
- package/dist/cjs/components/Chart/MapChart.js +548 -0
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +114 -42
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +57 -54
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +5 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +5 -4
- package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +12 -11
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.js +2 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.js +13 -13
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +2 -1
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterStack.js +4 -4
- package/dist/cjs/components/ReportBuilder/convert.d.ts +2 -0
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +28 -7
- package/dist/cjs/components/ReportBuilder/util.d.ts +1 -1
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +15 -2
- package/dist/cjs/components/UiComponents.d.ts +5 -2
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +34 -7
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +11 -9
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +18 -4
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +16 -3
- package/dist/cjs/hooks/useReport.d.ts.map +1 -1
- package/dist/cjs/hooks/useReport.js +1 -7
- package/dist/cjs/hooks/useVirtualTables.d.ts +6 -2
- package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
- package/dist/cjs/hooks/useVirtualTables.js +5 -2
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +7 -8
- package/dist/cjs/models/Columns.d.ts +1 -0
- package/dist/cjs/models/Columns.d.ts.map +1 -1
- package/dist/cjs/models/Filter.d.ts +20 -13
- package/dist/cjs/models/Filter.d.ts.map +1 -1
- package/dist/cjs/models/Filter.js +161 -87
- package/dist/cjs/models/Report.d.ts +12 -1
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/models/Schema.d.ts +12 -1
- package/dist/cjs/models/Schema.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +22 -22
- package/dist/cjs/utils/astProcessing.d.ts +2 -2
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +25 -6
- package/dist/cjs/utils/axisFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/axisFormatter.js +25 -0
- package/dist/cjs/utils/color.d.ts +159 -0
- package/dist/cjs/utils/color.d.ts.map +1 -1
- package/dist/cjs/utils/color.js +14 -5
- package/dist/cjs/utils/columnProcessing.js +3 -3
- package/dist/cjs/utils/constants.d.ts +1 -0
- package/dist/cjs/utils/constants.d.ts.map +1 -1
- package/dist/cjs/utils/constants.js +2 -1
- package/dist/cjs/utils/dashboard.d.ts +14 -3
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +79 -16
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +3 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +9 -9
- package/dist/cjs/utils/getDomain.d.ts +4 -1
- package/dist/cjs/utils/getDomain.d.ts.map +1 -1
- package/dist/cjs/utils/getDomain.js +11 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +9 -6
- package/dist/cjs/utils/queryConstructor.d.ts +1 -1
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +83 -49
- package/dist/cjs/utils/report.d.ts +23 -5
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +36 -14
- package/dist/cjs/utils/schema.d.ts +28 -3
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +79 -43
- package/dist/cjs/utils/tableProcessing.d.ts +12 -3
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +36 -8
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +0 -1
- package/dist/cjs/utils/valueFormatter.d.ts +1 -0
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/valueFormatter.js +55 -1
- package/dist/esm/Chart.d.ts +5 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +52 -29
- package/dist/esm/ChartBuilder.d.ts +30 -3
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +487 -187
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +11 -1
- package/dist/esm/Context.d.ts +16 -4
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +97 -48
- package/dist/esm/Dashboard.d.ts +6 -3
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +70 -29
- package/dist/esm/QuillProvider.d.ts +4 -8
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.d.ts +2 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +192 -50
- package/dist/esm/SQLEditor.d.ts +8 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +95 -11
- package/dist/esm/Table.d.ts +21 -1
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +34 -196
- package/dist/esm/components/Chart/BarChart.d.ts +5 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +5 -4
- package/dist/esm/components/Chart/CustomReferenceLine.d.ts +2 -0
- package/dist/esm/components/Chart/CustomReferenceLine.d.ts.map +1 -0
- package/dist/esm/components/Chart/CustomReferenceLine.js +23 -0
- package/dist/esm/components/Chart/GaugeChart.d.ts +11 -0
- package/dist/esm/components/Chart/GaugeChart.d.ts.map +1 -0
- package/dist/esm/components/Chart/GaugeChart.js +195 -0
- package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/InternalChart.js +14 -11
- package/dist/esm/components/Chart/LineChart.d.ts +5 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +5 -4
- package/dist/esm/components/Chart/MapChart.d.ts +36 -0
- package/dist/esm/components/Chart/MapChart.d.ts.map +1 -0
- package/dist/esm/components/Chart/MapChart.js +541 -0
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +114 -42
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +57 -54
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +5 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +5 -4
- package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +12 -11
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.js +2 -1
- package/dist/esm/components/ReportBuilder/FilterModal.js +14 -14
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterStack.js +4 -4
- package/dist/esm/components/ReportBuilder/convert.d.ts +2 -0
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +26 -7
- package/dist/esm/components/ReportBuilder/util.d.ts +1 -1
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +15 -2
- package/dist/esm/components/UiComponents.d.ts +5 -2
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +32 -6
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +11 -9
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +19 -5
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +16 -3
- package/dist/esm/hooks/useReport.d.ts.map +1 -1
- package/dist/esm/hooks/useReport.js +1 -7
- package/dist/esm/hooks/useVirtualTables.d.ts +6 -2
- package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
- package/dist/esm/hooks/useVirtualTables.js +6 -3
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +7 -8
- package/dist/esm/models/Columns.d.ts +1 -0
- package/dist/esm/models/Columns.d.ts.map +1 -1
- package/dist/esm/models/Filter.d.ts +20 -13
- package/dist/esm/models/Filter.d.ts.map +1 -1
- package/dist/esm/models/Filter.js +160 -86
- package/dist/esm/models/Report.d.ts +12 -1
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/models/Schema.d.ts +12 -1
- package/dist/esm/models/Schema.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +23 -23
- package/dist/esm/utils/astProcessing.d.ts +2 -2
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +25 -6
- package/dist/esm/utils/axisFormatter.d.ts.map +1 -1
- package/dist/esm/utils/axisFormatter.js +25 -0
- package/dist/esm/utils/color.d.ts +159 -0
- package/dist/esm/utils/color.d.ts.map +1 -1
- package/dist/esm/utils/color.js +8 -2
- package/dist/esm/utils/columnProcessing.js +3 -3
- package/dist/esm/utils/constants.d.ts +1 -0
- package/dist/esm/utils/constants.d.ts.map +1 -1
- package/dist/esm/utils/constants.js +1 -0
- package/dist/esm/utils/dashboard.d.ts +14 -3
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +80 -17
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +3 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +10 -10
- package/dist/esm/utils/getDomain.d.ts +4 -1
- package/dist/esm/utils/getDomain.d.ts.map +1 -1
- package/dist/esm/utils/getDomain.js +11 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +9 -6
- package/dist/esm/utils/queryConstructor.d.ts +1 -1
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +83 -49
- package/dist/esm/utils/report.d.ts +23 -5
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +38 -16
- package/dist/esm/utils/schema.d.ts +28 -3
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +78 -43
- package/dist/esm/utils/tableProcessing.d.ts +12 -3
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +36 -8
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +0 -1
- package/dist/esm/utils/valueFormatter.d.ts +1 -0
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/utils/valueFormatter.js +53 -0
- package/package.json +10 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { endOfDay, parse, startOfDay, sub } from 'date-fns';
|
|
2
2
|
import { COMPARISON_RANGE, PRIMARY_RANGE, defaultOptionsV2, getRangeFromPresetOptions, } from '../DateRangePicker/dateRangePickerUtils';
|
|
3
|
-
import { DateOperator, FieldType,
|
|
3
|
+
import { DateOperator, FieldType, InternalFilterType, DashboardFilterType, TimeUnit, FilterType, } from '../models/Filter';
|
|
4
4
|
import { filterTreeToAst } from './astFilterProcessing';
|
|
5
5
|
import { snakeAndCamelCaseToTitleCase } from './textProcessing';
|
|
6
6
|
export function findAndProcessDateFilter(filters) {
|
|
@@ -203,7 +203,7 @@ export const getType = (t) => {
|
|
|
203
203
|
*/
|
|
204
204
|
export function filterSentence(filter) {
|
|
205
205
|
let value = '';
|
|
206
|
-
if (filter.filterType ==
|
|
206
|
+
if (filter.filterType == InternalFilterType.NullFilter) {
|
|
207
207
|
return `${snakeAndCamelCaseToTitleCase(filter.field)} ${filter.operator}`;
|
|
208
208
|
}
|
|
209
209
|
else if (filter.value === null || filter.value === undefined) {
|
|
@@ -335,7 +335,7 @@ export async function buildQueryFromFilters(baseAst, filters, endpoint, client)
|
|
|
335
335
|
}
|
|
336
336
|
}
|
|
337
337
|
export function applyCustomFilterToDashDateFilter(customDateFilter, dashboardDateFilter) {
|
|
338
|
-
if (customDateFilter.filterType === FilterType.
|
|
338
|
+
if (customDateFilter.filterType === FilterType.Date &&
|
|
339
339
|
customDateFilter.value &&
|
|
340
340
|
typeof customDateFilter.value === 'object' &&
|
|
341
341
|
'startDate' in customDateFilter.value &&
|
|
@@ -348,14 +348,14 @@ export function applyCustomFilterToDashDateFilter(customDateFilter, dashboardDat
|
|
|
348
348
|
endDate: new Date(endDate),
|
|
349
349
|
};
|
|
350
350
|
}
|
|
351
|
-
else if (customDateFilter.filterType === FilterType.
|
|
351
|
+
else if (customDateFilter.filterType === FilterType.Date &&
|
|
352
352
|
customDateFilter.value &&
|
|
353
353
|
typeof customDateFilter.value === 'object' &&
|
|
354
354
|
'value' in customDateFilter.value &&
|
|
355
355
|
'unit' in customDateFilter.value) {
|
|
356
356
|
const { value, unit } = customDateFilter.value;
|
|
357
357
|
let processedUnit;
|
|
358
|
-
let processedValue = value;
|
|
358
|
+
let processedValue = value || 1;
|
|
359
359
|
switch (unit) {
|
|
360
360
|
case TimeUnit.Day:
|
|
361
361
|
processedUnit = 'days';
|
|
@@ -438,7 +438,7 @@ export function applyCustomFilterToDashDateFilter(customDateFilter, dashboardDat
|
|
|
438
438
|
return dashboardDateFilter;
|
|
439
439
|
}
|
|
440
440
|
}
|
|
441
|
-
else if (customDateFilter.filterType === FilterType.
|
|
441
|
+
else if (customDateFilter.filterType === FilterType.Date &&
|
|
442
442
|
customDateFilter.value &&
|
|
443
443
|
typeof customDateFilter.value === 'string') {
|
|
444
444
|
const parsedDate = parse(customDateFilter.value, 'yyyy-mm-dd', new Date());
|
|
@@ -480,14 +480,14 @@ export function applyCustomFilterToDashDateFilter(customDateFilter, dashboardDat
|
|
|
480
480
|
return dashboardDateFilter;
|
|
481
481
|
}
|
|
482
482
|
export function mergeCustomFilters(filters, customFilters) {
|
|
483
|
-
const customDateFilters = customFilters.filter((filter) => filter.filterType ===
|
|
484
|
-
filter.filterType ===
|
|
485
|
-
filter.filterType ===
|
|
483
|
+
const customDateFilters = customFilters.filter((filter) => filter.filterType === InternalFilterType.DateCustomFilter ||
|
|
484
|
+
filter.filterType === InternalFilterType.DateFilter ||
|
|
485
|
+
filter.filterType === InternalFilterType.DateComparisonFilter);
|
|
486
486
|
if (customDateFilters.length === 0) {
|
|
487
487
|
return filters.concat(customFilters);
|
|
488
488
|
}
|
|
489
489
|
const withoutDate = filters.filter((filter) => filter.filterType !== DashboardFilterType.Date);
|
|
490
|
-
const customWithoutDate = customFilters.filter((filter) => filter.filterType !==
|
|
490
|
+
const customWithoutDate = customFilters.filter((filter) => filter.filterType !== InternalFilterType.DateCustomFilter);
|
|
491
491
|
const withDate = filters.find((filter) => filter.filterType === DashboardFilterType.Date);
|
|
492
492
|
return withoutDate
|
|
493
493
|
.concat([
|
|
@@ -4,5 +4,8 @@
|
|
|
4
4
|
* @param fields - The fields to consider for domain calculation.
|
|
5
5
|
* @returns - An array representing the adjusted domain [min, max].
|
|
6
6
|
*/
|
|
7
|
-
export default function getDomain(data: any[], fields: any[]
|
|
7
|
+
export default function getDomain(data: any[], fields: any[], referenceLines: {
|
|
8
|
+
label: string;
|
|
9
|
+
query: number[];
|
|
10
|
+
}[] | undefined): number[];
|
|
8
11
|
//# sourceMappingURL=getDomain.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDomain.d.ts","sourceRoot":"","sources":["../../../src/utils/getDomain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"getDomain.d.ts","sourceRoot":"","sources":["../../../src/utils/getDomain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CA6CtI"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @param fields - The fields to consider for domain calculation.
|
|
5
5
|
* @returns - An array representing the adjusted domain [min, max].
|
|
6
6
|
*/
|
|
7
|
-
export default function getDomain(data, fields) {
|
|
7
|
+
export default function getDomain(data, fields, referenceLines) {
|
|
8
8
|
const fieldsArray = fields.map((elem) => elem.field);
|
|
9
9
|
const numericValues = [];
|
|
10
10
|
data.forEach((item) => {
|
|
@@ -20,6 +20,16 @@ export default function getDomain(data, fields) {
|
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
22
|
});
|
|
23
|
+
if (referenceLines) {
|
|
24
|
+
referenceLines.forEach((line) => {
|
|
25
|
+
if (typeof line.query[0] === 'number') {
|
|
26
|
+
numericValues.push(line.query[0]);
|
|
27
|
+
}
|
|
28
|
+
if (typeof line.query[line.query.length - 1] === 'number') {
|
|
29
|
+
numericValues.push(line.query[line.query.length - 1]);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
23
33
|
const [minValue, maxValue] = numericValues.reduce(([min, max], value) => [Math.min(min, value), Math.max(max, value)], [Infinity, -Infinity]);
|
|
24
34
|
if (minValue === 0 && maxValue === 0) {
|
|
25
35
|
return [0, 1];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,GACxB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,GACxB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,CAuWrB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,sBAYnD"}
|
|
@@ -25,13 +25,15 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
if (!pivot.aggregations?.length && pivot.aggregationType) {
|
|
28
|
-
pivot.aggregations = [
|
|
28
|
+
pivot.aggregations = [
|
|
29
|
+
{
|
|
29
30
|
aggregationType: pivot.aggregationType,
|
|
30
31
|
valueField: pivot.valueField,
|
|
31
32
|
valueFieldType: pivot.valueFieldType,
|
|
32
33
|
valueField2: pivot.valueField2,
|
|
33
34
|
valueField2Type: pivot.valueField2Type,
|
|
34
|
-
}
|
|
35
|
+
},
|
|
36
|
+
];
|
|
35
37
|
}
|
|
36
38
|
let comparisonInterval = undefined;
|
|
37
39
|
if (dateFilter && dateFilter.comparisonRange) {
|
|
@@ -84,7 +86,6 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
|
|
|
84
86
|
task: 'query',
|
|
85
87
|
clientId: client.publicKey,
|
|
86
88
|
databaseType: databaseType,
|
|
87
|
-
getCustomFields: false,
|
|
88
89
|
runQueryConfig: {
|
|
89
90
|
overridePost: true,
|
|
90
91
|
convertDatatypes: true,
|
|
@@ -143,7 +144,7 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
|
|
|
143
144
|
label: snakeCaseToTitleCase(processColumnName(field.name.replace('comparison_', 'comparison '))),
|
|
144
145
|
format: field.name === pivot.rowField
|
|
145
146
|
? 'string'
|
|
146
|
-
:
|
|
147
|
+
: pivot.aggregations?.[index]?.aggregationType === 'percentage'
|
|
147
148
|
? 'percent'
|
|
148
149
|
: 'whole_number',
|
|
149
150
|
fieldType: field.fieldType,
|
|
@@ -259,8 +260,10 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
|
|
|
259
260
|
};
|
|
260
261
|
}
|
|
261
262
|
export function disambiguatedValueField(pivot) {
|
|
262
|
-
// console.log(pivot);
|
|
263
263
|
if (pivot.aggregations && pivot.aggregations.length > 0) {
|
|
264
|
+
if (!pivot.aggregations[0]?.valueField && !pivot.valueField) {
|
|
265
|
+
return undefined; // avoid returning empty string
|
|
266
|
+
}
|
|
264
267
|
if (pivot.aggregations.length === 1) {
|
|
265
268
|
return pivot.aggregations[0]?.valueField ?? pivot.valueField;
|
|
266
269
|
}
|
|
@@ -268,5 +271,5 @@ export function disambiguatedValueField(pivot) {
|
|
|
268
271
|
return `${pivot.aggregations[0].valueField}_${matchCasing(pivot.aggregations[0].aggregationType, pivot.aggregations[0].valueField)}`;
|
|
269
272
|
}
|
|
270
273
|
}
|
|
271
|
-
return pivot.valueField;
|
|
274
|
+
return pivot.valueField ? pivot.valueField : undefined; // avoid returning empty string
|
|
272
275
|
}
|
|
@@ -2,7 +2,7 @@ import { Pivot } from '../models/Pivot';
|
|
|
2
2
|
import { AdditionalProcessing } from './tableProcessing';
|
|
3
3
|
export declare function processSingleQuotes(value: string, databaseType: string): string;
|
|
4
4
|
export declare function processAggType(aggType: string, hasColumnField?: boolean): string;
|
|
5
|
-
export declare function processColumnReference(column: string, databaseType: string, fallbackOnNull?: string,
|
|
5
|
+
export declare function processColumnReference(column: string, databaseType: string, fallbackOnNull?: string, isColumnFieldAlias?: boolean, isValueFieldAlias?: boolean): string;
|
|
6
6
|
export declare function replaceSpacesWithUnderscores(column: string): string;
|
|
7
7
|
export declare function processDateTrunc(dateBucket: string, rowField: string, databaseType: string, comparisonInterval?: string): string;
|
|
8
8
|
export declare function processValueField(aggType: string, databaseType: string, valueField: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,UAGrE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,
|
|
1
|
+
{"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,UAGrE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,kBAAkB,CAAC,EAAE,OAAO,EAC5B,iBAAiB,CAAC,EAAE,OAAO,UAkG5B;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAmBD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,UA8B5B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,UAYnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAcrB;AAmFD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAkBrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAkBpB;AA82BD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,YAAY,SAAe,sBAuE5B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,sBAqB1E"}
|
|
@@ -18,14 +18,14 @@ function replaceBigQuerySpecialCharacters(column) {
|
|
|
18
18
|
}
|
|
19
19
|
export function processColumnReference(column, databaseType, fallbackOnNull,
|
|
20
20
|
// for mysql, we only want to use double quotes for pivot column field aliases
|
|
21
|
-
|
|
21
|
+
isColumnFieldAlias, isValueFieldAlias) {
|
|
22
22
|
switch (databaseType.toLowerCase()) {
|
|
23
23
|
case 'postgresql':
|
|
24
24
|
case 'clickhouse': {
|
|
25
25
|
if (column === '') {
|
|
26
26
|
return fallbackOnNull ? `"${fallbackOnNull}"` : `"_"`;
|
|
27
27
|
}
|
|
28
|
-
if (
|
|
28
|
+
if (isColumnFieldAlias) {
|
|
29
29
|
return `"${column.replaceAll('"', '')}"`;
|
|
30
30
|
}
|
|
31
31
|
const columnParts = column.split('.');
|
|
@@ -40,7 +40,7 @@ isPivotColumnFieldAlias, isPivotValueFieldAlias) {
|
|
|
40
40
|
if (column === '') {
|
|
41
41
|
return fallbackOnNull ? `${fallbackOnNull}` : '_';
|
|
42
42
|
}
|
|
43
|
-
if (
|
|
43
|
+
if (isColumnFieldAlias) {
|
|
44
44
|
return `\`${column.replaceAll(`\``, '').replaceAll(`"`, '')}\``;
|
|
45
45
|
}
|
|
46
46
|
const columnParts = column.split('.');
|
|
@@ -56,10 +56,10 @@ isPivotColumnFieldAlias, isPivotValueFieldAlias) {
|
|
|
56
56
|
if (column === '') {
|
|
57
57
|
return fallbackOnNull ? `${fallbackOnNull}` : '_';
|
|
58
58
|
}
|
|
59
|
-
if (
|
|
59
|
+
if (isColumnFieldAlias) {
|
|
60
60
|
return `"${column.replaceAll('"', '')}"`;
|
|
61
61
|
}
|
|
62
|
-
if (
|
|
62
|
+
if (isValueFieldAlias) {
|
|
63
63
|
const cleanedColumn = column.replaceAll(')', '').replaceAll('(', '_');
|
|
64
64
|
return `${cleanedColumn}`;
|
|
65
65
|
}
|
|
@@ -73,7 +73,7 @@ isPivotColumnFieldAlias, isPivotValueFieldAlias) {
|
|
|
73
73
|
if (column === '') {
|
|
74
74
|
return fallbackOnNull ? `\`${fallbackOnNull}\`` : '`_`';
|
|
75
75
|
}
|
|
76
|
-
if (
|
|
76
|
+
if (isColumnFieldAlias) {
|
|
77
77
|
return `\`${replaceBigQuerySpecialCharacters(column.replaceAll('`', ''))}\``;
|
|
78
78
|
}
|
|
79
79
|
const columnParts = column.split('.');
|
|
@@ -88,7 +88,7 @@ isPivotColumnFieldAlias, isPivotValueFieldAlias) {
|
|
|
88
88
|
if (column === '') {
|
|
89
89
|
return fallbackOnNull ? `[${fallbackOnNull}]` : `[_]`;
|
|
90
90
|
}
|
|
91
|
-
if (
|
|
91
|
+
if (isColumnFieldAlias) {
|
|
92
92
|
return `[${column.replaceAll(']', '').replaceAll('[', '')}]`;
|
|
93
93
|
}
|
|
94
94
|
const columnParts = column.split('.');
|
|
@@ -165,7 +165,7 @@ export function generateCountQuery(fields, query, databaseType) {
|
|
|
165
165
|
switch (databaseType.toLowerCase()) {
|
|
166
166
|
case 'mysql':
|
|
167
167
|
cte = fields.map((field, index) => {
|
|
168
|
-
return `, distinct_cte_${index} AS (SELECT DISTINCT ${processColumnReference(field, databaseType)} FROM querytable LIMIT ${MAX_PIVOT_UNIQUE_VALUES + 1})`;
|
|
168
|
+
return `, distinct_cte_${index} AS (SELECT DISTINCT ${processColumnReference(field, databaseType, undefined, true)} FROM querytable LIMIT ${MAX_PIVOT_UNIQUE_VALUES + 1})`;
|
|
169
169
|
});
|
|
170
170
|
countQuery = fields.map((field, index) => {
|
|
171
171
|
return `SELECT '${field}' AS ${processColumnReference('field', databaseType)}, COUNT(*) AS ${processColumnReference('count', databaseType)} FROM distinct_cte_${index}`;
|
|
@@ -174,7 +174,7 @@ export function generateCountQuery(fields, query, databaseType) {
|
|
|
174
174
|
break;
|
|
175
175
|
default:
|
|
176
176
|
countQuery = fields.map((field) => {
|
|
177
|
-
return `SELECT '${field}' AS ${processColumnReference('field', databaseType)}, COUNT(DISTINCT ${processColumnReference(field, databaseType)}) AS ${processColumnReference('count', databaseType)} FROM querytable`;
|
|
177
|
+
return `SELECT '${field}' AS ${processColumnReference('field', databaseType)}, COUNT(DISTINCT ${processColumnReference(field, databaseType, undefined, true)}) AS ${processColumnReference('count', databaseType)} FROM querytable`;
|
|
178
178
|
});
|
|
179
179
|
}
|
|
180
180
|
return cteQuery + countQuery.join(' UNION ALL ');
|
|
@@ -293,7 +293,10 @@ function create2DStringPivotQuery(pivot, itemQuery, columnFieldValues, databaseT
|
|
|
293
293
|
if (!isValidBaseQuery || !pivot.columnField || !pivot.rowField)
|
|
294
294
|
return undefined;
|
|
295
295
|
const rowField = pivot.rowField;
|
|
296
|
-
if (!pivot.aggregations?.[0]?.valueField &&
|
|
296
|
+
if (!pivot.aggregations?.[0]?.valueField &&
|
|
297
|
+
pivot.aggregations?.[0]?.aggregationType !== 'count' &&
|
|
298
|
+
!pivot.valueField &&
|
|
299
|
+
pivot.aggregationType !== 'count')
|
|
297
300
|
throw new Error('No value field provided for pivot');
|
|
298
301
|
if (!pivot.aggregations?.[0]?.aggregationType && !pivot.aggregationType)
|
|
299
302
|
throw new Error('No aggregation type provided for pivot');
|
|
@@ -317,7 +320,7 @@ function create2DStringPivotQuery(pivot, itemQuery, columnFieldValues, databaseT
|
|
|
317
320
|
let disambiguationIndex = seenAggs[currentAgg.aggregationType ?? '']?.[currentAgg.valueField ?? '']?.toString();
|
|
318
321
|
if (disambiguationIndex === '1')
|
|
319
322
|
disambiguationIndex = '';
|
|
320
|
-
const valueFieldAlias = processColumnReference(
|
|
323
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField || rowField || 'count', databaseType, undefined, false, true);
|
|
321
324
|
const valueAliasSubstring = currentAgg.valueField
|
|
322
325
|
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
323
326
|
: '';
|
|
@@ -340,16 +343,23 @@ function create2DStringPivotQuery(pivot, itemQuery, columnFieldValues, databaseT
|
|
|
340
343
|
const value2Expr = (currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool'
|
|
341
344
|
? `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`
|
|
342
345
|
: valueField2Alias;
|
|
343
|
-
if (currentAgg.valueField === currentAgg.valueField2 ||
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
346
|
+
if (currentAgg.valueField === currentAgg.valueField2 ||
|
|
347
|
+
!currentAgg.valueField2) {
|
|
348
|
+
caseWhens = [
|
|
349
|
+
...caseWhens,
|
|
350
|
+
...columnFieldValues.map((column) => {
|
|
351
|
+
return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${valueExpr} END) / GREATEST(sum(${value2Expr}), 1) AS ${processColumnReference(column + disambiguation, databaseType, '_', true)}`;
|
|
352
|
+
})
|
|
353
|
+
];
|
|
347
354
|
}
|
|
348
355
|
else {
|
|
349
356
|
value2AliasSubstring = `${processColumnReference(currentAgg.valueField2 ?? currentAgg.valueField, databaseType, undefined, true)} AS ${valueField2Alias}`;
|
|
350
|
-
caseWhens =
|
|
351
|
-
|
|
352
|
-
|
|
357
|
+
caseWhens = [
|
|
358
|
+
...caseWhens,
|
|
359
|
+
...columnFieldValues.map((column) => {
|
|
360
|
+
return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${valueExpr} END) / GREATEST(sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${value2Expr} END), 1) AS ${processColumnReference(column + disambiguation, databaseType, '_', true)}`;
|
|
361
|
+
})
|
|
362
|
+
];
|
|
353
363
|
}
|
|
354
364
|
}
|
|
355
365
|
else {
|
|
@@ -372,7 +382,7 @@ function create2DStringPivotQuery(pivot, itemQuery, columnFieldValues, databaseT
|
|
|
372
382
|
];
|
|
373
383
|
valueAliases = Array.from(new Set(valueAliases));
|
|
374
384
|
const sortQuery = pivot.sort && pivot.sortField && pivot.rowLimit
|
|
375
|
-
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType)} ${pivot.sortDirection || ''} `
|
|
385
|
+
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType, undefined, true)} ${pivot.sortDirection || ''} `
|
|
376
386
|
: '';
|
|
377
387
|
const pivotQuery = `
|
|
378
388
|
,quill_alias AS (
|
|
@@ -401,7 +411,10 @@ function create2DDatePivotQuery(pivot, itemQuery, columnFieldValues, databaseTyp
|
|
|
401
411
|
if (!isValidBaseQuery || !pivot.columnField || !pivot.rowField) {
|
|
402
412
|
return undefined;
|
|
403
413
|
}
|
|
404
|
-
if (!pivot.aggregations?.[0]?.valueField &&
|
|
414
|
+
if (!pivot.aggregations?.[0]?.valueField &&
|
|
415
|
+
pivot.aggregations?.[0]?.aggregationType !== 'count' &&
|
|
416
|
+
!pivot.valueField &&
|
|
417
|
+
pivot.aggregationType !== 'count')
|
|
405
418
|
throw new Error('No value field provided for pivot');
|
|
406
419
|
if (!pivot.aggregations?.[0]?.aggregationType && !pivot.aggregationType)
|
|
407
420
|
throw new Error('No aggregation type provided for pivot');
|
|
@@ -427,12 +440,14 @@ function create2DDatePivotQuery(pivot, itemQuery, columnFieldValues, databaseTyp
|
|
|
427
440
|
let disambiguationIndex = seenAggs[currentAgg.aggregationType ?? '']?.[currentAgg.valueField ?? '']?.toString();
|
|
428
441
|
if (disambiguationIndex === '1')
|
|
429
442
|
disambiguationIndex = '';
|
|
430
|
-
const valueFieldAlias = processColumnReference(
|
|
443
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField ?? rowField, databaseType, undefined, false, true);
|
|
431
444
|
const valueAliasSubstring = currentAgg.valueField
|
|
432
445
|
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
433
446
|
: '';
|
|
434
447
|
let value2AliasSubstring = '';
|
|
435
|
-
const disambiguationField = Object.values(seenAggs[currentAgg.aggregationType ?? ''] ?? {}).reduce((acc, v) => acc + v) > 1
|
|
448
|
+
const disambiguationField = Object.values(seenAggs[currentAgg.aggregationType ?? ''] ?? {}).reduce((acc, v) => acc + v) > 1
|
|
449
|
+
? `_${currentAgg.valueField}${disambiguationIndex}`
|
|
450
|
+
: '';
|
|
436
451
|
const disambiguation = pivot.aggregations?.length > 1
|
|
437
452
|
? `${disambiguationField}_${disambiguationField ? matchCasing(currentAgg.aggregationType, currentAgg.valueField) : currentAgg.aggregationType}`
|
|
438
453
|
: '';
|
|
@@ -449,7 +464,8 @@ function create2DDatePivotQuery(pivot, itemQuery, columnFieldValues, databaseTyp
|
|
|
449
464
|
? `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`
|
|
450
465
|
: valueField2Alias;
|
|
451
466
|
// edge case. if the user picks amount and amount, we assume they want a pie chart like breakdown of amount. so the summation of valueField2 has to be moved outside of the case whe
|
|
452
|
-
if (currentAgg.valueField === currentAgg.valueField2 ||
|
|
467
|
+
if (currentAgg.valueField === currentAgg.valueField2 ||
|
|
468
|
+
!currentAgg.valueField2) {
|
|
453
469
|
caseWhens = [
|
|
454
470
|
...caseWhens,
|
|
455
471
|
...columnFieldValues.map((column) => {
|
|
@@ -487,7 +503,7 @@ function create2DDatePivotQuery(pivot, itemQuery, columnFieldValues, databaseTyp
|
|
|
487
503
|
];
|
|
488
504
|
valueFieldAliases = Array.from(new Set(valueFieldAliases));
|
|
489
505
|
// pivot sort matters in the base query when there is a rowLimit. In mssql, an orderby must be accompanied by a limit in a subquery and not allowed in a cte
|
|
490
|
-
const sortQuery = `${pivot.sort && pivot.sortField && pivot.rowLimit ? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType)} ${pivot.sortDirection || ''} ` : ''}`;
|
|
506
|
+
const sortQuery = `${pivot.sort && pivot.sortField && pivot.rowLimit ? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType, undefined, true)} ${pivot.sortDirection || ''} ` : ''}`;
|
|
491
507
|
const pivotQuery = `
|
|
492
508
|
, quill_alias AS (SELECT ${valueFieldAliases.length > 0 ? `${valueFieldAliases.join(', ')}` : ''} FROM quill_base_table),
|
|
493
509
|
quill_qt_agg AS (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}${caseWhens.length > 0 ? `, ${caseWhens.join(', ')}` : ''} FROM quill_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)}),
|
|
@@ -534,7 +550,7 @@ function create1DStringPivotQuery(pivot, itemQuery, databaseType) {
|
|
|
534
550
|
if (disambiguationIndex === '1')
|
|
535
551
|
disambiguationIndex = '';
|
|
536
552
|
// This is the alias (from quill_alias CTE) for the field
|
|
537
|
-
const valueFieldAlias = processColumnReference(
|
|
553
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField || rowField || 'count', databaseType, undefined, false, true);
|
|
538
554
|
// In the base query, we select the raw column.
|
|
539
555
|
const valueAliasSubstring = currentAgg.valueField
|
|
540
556
|
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
@@ -557,10 +573,13 @@ function create1DStringPivotQuery(pivot, itemQuery, databaseType) {
|
|
|
557
573
|
if ((currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool') {
|
|
558
574
|
value2Expr = `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`;
|
|
559
575
|
}
|
|
560
|
-
value2AliasSubstring =
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
576
|
+
value2AliasSubstring =
|
|
577
|
+
currentAgg.valueField2 &&
|
|
578
|
+
currentAgg.valueField !== currentAgg.valueField2
|
|
579
|
+
? `${processColumnReference(currentAgg.valueField2, databaseType, undefined, true)} AS ${valueField2Alias}`
|
|
580
|
+
: '';
|
|
581
|
+
const percentageExpr = currentAgg.valueField === currentAgg.valueField2 ||
|
|
582
|
+
!currentAgg.valueField2
|
|
564
583
|
? `sum(${valueExpr}) / ${(currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool' ? 'COUNT(*)' : 'SUM(sum(' + valueExpr + ')) OVER ()'}`
|
|
565
584
|
: `sum(${valueExpr}) / GREATEST(sum(${value2Expr}), 1)`;
|
|
566
585
|
quillAggSelects = [
|
|
@@ -581,7 +600,7 @@ function create1DStringPivotQuery(pivot, itemQuery, databaseType) {
|
|
|
581
600
|
});
|
|
582
601
|
valueFieldAliases = Array.from(new Set(valueFieldAliases));
|
|
583
602
|
const sortQuery = `${pivot.sort && pivot.sortField && pivot.rowLimit
|
|
584
|
-
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType)} ${pivot.sortDirection || ''} `
|
|
603
|
+
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType, undefined, true)} ${pivot.sortDirection || ''} `
|
|
585
604
|
: ''}`;
|
|
586
605
|
const pivotQuery = `, quill_alias AS (
|
|
587
606
|
SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowAlias}${valueFieldAliases.length > 0 ? `, ${valueFieldAliases.join(', ')}` : ''}
|
|
@@ -606,7 +625,9 @@ function create1DDatePivotQuery(pivot, itemQuery, dateBucket = 'month', database
|
|
|
606
625
|
}
|
|
607
626
|
const rowField = pivot.rowField || '';
|
|
608
627
|
const rowFieldAlias = processColumnReference(rowField, databaseType, undefined);
|
|
609
|
-
let quillAggSelects = [
|
|
628
|
+
let quillAggSelects = [
|
|
629
|
+
`${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(rowField, databaseType)}`,
|
|
630
|
+
];
|
|
610
631
|
let valueFieldAliases = [];
|
|
611
632
|
const seenAggs = {};
|
|
612
633
|
pivot.aggregations?.forEach((currentAgg) => {
|
|
@@ -625,7 +646,7 @@ function create1DDatePivotQuery(pivot, itemQuery, dateBucket = 'month', database
|
|
|
625
646
|
let disambiguationIndex = seenAggs[currentAgg.aggregationType ?? '']?.[currentAgg.valueField ?? '']?.toString() ?? '';
|
|
626
647
|
if (disambiguationIndex === '1')
|
|
627
648
|
disambiguationIndex = '';
|
|
628
|
-
const valueFieldAlias = processColumnReference(
|
|
649
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField || rowField || 'count', databaseType, undefined, false, true);
|
|
629
650
|
const valueAliasSubstring = currentAgg.valueField
|
|
630
651
|
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
631
652
|
: '';
|
|
@@ -643,14 +664,17 @@ function create1DDatePivotQuery(pivot, itemQuery, dateBucket = 'month', database
|
|
|
643
664
|
throw new Error('No value field provided for percentage aggregation');
|
|
644
665
|
}
|
|
645
666
|
const valueField2Alias = processColumnReference(currentAgg.valueField2 ?? currentAgg.valueField, databaseType, undefined, false, true);
|
|
646
|
-
value2AliasSubstring =
|
|
647
|
-
|
|
648
|
-
|
|
667
|
+
value2AliasSubstring =
|
|
668
|
+
currentAgg.valueField2 &&
|
|
669
|
+
currentAgg.valueField !== currentAgg.valueField2
|
|
670
|
+
? `${processColumnReference(currentAgg.valueField2, databaseType, undefined, true)} AS ${valueField2Alias}`
|
|
671
|
+
: '';
|
|
649
672
|
let value2Expr = valueField2Alias;
|
|
650
673
|
if ((currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool') {
|
|
651
674
|
value2Expr = `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`;
|
|
652
675
|
}
|
|
653
|
-
const percentageExpr = currentAgg.valueField === currentAgg.valueField2 ||
|
|
676
|
+
const percentageExpr = currentAgg.valueField === currentAgg.valueField2 ||
|
|
677
|
+
!currentAgg.valueField2
|
|
654
678
|
? `sum(${valueExpr}) / ${(currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool' ? 'COUNT(*)' : 'SUM(sum(' + valueExpr + ')) OVER ()'}`
|
|
655
679
|
: `sum(${valueExpr}) / GREATEST(sum(${value2Expr}), 1)`;
|
|
656
680
|
quillAggSelects = [
|
|
@@ -671,7 +695,7 @@ function create1DDatePivotQuery(pivot, itemQuery, dateBucket = 'month', database
|
|
|
671
695
|
});
|
|
672
696
|
valueFieldAliases = Array.from(new Set(valueFieldAliases));
|
|
673
697
|
// pivot sort matters in the base query when there is a rowLimit. In mssql, an orderby must be accompanied by a limit in a subquery and not allowed in a cte
|
|
674
|
-
const sortQuery = `${pivot.sort && pivot.sortField && pivot.rowLimit ? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType)} ${pivot.sortDirection || ''} ` : ''}`;
|
|
698
|
+
const sortQuery = `${pivot.sort && pivot.sortField && pivot.rowLimit ? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType, undefined, true)} ${pivot.sortDirection || ''} ` : ''}`;
|
|
675
699
|
const pivotQuery = `, quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}${valueFieldAliases.length > 0 ? `, ${valueFieldAliases.join(', ')}` : ''}
|
|
676
700
|
FROM quill_base_table),
|
|
677
701
|
quill_qt_agg AS (SELECT ${quillAggSelects.join(', ')}
|
|
@@ -707,7 +731,7 @@ function createAggregationValuePivot(pivot, itemQuery, databaseType) {
|
|
|
707
731
|
let disambiguationIndex = seenAggs[currentAgg.aggregationType ?? '']?.[currentAgg.valueField ?? '']?.toString() ?? '';
|
|
708
732
|
if (disambiguationIndex === '1')
|
|
709
733
|
disambiguationIndex = '';
|
|
710
|
-
const valueFieldAlias = processColumnReference(
|
|
734
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField || 'count', databaseType, undefined, false, true);
|
|
711
735
|
const valueAliasSubstring = currentAgg.valueField
|
|
712
736
|
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
713
737
|
: '';
|
|
@@ -717,9 +741,10 @@ function createAggregationValuePivot(pivot, itemQuery, databaseType) {
|
|
|
717
741
|
: '';
|
|
718
742
|
// If the field type is bool, wrap it in a CASE WHEN
|
|
719
743
|
let valueExpr = !currentAgg.valueField ? '*' : valueFieldAlias;
|
|
720
|
-
valueExpr =
|
|
721
|
-
|
|
722
|
-
|
|
744
|
+
valueExpr =
|
|
745
|
+
currentAgg.valueFieldType === 'bool'
|
|
746
|
+
? `CASE WHEN ${valueFieldAlias} THEN 1 ELSE 0 END`
|
|
747
|
+
: valueExpr;
|
|
723
748
|
if (currentAgg.aggregationType === 'percentage') {
|
|
724
749
|
if (!currentAgg.valueField) {
|
|
725
750
|
throw new Error('No value field provided for percentage aggregation');
|
|
@@ -728,10 +753,13 @@ function createAggregationValuePivot(pivot, itemQuery, databaseType) {
|
|
|
728
753
|
const value2Expr = (currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool'
|
|
729
754
|
? `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`
|
|
730
755
|
: valueField2Alias;
|
|
731
|
-
value2AliasSubstring =
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
756
|
+
value2AliasSubstring =
|
|
757
|
+
currentAgg.valueField2 &&
|
|
758
|
+
currentAgg.valueField !== currentAgg.valueField2
|
|
759
|
+
? `${processColumnReference(currentAgg.valueField2, databaseType, undefined, true)} AS ${valueField2Alias}`
|
|
760
|
+
: '';
|
|
761
|
+
const percentageExpr = currentAgg.valueField === currentAgg.valueField2 ||
|
|
762
|
+
!currentAgg.valueField2
|
|
735
763
|
? `sum(${valueExpr}) / ${(currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool' ? 'COUNT(*)' : 'SUM(sum(' + valueExpr + ')) OVER ()'}`
|
|
736
764
|
: `sum(${valueExpr}) / GREATEST(sum(${value2Expr}), 1)`;
|
|
737
765
|
quillAggSelects = [
|
|
@@ -752,7 +780,7 @@ function createAggregationValuePivot(pivot, itemQuery, databaseType) {
|
|
|
752
780
|
});
|
|
753
781
|
valueFieldAliases = Array.from(new Set(valueFieldAliases));
|
|
754
782
|
const sortQuery = pivot.sort && pivot.sortField && pivot.rowLimit
|
|
755
|
-
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType)} ${pivot.sortDirection || ''} `
|
|
783
|
+
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType, undefined, true)} ${pivot.sortDirection || ''} `
|
|
756
784
|
: '';
|
|
757
785
|
const pivotQuery = `, quill_alias AS (
|
|
758
786
|
SELECT ${valueFieldAliases.join(', ')} FROM quill_base_table
|
|
@@ -782,7 +810,13 @@ export function additionalProcessingOnPivotQuery(pivot, query, additionalProcess
|
|
|
782
810
|
}
|
|
783
811
|
if (!pivot.aggregations || pivot.aggregations.length === 0) {
|
|
784
812
|
if (pivot.aggregationType) {
|
|
785
|
-
pivot.aggregations = [
|
|
813
|
+
pivot.aggregations = [
|
|
814
|
+
{
|
|
815
|
+
aggregationType: pivot.aggregationType,
|
|
816
|
+
valueField: pivot.valueField,
|
|
817
|
+
valueField2: pivot.valueField2,
|
|
818
|
+
},
|
|
819
|
+
];
|
|
786
820
|
}
|
|
787
821
|
else {
|
|
788
822
|
throw new Error('No aggregations provided for pivot');
|
|
@@ -806,13 +840,13 @@ export function additionalProcessingOnPivotQuery(pivot, query, additionalProcess
|
|
|
806
840
|
? `_${matchCasing(pivot.aggregations?.[0]?.aggregationType, pivot.aggregations?.[0]?.valueField)}`
|
|
807
841
|
: '';
|
|
808
842
|
if (additionalProcessing.sort) {
|
|
809
|
-
sortQuery = `ORDER BY ${processColumnReference(additionalProcessing.sort.field, databaseType)} ${additionalProcessing.sort.direction || ''}`;
|
|
843
|
+
sortQuery = `ORDER BY ${processColumnReference(additionalProcessing.sort.field, databaseType, undefined, true)} ${additionalProcessing.sort.direction || ''}`;
|
|
810
844
|
}
|
|
811
845
|
else {
|
|
812
846
|
const valueFieldAlias = processColumnReference((pivot.aggregations?.[0]?.valueField ?? '') + disambiguation, databaseType, undefined, false, true);
|
|
813
847
|
const defaultSortField = pivot.sortField || pivot.rowField || valueFieldAlias;
|
|
814
848
|
const defaultSortDirection = pivot.sortDirection || '';
|
|
815
|
-
sortQuery = `ORDER BY ${processColumnReference(defaultSortField, databaseType)} ${defaultSortDirection}`;
|
|
849
|
+
sortQuery = `ORDER BY ${processColumnReference(defaultSortField, databaseType, undefined, true)} ${defaultSortDirection}`;
|
|
816
850
|
}
|
|
817
851
|
const additionalProcessingQuery = `
|
|
818
852
|
SELECT *
|
|
@@ -5,6 +5,7 @@ import { Pivot, PivotData } from '../models/Pivot';
|
|
|
5
5
|
import { QuillReport, QuillReportInternal } from '../models/Report';
|
|
6
6
|
import { DateRangesByColumn, Table, UniqueValuesByTable } from '../models/Tables';
|
|
7
7
|
import { AdditionalProcessing } from './tableProcessing';
|
|
8
|
+
import { CustomField } from '../models/Schema';
|
|
8
9
|
export type ReportBuilderInfo = {
|
|
9
10
|
rows: any[];
|
|
10
11
|
columns: ColumnInternal[];
|
|
@@ -22,19 +23,36 @@ export type ReportBuilderInfo = {
|
|
|
22
23
|
};
|
|
23
24
|
export declare const EMPTY_REPORT: QuillReport;
|
|
24
25
|
export declare const EMPTY_INTERNAL_REPORT: QuillReportInternal;
|
|
25
|
-
export declare function fetchReport(reportId
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
export declare function fetchReport({ reportId, client, tenants, flags, useReportTask, filters, additionalProcessing, dateBucket, customFields, rowsOnly, rowCountOnly, abortSignal, getDefaultDashboardFilters, }: {
|
|
27
|
+
reportId: string;
|
|
28
|
+
client: QuillProviderClient;
|
|
29
|
+
tenants?: {
|
|
30
|
+
tenantField: string;
|
|
31
|
+
tenantIds: (string | number)[];
|
|
32
|
+
}[] | (string | number)[];
|
|
33
|
+
flags?: string[];
|
|
34
|
+
useReportTask?: boolean;
|
|
35
|
+
filters?: any[];
|
|
36
|
+
additionalProcessing?: AdditionalProcessing;
|
|
37
|
+
dateBucket?: string;
|
|
38
|
+
customFields?: any;
|
|
39
|
+
rowsOnly?: boolean;
|
|
40
|
+
rowCountOnly?: boolean;
|
|
41
|
+
abortSignal?: AbortSignal;
|
|
42
|
+
getDefaultDashboardFilters?: boolean;
|
|
43
|
+
}): Promise<{
|
|
29
44
|
report: QuillReportInternal;
|
|
30
45
|
error?: string;
|
|
31
46
|
}>;
|
|
32
|
-
export declare function processReportResponse({ resp, client, filters, dateBucket, additionalProcessing, }: {
|
|
47
|
+
export declare function processReportResponse({ resp, client, filters, dateBucket, additionalProcessing, customFields, }: {
|
|
33
48
|
resp: any;
|
|
34
49
|
client: QuillProviderClient;
|
|
35
50
|
filters?: (DashboardFilter | InternalFilter)[];
|
|
36
51
|
dateBucket?: string;
|
|
37
52
|
additionalProcessing?: AdditionalProcessing;
|
|
53
|
+
customFields?: {
|
|
54
|
+
[tableName: string]: CustomField[];
|
|
55
|
+
} | null;
|
|
38
56
|
}): Promise<QuillReportInternal>;
|
|
39
57
|
export declare function fetchReportInfo(reportId: string, client: QuillProviderClient, tenants?: {
|
|
40
58
|
tenantField: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"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"}
|