@sisense/sdk-data 1.14.0 → 1.15.0

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.
Files changed (45) hide show
  1. package/dist/cjs/dimensional-model/filters/factory.d.ts +4 -2
  2. package/dist/cjs/dimensional-model/filters/factory.js +5 -3
  3. package/dist/cjs/dimensional-model/filters/filters.d.ts +4 -2
  4. package/dist/cjs/dimensional-model/filters/filters.js +5 -3
  5. package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.js +2 -1
  6. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.js +5 -2
  7. package/dist/cjs/dimensional-model/filters/utils/filter-types-util.js +1 -1
  8. package/dist/cjs/package.json +12 -0
  9. package/dist/dimensional-model/filters/factory.d.ts +4 -2
  10. package/dist/dimensional-model/filters/factory.js +5 -3
  11. package/dist/dimensional-model/filters/filters.d.ts +4 -2
  12. package/dist/dimensional-model/filters/filters.js +5 -3
  13. package/dist/dimensional-model/filters/utils/condition-filter-util.js +2 -1
  14. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.js +5 -2
  15. package/dist/dimensional-model/filters/utils/filter-types-util.js +1 -1
  16. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  17. package/package.json +4 -9
  18. package/dist/cjs/dimensional-model/analytics/factory.test.d.ts +0 -1
  19. package/dist/cjs/dimensional-model/analytics/factory.test.js +0 -99
  20. package/dist/cjs/dimensional-model/attributes.test.d.ts +0 -1
  21. package/dist/cjs/dimensional-model/attributes.test.js +0 -154
  22. package/dist/cjs/dimensional-model/base.test.d.ts +0 -1
  23. package/dist/cjs/dimensional-model/base.test.js +0 -17
  24. package/dist/cjs/dimensional-model/dimensions.test.d.ts +0 -1
  25. package/dist/cjs/dimensional-model/dimensions.test.js +0 -84
  26. package/dist/cjs/dimensional-model/filters/factory.test.d.ts +0 -1
  27. package/dist/cjs/dimensional-model/filters/factory.test.js +0 -366
  28. package/dist/cjs/dimensional-model/filters/filters.test.d.ts +0 -1
  29. package/dist/cjs/dimensional-model/filters/filters.test.js +0 -241
  30. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.test.d.ts +0 -1
  31. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.test.js +0 -32
  32. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.test.d.ts +0 -1
  33. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.test.js +0 -623
  34. package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.test.d.ts +0 -1
  35. package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.test.js +0 -236
  36. package/dist/cjs/dimensional-model/measures/factory.test.d.ts +0 -1
  37. package/dist/cjs/dimensional-model/measures/factory.test.js +0 -481
  38. package/dist/cjs/dimensional-model/measures/measures.test.d.ts +0 -1
  39. package/dist/cjs/dimensional-model/measures/measures.test.js +0 -79
  40. package/dist/cjs/dimensional-model/simple-column-types.test.d.ts +0 -1
  41. package/dist/cjs/dimensional-model/simple-column-types.test.js +0 -85
  42. package/dist/cjs/dimensional-model/types.test.d.ts +0 -1
  43. package/dist/cjs/dimensional-model/types.test.js +0 -33
  44. package/dist/cjs/utils.test.d.ts +0 -1
  45. package/dist/cjs/utils.test.js +0 -182
@@ -1,481 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- /* eslint-disable vitest/expect-expect */
27
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
28
- /* eslint-disable @typescript-eslint/no-unsafe-call */
29
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
30
- /* eslint-disable @typescript-eslint/restrict-template-expressions */
31
- /* eslint-disable max-params */
32
- /* eslint-disable @typescript-eslint/no-unsafe-argument */
33
- /* eslint-disable vitest/no-identical-title */
34
- const attributes_js_1 = require("../attributes.js");
35
- const measures_js_1 = require("./measures.js");
36
- const dimensions_js_1 = require("../dimensions.js");
37
- const types_js_1 = require("../types.js");
38
- const base_js_1 = require("../base.js");
39
- const filterFactory = __importStar(require("../filters/factory.js"));
40
- const measureFactory = __importStar(require("./factory.js"));
41
- const sampleAttribute = new attributes_js_1.DimensionalAttribute('Cost', '[Commerce.Cost]', 'numeric-attribute');
42
- const sampleMeasureName = 'measure name';
43
- const sampleMeasureFormat = '00.00';
44
- const sampleMeasure1 = new measures_js_1.DimensionalBaseMeasure('measure 1', sampleAttribute, types_js_1.AggregationTypes.Sum);
45
- const sampleMeasure2 = new measures_js_1.DimensionalBaseMeasure('measure 2', sampleAttribute, types_js_1.AggregationTypes.Average);
46
- const getContextName = (target) => {
47
- return `[${(0, base_js_1.normalizeName)(target.name)}]`;
48
- };
49
- const verifyMeasure = (m, expectedAggregationType) => {
50
- expect(m).toBeInstanceOf(measures_js_1.DimensionalBaseMeasure);
51
- expect(m).toHaveProperty('aggregation', expectedAggregationType);
52
- expect(m).toHaveProperty('attribute', sampleAttribute);
53
- expect(m).toHaveProperty('name', sampleMeasureName);
54
- expect(m.getFormat()).toBe(sampleMeasureFormat);
55
- };
56
- const verifyCalculatedMeasure = (m, expectedExpression, expectedContext, expectedName) => {
57
- expect(m).toBeInstanceOf(measures_js_1.DimensionalCalculatedMeasure);
58
- expect(m).toHaveProperty('expression', expectedExpression);
59
- expect(m).toHaveProperty('context', expectedContext);
60
- expect(m).toHaveProperty('name', expectedName !== null && expectedName !== void 0 ? expectedName : sampleMeasureName);
61
- };
62
- describe('measureFactory', () => {
63
- describe('constant', () => {
64
- test('measureFactory.constant()', () => {
65
- const m = measureFactory.constant(42);
66
- verifyCalculatedMeasure(m, '42', {}, '42');
67
- });
68
- });
69
- describe('aggregations', () => {
70
- test('measureFactory.sum()', () => {
71
- const m = measureFactory.sum(sampleAttribute, sampleMeasureName, sampleMeasureFormat);
72
- verifyMeasure(m, types_js_1.AggregationTypes.Sum);
73
- });
74
- test('measureFactory.average()', () => {
75
- const m = measureFactory.average(sampleAttribute, sampleMeasureName, sampleMeasureFormat);
76
- verifyMeasure(m, types_js_1.AggregationTypes.Average);
77
- });
78
- test('measureFactory.min()', () => {
79
- const m = measureFactory.min(sampleAttribute, sampleMeasureName, sampleMeasureFormat);
80
- verifyMeasure(m, types_js_1.AggregationTypes.Min);
81
- });
82
- test('measureFactory.max()', () => {
83
- const m = measureFactory.max(sampleAttribute, sampleMeasureName, sampleMeasureFormat);
84
- verifyMeasure(m, types_js_1.AggregationTypes.Max);
85
- });
86
- test('measureFactory.max()', () => {
87
- const m = measureFactory.max(sampleAttribute, sampleMeasureName, sampleMeasureFormat);
88
- verifyMeasure(m, types_js_1.AggregationTypes.Max);
89
- });
90
- test('measureFactory.median()', () => {
91
- const m = measureFactory.median(sampleAttribute, sampleMeasureName, sampleMeasureFormat);
92
- verifyMeasure(m, types_js_1.AggregationTypes.Median);
93
- });
94
- test('measureFactory.count()', () => {
95
- const m = measureFactory.count(sampleAttribute, sampleMeasureName, sampleMeasureFormat);
96
- verifyMeasure(m, types_js_1.AggregationTypes.Count);
97
- });
98
- test('measureFactory.countDistinct()', () => {
99
- const m = measureFactory.countDistinct(sampleAttribute, sampleMeasureName, sampleMeasureFormat);
100
- verifyMeasure(m, types_js_1.AggregationTypes.CountDistinct);
101
- });
102
- });
103
- describe('unary formula functions', () => {
104
- const expectedContext = {
105
- '[measure1]': sampleMeasure1,
106
- };
107
- test('measureFactory.yearToDateSum()', () => {
108
- const m = measureFactory.yearToDateSum(sampleMeasure1, sampleMeasureName);
109
- verifyCalculatedMeasure(m, 'YTDSum([measure1])', expectedContext);
110
- });
111
- test('measureFactory.quarterToDateSum()', () => {
112
- const m = measureFactory.quarterToDateSum(sampleMeasure1, sampleMeasureName);
113
- verifyCalculatedMeasure(m, 'QTDSum([measure1])', expectedContext);
114
- });
115
- test('measureFactory.monthToDateSum()', () => {
116
- const m = measureFactory.monthToDateSum(sampleMeasure1, sampleMeasureName);
117
- verifyCalculatedMeasure(m, 'MTDSum([measure1])', expectedContext);
118
- });
119
- test('measureFactory.weekToDateSum()', () => {
120
- const m = measureFactory.weekToDateSum(sampleMeasure1, sampleMeasureName);
121
- verifyCalculatedMeasure(m, 'WTDSum([measure1])', expectedContext);
122
- });
123
- test('measureFactory.runningSum()', () => {
124
- const m = measureFactory.runningSum(sampleMeasure1, false, sampleMeasureName);
125
- verifyCalculatedMeasure(m, 'RSum([measure1])', expectedContext);
126
- });
127
- test('measureFactory.growth()', () => {
128
- const m = measureFactory.growth(sampleMeasure1, sampleMeasureName);
129
- verifyCalculatedMeasure(m, 'growth([measure1])', expectedContext);
130
- });
131
- test('measureFactory.growthRate()', () => {
132
- const m = measureFactory.growthRate(sampleMeasure1, sampleMeasureName);
133
- verifyCalculatedMeasure(m, 'growthrate([measure1])', expectedContext);
134
- });
135
- test('measureFactory.growthPastWeek()', () => {
136
- const m = measureFactory.growthPastWeek(sampleMeasure1, sampleMeasureName);
137
- verifyCalculatedMeasure(m, 'growthpastweek([measure1])', expectedContext);
138
- });
139
- test('measureFactory.growthPastMonth()', () => {
140
- const m = measureFactory.growthPastMonth(sampleMeasure1, sampleMeasureName);
141
- verifyCalculatedMeasure(m, 'growthpastmonth([measure1])', expectedContext);
142
- });
143
- test('measureFactory.growthPastQuarter()', () => {
144
- const m = measureFactory.growthPastQuarter(sampleMeasure1, sampleMeasureName);
145
- verifyCalculatedMeasure(m, 'growthpastquarter([measure1])', expectedContext);
146
- });
147
- test('measureFactory.growthPastYear()', () => {
148
- const m = measureFactory.growthPastYear(sampleMeasure1, sampleMeasureName);
149
- verifyCalculatedMeasure(m, 'growthpastyear([measure1])', expectedContext);
150
- });
151
- test('measureFactory.difference()', () => {
152
- const m = measureFactory.difference(sampleMeasure1, sampleMeasureName);
153
- verifyCalculatedMeasure(m, 'diffpastperiod([measure1])', expectedContext);
154
- });
155
- test('measureFactory.diffPastWeek()', () => {
156
- const m = measureFactory.diffPastWeek(sampleMeasure1, sampleMeasureName);
157
- verifyCalculatedMeasure(m, 'diffpastweek([measure1])', expectedContext);
158
- });
159
- test('measureFactory.diffPastMonth()', () => {
160
- const m = measureFactory.diffPastMonth(sampleMeasure1, sampleMeasureName);
161
- verifyCalculatedMeasure(m, 'diffpastmonth([measure1])', expectedContext);
162
- });
163
- test('measureFactory.diffPastQuarter()', () => {
164
- const m = measureFactory.diffPastQuarter(sampleMeasure1, sampleMeasureName);
165
- verifyCalculatedMeasure(m, 'diffpastquarter([measure1])', expectedContext);
166
- });
167
- test('measureFactory.diffPastYear()', () => {
168
- const m = measureFactory.diffPastYear(sampleMeasure1, sampleMeasureName);
169
- verifyCalculatedMeasure(m, 'diffpastyear([measure1])', expectedContext);
170
- });
171
- test('measureFactory.pastDay()', () => {
172
- const m = measureFactory.pastDay(sampleMeasure1, sampleMeasureName);
173
- verifyCalculatedMeasure(m, 'pastday([measure1])', expectedContext);
174
- });
175
- test('measureFactory.pastWeek()', () => {
176
- const m = measureFactory.pastWeek(sampleMeasure1, sampleMeasureName);
177
- verifyCalculatedMeasure(m, 'pastweek([measure1])', expectedContext);
178
- });
179
- test('measureFactory.pastMonth()', () => {
180
- const m = measureFactory.pastMonth(sampleMeasure1, sampleMeasureName);
181
- verifyCalculatedMeasure(m, 'pastmonth([measure1])', expectedContext);
182
- });
183
- test('measureFactory.pastQuarter()', () => {
184
- const m = measureFactory.pastQuarter(sampleMeasure1, sampleMeasureName);
185
- verifyCalculatedMeasure(m, 'pastquarter([measure1])', expectedContext);
186
- });
187
- test('measureFactory.pastYear()', () => {
188
- const m = measureFactory.pastYear(sampleMeasure1, sampleMeasureName);
189
- verifyCalculatedMeasure(m, 'pastyear([measure1])', expectedContext);
190
- });
191
- test('measureFactory.contribution()', () => {
192
- const m = measureFactory.contribution(sampleMeasure1, sampleMeasureName);
193
- verifyCalculatedMeasure(m, 'contribution([measure1])', expectedContext);
194
- });
195
- });
196
- describe('arithmetical formula functions', () => {
197
- describe('operands: two measures', () => {
198
- const expectedContext = {
199
- '[measure1]': sampleMeasure1,
200
- '[measure2]': sampleMeasure2,
201
- };
202
- test('measureFactory.add()', () => {
203
- const m = measureFactory.add(sampleMeasure1, sampleMeasure2, sampleMeasureName, false);
204
- verifyCalculatedMeasure(m, '[measure1]+[measure2]', expectedContext);
205
- });
206
- test('measureFactory.subtract()', () => {
207
- const m = measureFactory.subtract(sampleMeasure1, sampleMeasure2, sampleMeasureName, false);
208
- verifyCalculatedMeasure(m, '[measure1]-[measure2]', expectedContext);
209
- });
210
- test('measureFactory.multiply()', () => {
211
- const m = measureFactory.multiply(sampleMeasure1, sampleMeasure2, sampleMeasureName, false);
212
- verifyCalculatedMeasure(m, '[measure1]*[measure2]', expectedContext);
213
- });
214
- test('measureFactory.divide()', () => {
215
- const m = measureFactory.divide(sampleMeasure1, sampleMeasure2, sampleMeasureName, false);
216
- verifyCalculatedMeasure(m, '[measure1]/[measure2]', expectedContext);
217
- });
218
- });
219
- describe('operands: measure and number', () => {
220
- const expectedContext = {
221
- '[measure1]': sampleMeasure1,
222
- };
223
- const numberOperand = 10;
224
- test('measureFactory.add()', () => {
225
- const m = measureFactory.add(sampleMeasure1, numberOperand, sampleMeasureName, true);
226
- verifyCalculatedMeasure(m, `([measure1]+${numberOperand})`, expectedContext);
227
- });
228
- test('measureFactory.subtract()', () => {
229
- const m = measureFactory.subtract(sampleMeasure1, numberOperand, sampleMeasureName, true);
230
- verifyCalculatedMeasure(m, `([measure1]-${numberOperand})`, expectedContext);
231
- });
232
- test('measureFactory.multiply()', () => {
233
- const m = measureFactory.multiply(sampleMeasure1, numberOperand, sampleMeasureName, true);
234
- verifyCalculatedMeasure(m, `([measure1]*${numberOperand})`, expectedContext);
235
- });
236
- test('measureFactory.divide()', () => {
237
- const m = measureFactory.divide(sampleMeasure1, numberOperand, sampleMeasureName, true);
238
- verifyCalculatedMeasure(m, `([measure1]/${numberOperand})`, expectedContext);
239
- });
240
- });
241
- });
242
- describe('rank formula function', () => {
243
- test('measureFactory.rank()', () => {
244
- const groupByAttribute = new attributes_js_1.DimensionalAttribute('Age Range', '[Commerce.Age Range]');
245
- const m = measureFactory.rank(sampleMeasure1, sampleMeasureName, measureFactory.RankingSortTypes.Descending, measureFactory.RankingTypes.Dense, [groupByAttribute]);
246
- verifyCalculatedMeasure(m, 'rank([measure1],DESC,1223,[AgeRange])', {
247
- '[measure1]': sampleMeasure1,
248
- '[AgeRange]': groupByAttribute,
249
- });
250
- });
251
- });
252
- describe('measuredValue formula function', () => {
253
- test('measureFactory.measuredValue()', () => {
254
- const textDimension = (0, dimensions_js_1.createDimension)({
255
- name: 'Age Range',
256
- type: 'textdimension',
257
- expression: '[Commerce.Age Range]',
258
- });
259
- const filter = filterFactory.equals(textDimension, '65+');
260
- const m = measureFactory.measuredValue(sampleMeasure1, [filter], sampleMeasureName);
261
- verifyCalculatedMeasure(m, `([measure1],${getContextName(filter)})`, {
262
- '[measure1]': sampleMeasure1,
263
- [getContextName(filter)]: filter,
264
- });
265
- });
266
- });
267
- describe('advanced analytics functions', () => {
268
- test('measureFactory.trend() with no options', () => {
269
- const m = measureFactory.sum(sampleAttribute);
270
- const mTrend = measureFactory.trend(m);
271
- expect(mTrend.jaql()).toStrictEqual({
272
- jaql: {
273
- title: 'sum Cost Trend',
274
- formula: 'trend([sumCost])',
275
- context: {
276
- '[sumCost]': {
277
- title: 'sum Cost',
278
- dim: '[Commerce.Cost]',
279
- datatype: 'numeric',
280
- agg: 'sum',
281
- },
282
- },
283
- },
284
- });
285
- });
286
- test('measureFactory.trend() with modelType=advancedSmoothing', () => {
287
- const m = measureFactory.sum(sampleAttribute);
288
- const mTrend = measureFactory.trend(m, 'Trend', {
289
- modelType: 'advancedSmoothing',
290
- ignoreAnomalies: true,
291
- });
292
- expect(mTrend.jaql()).toStrictEqual({
293
- jaql: {
294
- context: {
295
- '[sumCost]': {
296
- agg: 'sum',
297
- datatype: 'numeric',
298
- dim: '[Commerce.Cost]',
299
- title: 'sum Cost',
300
- },
301
- },
302
- formula: 'trend([sumCost], "modelType=smooth","ignoreAnomalies=true")',
303
- title: 'Trend',
304
- },
305
- });
306
- });
307
- test('measureFactory.trend() with modelType=localEstimates', () => {
308
- const m = measureFactory.sum(sampleAttribute);
309
- const mTrend = measureFactory.trend(m, 'Trend', {
310
- modelType: 'localEstimates',
311
- });
312
- expect(mTrend.jaql()).toStrictEqual({
313
- jaql: {
314
- context: {
315
- '[sumCost]': {
316
- agg: 'sum',
317
- datatype: 'numeric',
318
- dim: '[Commerce.Cost]',
319
- title: 'sum Cost',
320
- },
321
- },
322
- formula: 'trend([sumCost], "modelType=local")',
323
- title: 'Trend',
324
- },
325
- });
326
- });
327
- test('measureFactory.forecast() with no options', () => {
328
- const m = measureFactory.sum(sampleAttribute);
329
- const mTrend = measureFactory.forecast(m);
330
- expect(mTrend.jaql()).toStrictEqual({
331
- jaql: {
332
- formula: 'forecast([sumCost], "forecastHorizon=3")',
333
- title: 'sum Cost Forecast',
334
- context: {
335
- '[sumCost]': {
336
- title: 'sum Cost',
337
- dim: '[Commerce.Cost]',
338
- datatype: 'numeric',
339
- agg: 'sum',
340
- },
341
- },
342
- },
343
- });
344
- });
345
- test('measureFactory.forecast() with only modelType', () => {
346
- const m = measureFactory.sum(sampleAttribute);
347
- const mTrend = measureFactory.forecast(m, 'Forecast', {
348
- modelType: 'holtWinters',
349
- });
350
- expect(mTrend.jaql()).toStrictEqual({
351
- jaql: {
352
- formula: 'forecast([sumCost], "forecastHorizon=3","modelType=holtWinters")',
353
- title: 'Forecast',
354
- context: {
355
- '[sumCost]': {
356
- title: 'sum Cost',
357
- dim: '[Commerce.Cost]',
358
- datatype: 'numeric',
359
- agg: 'sum',
360
- },
361
- },
362
- },
363
- });
364
- });
365
- test('measureFactory.forecast() with all options', () => {
366
- const m = measureFactory.sum(sampleAttribute);
367
- const mTrend = measureFactory.forecast(m, 'Forecast', {
368
- forecastHorizon: 6,
369
- modelType: 'holtWinters',
370
- startDate: new Date('2023-01-01'),
371
- endDate: new Date('2023-06-01'),
372
- confidenceInterval: 0.9,
373
- lowerBound: 1000,
374
- upperBound: 100000,
375
- roundToInt: true,
376
- });
377
- expect(mTrend.jaql()).toStrictEqual({
378
- jaql: {
379
- formula: 'forecast([sumCost], "forecastHorizon=6","modelType=holtWinters","startDate=2023-01-01T00:00:00","endDate=2023-06-01T00:00:00","confidenceInterval=0.9","lowerBound=1000","upperBound=100000","roundToInt=true")',
380
- title: 'Forecast',
381
- context: {
382
- '[sumCost]': {
383
- title: 'sum Cost',
384
- dim: '[Commerce.Cost]',
385
- datatype: 'numeric',
386
- agg: 'sum',
387
- },
388
- },
389
- },
390
- });
391
- });
392
- });
393
- test('measureFactory.forecast() with ISO string dates', () => {
394
- const m = measureFactory.sum(sampleAttribute);
395
- const mTrend = measureFactory.forecast(m, 'Forecast', {
396
- forecastHorizon: 6,
397
- modelType: 'holtWinters',
398
- startDate: '2023-01-01',
399
- endDate: '2023-06-01',
400
- confidenceInterval: 0.9,
401
- lowerBound: 1000,
402
- upperBound: 100000,
403
- roundToInt: true,
404
- });
405
- expect(mTrend.jaql()).toStrictEqual({
406
- jaql: {
407
- formula: 'forecast([sumCost], "forecastHorizon=6","modelType=holtWinters","startDate=2023-01-01T00:00:00","endDate=2023-06-01T00:00:00","confidenceInterval=0.9","lowerBound=1000","upperBound=100000","roundToInt=true")',
408
- title: 'Forecast',
409
- context: {
410
- '[sumCost]': {
411
- title: 'sum Cost',
412
- dim: '[Commerce.Cost]',
413
- datatype: 'numeric',
414
- agg: 'sum',
415
- },
416
- },
417
- },
418
- });
419
- });
420
- describe('measureFactory.customFormula()', () => {
421
- test('with attribute and measure', () => {
422
- const m = measureFactory.customFormula('Total Attribute', 'SUM([Attribute]) - [Average Measure]', {
423
- Attribute: sampleAttribute,
424
- 'Average Measure': sampleMeasure2,
425
- });
426
- expect(m.jaql()).toStrictEqual({
427
- jaql: {
428
- context: {
429
- '[Attribute]': {
430
- datatype: 'numeric',
431
- dim: '[Commerce.Cost]',
432
- title: 'Cost',
433
- },
434
- '[Average Measure]': {
435
- agg: 'avg',
436
- datatype: 'numeric',
437
- dim: '[Commerce.Cost]',
438
- title: 'measure 2',
439
- },
440
- },
441
- formula: 'SUM([Attribute]) - [Average Measure]',
442
- title: 'Total Attribute',
443
- },
444
- });
445
- });
446
- test('with nested formula', () => {
447
- const nestedMeasure = measureFactory.customFormula('Total Attribute', 'SUM([Attribute]) - [Average Measure]', {
448
- Attribute: sampleAttribute,
449
- 'Average Measure': sampleMeasure2,
450
- });
451
- const m = measureFactory.customFormula('Nested formula', 'RANK([Nested], "ASC", "1224")', {
452
- Nested: nestedMeasure,
453
- });
454
- expect(m.jaql()).toStrictEqual({
455
- jaql: {
456
- context: {
457
- '[Nested]': {
458
- context: {
459
- '[Attribute]': {
460
- datatype: 'numeric',
461
- dim: '[Commerce.Cost]',
462
- title: 'Cost',
463
- },
464
- '[Average Measure]': {
465
- agg: 'avg',
466
- datatype: 'numeric',
467
- dim: '[Commerce.Cost]',
468
- title: 'measure 2',
469
- },
470
- },
471
- formula: 'SUM([Attribute]) - [Average Measure]',
472
- title: 'Total Attribute',
473
- },
474
- },
475
- formula: 'RANK([Nested], "ASC", "1224")',
476
- title: 'Nested formula',
477
- },
478
- });
479
- });
480
- });
481
- });
@@ -1,79 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
4
- /* eslint-disable @typescript-eslint/no-unsafe-call */
5
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
6
- const measures_js_1 = require("./measures.js");
7
- const attributes_js_1 = require("../attributes.js");
8
- const types_js_1 = require("../types.js");
9
- describe('Measures jaql preparations', () => {
10
- it('must prepare simple measure jaql', () => {
11
- const result = {
12
- jaql: { title: 'Cost', agg: 'sum', dim: '[Commerce.Cost]', datatype: 'numeric' },
13
- };
14
- const measure = new measures_js_1.DimensionalBaseMeasure('Cost', new attributes_js_1.DimensionalAttribute('[Commerce.Cost]', '[Commerce.Cost]', 'numeric-attribute'), 'sum');
15
- const jaql = measure.jaql();
16
- expect(jaql).toStrictEqual(result);
17
- });
18
- it('must prepare constant as jaql', () => {
19
- const result = {
20
- jaql: {
21
- title: '0',
22
- formula: '0',
23
- context: {},
24
- },
25
- };
26
- const measure = new measures_js_1.DimensionalCalculatedMeasure('0', '0', {});
27
- const jaql = measure.jaql();
28
- expect(jaql).toStrictEqual(result);
29
- });
30
- it('must prepare calculated measure jaql', () => {
31
- const result = {
32
- jaql: {
33
- title: 'sum([Cost] + [Total Revenue])',
34
- formula: 'sum([M1] + [M2])',
35
- context: {
36
- '[M1]': { title: 'Revenue', agg: 'sum', dim: '[Commerce.Revenue]', datatype: 'numeric' },
37
- '[M2]': { title: 'Cost', agg: 'sum', dim: '[Commerce.Cost]', datatype: 'numeric' },
38
- },
39
- },
40
- };
41
- const measure = new measures_js_1.DimensionalCalculatedMeasure('sum([Cost] + [Total Revenue])', 'sum([M1] + [M2])', {
42
- '[M1]': new measures_js_1.DimensionalBaseMeasure('Revenue', new attributes_js_1.DimensionalAttribute('[Commerce.Revenue]', '[Commerce.Revenue]', 'numeric-attribute'), 'sum'),
43
- '[M2]': new measures_js_1.DimensionalBaseMeasure('Cost', new attributes_js_1.DimensionalAttribute('[Commerce.Cost]', '[Commerce.Cost]', 'numeric-attribute'), 'sum'),
44
- });
45
- const jaql = measure.jaql();
46
- expect(jaql).toStrictEqual(result);
47
- });
48
- it('must prepare template measure jaql', () => {
49
- const result = {
50
- jaql: { title: 'sum CommerceCost', agg: 'sum', dim: '[Commerce.Cost]', datatype: 'numeric' },
51
- };
52
- const measure = new measures_js_1.DimensionalMeasureTemplate('Count', new attributes_js_1.DimensionalAttribute('[Commerce.Cost]', '[Commerce.Cost]', 'numeric-attribute'));
53
- const jaql = measure.jaql();
54
- expect(jaql).toStrictEqual(result);
55
- });
56
- });
57
- describe('Measures aggregation transformations', () => {
58
- const aggregationTypesMapping = {
59
- [types_js_1.AggregationTypes.Sum]: 'sum',
60
- [types_js_1.AggregationTypes.Average]: 'avg',
61
- [types_js_1.AggregationTypes.Min]: 'min',
62
- [types_js_1.AggregationTypes.Max]: 'max',
63
- [types_js_1.AggregationTypes.Count]: 'countduplicates',
64
- [types_js_1.AggregationTypes.CountDistinct]: 'count',
65
- [types_js_1.AggregationTypes.Median]: 'median',
66
- [types_js_1.AggregationTypes.Variance]: 'var',
67
- [types_js_1.AggregationTypes.StandardDeviation]: 'stdev',
68
- };
69
- it('should correctly extract aggregation from jaql', () => {
70
- Object.entries(aggregationTypesMapping).forEach(([aggType, jaqlAggType]) => {
71
- expect(measures_js_1.DimensionalBaseMeasure.aggregationFromJAQL(jaqlAggType)).toEqual(aggType);
72
- });
73
- });
74
- it('should correctly convert aggregation to jaql aggregation type', () => {
75
- Object.entries(aggregationTypesMapping).forEach(([aggType, jaqlAggType]) => {
76
- expect(measures_js_1.DimensionalBaseMeasure.aggregationToJAQL(aggType)).toEqual(jaqlAggType);
77
- });
78
- });
79
- });
@@ -1,85 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const simple_column_types_js_1 = require("./simple-column-types.js");
4
- const typeMap = {
5
- number: [
6
- // INTEGER
7
- '__int4',
8
- '__int8',
9
- 'int',
10
- 'tinyint',
11
- 'bigint',
12
- 'int2',
13
- 'int4',
14
- 'int8',
15
- 'smallint',
16
- 'mediumint',
17
- 'serial',
18
- 'integer',
19
- 'byteint',
20
- 'int64',
21
- // DECIMAL
22
- 'basemeasure',
23
- 'calculatedmeasure',
24
- 'float',
25
- 'float4',
26
- 'float8',
27
- 'double precision',
28
- 'double',
29
- 'numeric',
30
- 'decimal',
31
- 'real',
32
- 'number',
33
- 'float64',
34
- // OTHER
35
- 'numeric-attribute',
36
- ],
37
- text: [
38
- 'textdimension',
39
- 'string',
40
- 'varchar',
41
- 'text',
42
- 'ntext',
43
- 'char',
44
- 'character',
45
- 'character varying',
46
- 'smalltext',
47
- 'nchar',
48
- 'nvarchar',
49
- 'json',
50
- 'jsonb',
51
- 'object',
52
- 'text-attribute',
53
- 'RANDOM_TEXT',
54
- ],
55
- datetime: [
56
- 'datelevel',
57
- 'date',
58
- 'time',
59
- 'datetime',
60
- 'timestamp without time zone',
61
- 'timestamp',
62
- 'timestamp with time zone',
63
- 'timestamp(6)',
64
- 'timestamp_tz',
65
- 'timestamp_ntz',
66
- 'timestamp_ltz',
67
- 'timestampltz',
68
- 'timestampntz',
69
- 'timestamptz',
70
- 'datetime64[ns]',
71
- 'timewithtimezone',
72
- 'timestampwithtimezone',
73
- 'timestamp_with_timezone',
74
- ],
75
- boolean: ['bool', 'boolean', 'bit', 'logical'],
76
- };
77
- describe('simpleColumnType', () => {
78
- it('should return correct type', () => {
79
- Object.entries(typeMap).forEach(([outputType, inputTypes]) => {
80
- inputTypes.forEach((inputType) => {
81
- expect((0, simple_column_types_js_1.simpleColumnType)(inputType)).toBe(outputType);
82
- });
83
- });
84
- });
85
- });
@@ -1 +0,0 @@
1
- export {};