@quillsql/react 2.13.38 → 2.13.39
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.map +1 -1
- package/dist/cjs/Chart.js +0 -1
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +68 -57
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +69 -51
- package/dist/cjs/components/Chart/ChartTooltip.d.ts +1 -1
- package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartTooltip.js +3 -3
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +4 -4
- package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -1
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +73 -21
- package/dist/cjs/components/UiComponents.d.ts +2 -1
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +11 -4
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +4 -5
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +19 -11
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.js +62 -48
- package/dist/cjs/internals/ReportBuilder/PivotList.js +5 -4
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +28 -31
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +315 -633
- package/dist/cjs/models/Pivot.d.ts +27 -7
- package/dist/cjs/models/Pivot.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +36 -11
- package/dist/cjs/utils/merge.d.ts.map +1 -1
- package/dist/cjs/utils/merge.js +2 -1
- package/dist/cjs/utils/pivotConstructor.d.ts +1 -0
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +37 -7
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +10 -14
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +421 -134
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +2 -2
- package/dist/cjs/utils/textProcessing.d.ts +1 -1
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +3 -0
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +0 -1
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +68 -57
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +69 -51
- package/dist/esm/components/Chart/ChartTooltip.d.ts +1 -1
- package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartTooltip.js +3 -3
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +4 -4
- package/dist/esm/components/ReportBuilder/convert.d.ts +1 -1
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +74 -22
- package/dist/esm/components/UiComponents.d.ts +2 -1
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +11 -4
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +4 -5
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +19 -11
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.js +63 -49
- package/dist/esm/internals/ReportBuilder/PivotList.js +5 -4
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +28 -31
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +327 -635
- package/dist/esm/models/Pivot.d.ts +27 -7
- package/dist/esm/models/Pivot.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +36 -11
- package/dist/esm/utils/merge.d.ts.map +1 -1
- package/dist/esm/utils/merge.js +2 -1
- package/dist/esm/utils/pivotConstructor.d.ts +1 -0
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +37 -8
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +10 -14
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +421 -134
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +2 -2
- package/dist/esm/utils/textProcessing.d.ts +1 -1
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +3 -0
- package/package.json +1 -1
|
@@ -2,12 +2,8 @@ import { ColumnInternal } from './Columns';
|
|
|
2
2
|
/**
|
|
3
3
|
* Represents the metadata of a pivot table.
|
|
4
4
|
*/
|
|
5
|
-
export type Pivot =
|
|
6
|
-
|
|
7
|
-
valueField: string;
|
|
8
|
-
valueField2?: string;
|
|
9
|
-
valueField2Type?: string;
|
|
10
|
-
valueFieldType?: string;
|
|
5
|
+
export type Pivot = SingleAggregationPivot | MultiAggregationPivot;
|
|
6
|
+
interface BasePivot {
|
|
11
7
|
rowField?: string;
|
|
12
8
|
rowFieldType?: string;
|
|
13
9
|
columnField?: string;
|
|
@@ -20,7 +16,30 @@ export type Pivot = {
|
|
|
20
16
|
triggerButtonText?: string;
|
|
21
17
|
rowLimit?: number;
|
|
22
18
|
columnValues?: string[];
|
|
23
|
-
}
|
|
19
|
+
}
|
|
20
|
+
interface SingleAggregationPivot extends BasePivot {
|
|
21
|
+
aggregationType: AggregationType;
|
|
22
|
+
valueField?: string;
|
|
23
|
+
valueField2?: string;
|
|
24
|
+
valueField2Type?: string;
|
|
25
|
+
valueFieldType?: string;
|
|
26
|
+
aggregations?: never;
|
|
27
|
+
}
|
|
28
|
+
interface MultiAggregationPivot extends BasePivot {
|
|
29
|
+
aggregationType?: never;
|
|
30
|
+
valueField?: never;
|
|
31
|
+
valueField2?: never;
|
|
32
|
+
valueField2Type?: never;
|
|
33
|
+
valueFieldType?: never;
|
|
34
|
+
aggregations: {
|
|
35
|
+
valueField?: string;
|
|
36
|
+
valueFieldType?: string;
|
|
37
|
+
valueField2?: string;
|
|
38
|
+
valueField2Type?: string;
|
|
39
|
+
aggregationType: AggregationType;
|
|
40
|
+
}[];
|
|
41
|
+
}
|
|
42
|
+
export type AggregationType = 'sum' | 'average' | 'min' | 'max' | 'count' | 'avg' | 'percentage';
|
|
24
43
|
export type PivotInfo = {
|
|
25
44
|
pivot: Pivot;
|
|
26
45
|
possibleRowFields: string[];
|
|
@@ -34,4 +53,5 @@ export type PivotData = {
|
|
|
34
53
|
pivotQuery: string;
|
|
35
54
|
comparisonPivotQuery?: string;
|
|
36
55
|
};
|
|
56
|
+
export {};
|
|
37
57
|
//# sourceMappingURL=Pivot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pivot.d.ts","sourceRoot":"","sources":["../../../src/models/Pivot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,
|
|
1
|
+
{"version":3,"file":"Pivot.d.ts","sourceRoot":"","sources":["../../../src/models/Pivot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,sBAAsB,GAAG,qBAAqB,CAAC;AAGnE,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AACD,UAAU,sBAAuB,SAAQ,SAAS;IAChD,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB;AACD,UAAU,qBAAsB,SAAQ,SAAS;IAC/C,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,cAAc,CAAC,EAAE,KAAK,CAAC;IACvB,YAAY,EAAE;QACZ,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,eAAe,CAAC;KAClC,EAAE,CAAC;CACL;AAED,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,YAAY,CAAC;AAEjG,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA2BzD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA2BzD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,mBAAmB,CAAC,CA+F9B;AA0ID,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,CA6Bd"}
|
|
@@ -46,7 +46,19 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
46
46
|
let pivotTable;
|
|
47
47
|
let pivotError;
|
|
48
48
|
try {
|
|
49
|
-
pivotTable = await getPivotTable(
|
|
49
|
+
pivotTable = await getPivotTable({
|
|
50
|
+
...item,
|
|
51
|
+
pivot: item.pivot ? {
|
|
52
|
+
...item.pivot,
|
|
53
|
+
aggregations: item.pivot.aggregations ?? [{
|
|
54
|
+
valueField: item.pivot.valueField,
|
|
55
|
+
valueFieldType: item.pivot.valueFieldType,
|
|
56
|
+
valueField2: item.pivot.valueField2,
|
|
57
|
+
valueField2Type: item.pivot.valueField2Type,
|
|
58
|
+
aggregationType: item.pivot.aggregationType,
|
|
59
|
+
}]
|
|
60
|
+
} : undefined,
|
|
61
|
+
}, dashboardFilters, client, dateBucket, additionalProcessing, item.dashboardName);
|
|
50
62
|
}
|
|
51
63
|
catch (e) {
|
|
52
64
|
pivotTable = undefined;
|
|
@@ -74,7 +86,17 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
74
86
|
pivot: pivotError
|
|
75
87
|
? undefined
|
|
76
88
|
: item.pivot
|
|
77
|
-
? {
|
|
89
|
+
? {
|
|
90
|
+
...item.pivot,
|
|
91
|
+
aggregations: item.pivot.aggregations ?? [{
|
|
92
|
+
valueField: item.pivot.valueField,
|
|
93
|
+
valueFieldType: item.pivot.valueFieldType,
|
|
94
|
+
valueField2: item.pivot.valueField2,
|
|
95
|
+
valueField2Type: item.pivot.valueField2Type,
|
|
96
|
+
aggregationType: item.pivot.aggregationType,
|
|
97
|
+
}],
|
|
98
|
+
columnValues: item.distinctStrings
|
|
99
|
+
}
|
|
78
100
|
: undefined,
|
|
79
101
|
yAxisFields: pivotTable
|
|
80
102
|
? extractPivotedYAxis(pivotTable, item)
|
|
@@ -125,15 +147,18 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
125
147
|
dataTypeID: fieldTypeToDataTypeID(pivot.rowFieldType || 'string'),
|
|
126
148
|
});
|
|
127
149
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
150
|
+
for (const agg of pivot.aggregations ?? []) {
|
|
151
|
+
if (agg.valueField) {
|
|
152
|
+
columns.push({
|
|
153
|
+
field: agg.valueField,
|
|
154
|
+
label: snakeCaseToTitleCase(processColumnName(agg.valueField)),
|
|
155
|
+
//FIXME: valueFieldType is not always the same as the format
|
|
156
|
+
format: agg.valueFieldType ?? 'whole_number',
|
|
157
|
+
jsType: agg.valueFieldType ?? 'number',
|
|
158
|
+
fieldType: agg.valueFieldType ?? 'number',
|
|
159
|
+
dataTypeID: fieldTypeToDataTypeID(agg.valueFieldType ?? 'number'),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
137
162
|
}
|
|
138
163
|
return {
|
|
139
164
|
rows: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/merge.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/merge.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMxC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAgBnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsBrE;AAyBD,wBAAgB,2BAA2B,CAAC,EAC1C,KAAK,EACL,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;CACjB,GAAG,GAAG,EAAE,CAMR;AAED,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,GAAG,EAAE,CAyBR"}
|
package/dist/esm/utils/merge.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { add, startOfDay, startOfMonth, startOfWeek, startOfYear, } from 'date-fns';
|
|
2
2
|
import { isStringType } from './columnProcessing';
|
|
3
3
|
import { utcToZonedTime } from 'date-fns-tz';
|
|
4
|
+
// FIXME: Update all of this as part of restoring date comparisons
|
|
4
5
|
export function mergeComparisonRange(resp) {
|
|
5
6
|
if (resp.chartType === 'table')
|
|
6
7
|
return resp;
|
|
@@ -88,7 +89,7 @@ function merge2DPivotRows(pivot, rows, compRows, columnFieldValues, databaseType
|
|
|
88
89
|
return merge2DDatePivotRows(pivot, rows, compRows, columnFieldValues, databaseType, dateBucket, comparisonInterval);
|
|
89
90
|
}
|
|
90
91
|
function merge2DStringPivotRows(pivot, rows, compRows, columnFieldValues) {
|
|
91
|
-
if (!pivot.rowField || !pivot.valueField) {
|
|
92
|
+
if (!pivot.rowField || !pivot.aggregations?.some((agg) => agg.valueField)) {
|
|
92
93
|
return rows;
|
|
93
94
|
}
|
|
94
95
|
return rows.map((row) => {
|
|
@@ -19,4 +19,5 @@ export declare function generatePivotWithSQL({ pivot, report, client, dateBucket
|
|
|
19
19
|
comparisonPivotQuery?: string;
|
|
20
20
|
getPivotRowCount?: boolean;
|
|
21
21
|
}): Promise<PivotData>;
|
|
22
|
+
export declare function disambiguatedValueField(pivot: Pivot): string | undefined;
|
|
22
23
|
//# sourceMappingURL=pivotConstructor.d.ts.map
|
|
@@ -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,CAkWrB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,sBAUnD"}
|
|
@@ -6,7 +6,7 @@ import { parseValueFromBigQueryDates } from './dataProcessing';
|
|
|
6
6
|
import { getComparisonInterval } from './dates';
|
|
7
7
|
import { mergeComparisonPivotColumns, mergeComparisonPivotRows } from './merge';
|
|
8
8
|
import { additionalProcessingOnPivotQuery, generatePivotQuery, generateRowCountQuery, } from './queryConstructor';
|
|
9
|
-
import { snakeCaseToTitleCase } from './textProcessing';
|
|
9
|
+
import { matchCasing, snakeCaseToTitleCase } from './textProcessing';
|
|
10
10
|
export async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount = true, }) {
|
|
11
11
|
let sqlQuery = pivotQuery;
|
|
12
12
|
let comparisonPivotSql = comparisonPivotQuery;
|
|
@@ -15,7 +15,23 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
|
|
|
15
15
|
pivot.columnField &&
|
|
16
16
|
!pivot.columnValues &&
|
|
17
17
|
!distinctStrings) {
|
|
18
|
-
|
|
18
|
+
if (!report?.rows) {
|
|
19
|
+
throw new Error('No distinct strings provided for column field');
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
distinctStrings = Array.from(new Set(report.rows
|
|
23
|
+
.map((row) => row[pivot.columnField])
|
|
24
|
+
.filter((value) => value !== null && value !== undefined)));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (!pivot.aggregations?.length && pivot.aggregationType) {
|
|
28
|
+
pivot.aggregations = [{
|
|
29
|
+
aggregationType: pivot.aggregationType,
|
|
30
|
+
valueField: pivot.valueField,
|
|
31
|
+
valueFieldType: pivot.valueFieldType,
|
|
32
|
+
valueField2: pivot.valueField2,
|
|
33
|
+
valueField2Type: pivot.valueField2Type,
|
|
34
|
+
}];
|
|
19
35
|
}
|
|
20
36
|
let comparisonInterval = undefined;
|
|
21
37
|
if (dateFilter && dateFilter.comparisonRange) {
|
|
@@ -28,7 +44,7 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
|
|
|
28
44
|
const rowColumn = report?.columns.find((column) => column.field === pivot.rowField);
|
|
29
45
|
pivot.rowFieldType = rowColumn?.format || 'string';
|
|
30
46
|
}
|
|
31
|
-
const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined);
|
|
47
|
+
const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined && value !== '');
|
|
32
48
|
const pivotColumnFields = filteredDistinctStrings?.slice(0, MAX_PIVOT_UNIQUE_VALUES);
|
|
33
49
|
if (!pivotQuery && report) {
|
|
34
50
|
if (!report.itemQuery) {
|
|
@@ -121,12 +137,12 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
|
|
|
121
137
|
});
|
|
122
138
|
}
|
|
123
139
|
const columns = responseFields
|
|
124
|
-
?.map((field) => ({
|
|
140
|
+
?.map((field, index) => ({
|
|
125
141
|
field: processColumnName(field.name),
|
|
126
142
|
label: snakeCaseToTitleCase(processColumnName(field.name.replace('comparison_', 'comparison '))),
|
|
127
143
|
format: field.name === pivot.rowField
|
|
128
144
|
? 'string'
|
|
129
|
-
: (pivot.
|
|
145
|
+
: (pivot.aggregations?.[index]?.aggregationType === 'percentage')
|
|
130
146
|
? 'percent'
|
|
131
147
|
: 'whole_number',
|
|
132
148
|
fieldType: field.fieldType,
|
|
@@ -214,11 +230,12 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
|
|
|
214
230
|
// });
|
|
215
231
|
// }
|
|
216
232
|
// for the case of count agg on no value field
|
|
217
|
-
columns?.forEach((column) => {
|
|
233
|
+
columns?.forEach((column, index) => {
|
|
218
234
|
if (column.label &&
|
|
219
235
|
['null', 'undefined'].includes(column.label.toLowerCase()) &&
|
|
220
|
-
!pivot.
|
|
221
|
-
pivot.
|
|
236
|
+
!pivot.columnField &&
|
|
237
|
+
!pivot.aggregations?.[index]?.valueField &&
|
|
238
|
+
pivot.aggregations?.[index]?.aggregationType === 'count') {
|
|
222
239
|
column.label = 'Count';
|
|
223
240
|
}
|
|
224
241
|
});
|
|
@@ -240,3 +257,15 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
|
|
|
240
257
|
comparisonPivotQuery: comparisonPivotSql,
|
|
241
258
|
};
|
|
242
259
|
}
|
|
260
|
+
export function disambiguatedValueField(pivot) {
|
|
261
|
+
// console.log(pivot);
|
|
262
|
+
if (pivot.aggregations && pivot.aggregations.length > 0) {
|
|
263
|
+
if (pivot.aggregations.length === 1) {
|
|
264
|
+
return pivot.aggregations[0]?.valueField ?? pivot.valueField;
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
return `${pivot.aggregations[0].valueField}_${matchCasing(pivot.aggregations[0].aggregationType, pivot.aggregations[0].valueField)}`;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return pivot.valueField;
|
|
271
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAuCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAuCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmB7E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE;;;;EAsDjE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CAoCP;AAED,eAAO,MAAM,eAAe,WAAY,GAAG,SAAS,KAAK,YA8BxD,CAAC"}
|
|
@@ -45,7 +45,7 @@ function generateTwoDPivotQuery(pivot, query, columns) {
|
|
|
45
45
|
FROM original_query GROUP BY ${pivot.rowField}`;
|
|
46
46
|
}
|
|
47
47
|
export function isValidPivot(pivot) {
|
|
48
|
-
if (!pivot.rowField && !pivot.valueField) {
|
|
48
|
+
if (!pivot.rowField && !pivot.aggregations?.[0]?.valueField) {
|
|
49
49
|
return {
|
|
50
50
|
valid: false,
|
|
51
51
|
reason: 'Row field cannot be empty without a value field',
|
|
@@ -57,17 +57,7 @@ export function isValidPivot(pivot) {
|
|
|
57
57
|
reason: 'Row field cannot be empty when column field is present',
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
|
-
else if (
|
|
61
|
-
return { valid: false, reason: 'Aggregation type cannot be empty' };
|
|
62
|
-
}
|
|
63
|
-
else if (pivot.aggregationType === 'percentage' &&
|
|
64
|
-
(!pivot.valueField2 || !pivot.valueField)) {
|
|
65
|
-
return {
|
|
66
|
-
valid: false,
|
|
67
|
-
reason: 'Percentage aggregation requires two value fields',
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
else if (!pivot.valueField && pivot.aggregationType !== 'count') {
|
|
60
|
+
else if (pivot.aggregations?.some((a) => a.aggregationType !== 'count' && !a.valueField)) {
|
|
71
61
|
return {
|
|
72
62
|
valid: false,
|
|
73
63
|
reason: 'Value field cannot be empty when aggregation is not "count"',
|
|
@@ -105,9 +95,9 @@ export function getPossiblePivotFieldOptions(columns, uniqueValues) {
|
|
|
105
95
|
rowFields.push(column.field);
|
|
106
96
|
}
|
|
107
97
|
}
|
|
108
|
-
// value fields can be numbers
|
|
98
|
+
// value fields can be numbers or bools
|
|
109
99
|
// TODO: should "format" be used as the indicator, or fieldType?
|
|
110
|
-
if (NUMBER_FORMAT_TYPES.includes(column.format)) {
|
|
100
|
+
if (NUMBER_FORMAT_TYPES.includes(column.format) || column.jsType === 'bool') {
|
|
111
101
|
if (!isIdColumn(column.field)) {
|
|
112
102
|
valueFields.push(column.field);
|
|
113
103
|
}
|
|
@@ -142,6 +132,12 @@ export function cleanPivot(pivot, possibleColumns) {
|
|
|
142
132
|
!possibleColumns.columnFields.includes(pivot.columnField)) {
|
|
143
133
|
pivot.columnField = undefined;
|
|
144
134
|
}
|
|
135
|
+
if (pivot.aggregationType) {
|
|
136
|
+
pivot.aggregations = [{
|
|
137
|
+
valueField: pivot.valueField,
|
|
138
|
+
aggregationType: pivot.aggregationType,
|
|
139
|
+
}];
|
|
140
|
+
}
|
|
145
141
|
return pivot;
|
|
146
142
|
}
|
|
147
143
|
export const isPivotPossible = (fields, pivot) => {
|
|
@@ -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,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UAkGjC;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;
|
|
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,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UAkGjC;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;AA8uBD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,YAAY,SAAe,sBAgE5B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,sBAqB1E"}
|