@cubejs-client/core 1.3.15 → 1.3.16

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 (100) hide show
  1. package/dist/{cubejs-client-core.js → cubejs-client-core.cjs.js} +1016 -411
  2. package/dist/cubejs-client-core.cjs.js.map +1 -0
  3. package/dist/cubejs-client-core.umd.js +2901 -12088
  4. package/dist/cubejs-client-core.umd.js.map +1 -1
  5. package/dist/src/HttpTransport.d.ts +54 -0
  6. package/dist/src/HttpTransport.d.ts.map +1 -0
  7. package/dist/src/HttpTransport.js +55 -0
  8. package/dist/src/Meta.d.ts +62 -0
  9. package/dist/src/Meta.d.ts.map +1 -0
  10. package/dist/src/Meta.js +150 -0
  11. package/dist/src/ProgressResult.d.ts +8 -0
  12. package/dist/src/ProgressResult.d.ts.map +1 -0
  13. package/dist/src/ProgressResult.js +11 -0
  14. package/dist/src/RequestError.d.ts +6 -0
  15. package/dist/src/RequestError.d.ts.map +1 -0
  16. package/dist/src/RequestError.js +7 -0
  17. package/dist/src/ResultSet.d.ts +430 -0
  18. package/dist/src/ResultSet.d.ts.map +1 -0
  19. package/dist/src/ResultSet.js +952 -0
  20. package/dist/src/SqlQuery.d.ts +17 -0
  21. package/dist/src/SqlQuery.d.ts.map +1 -0
  22. package/dist/src/SqlQuery.js +11 -0
  23. package/dist/src/index.d.ts +194 -0
  24. package/dist/src/index.d.ts.map +1 -0
  25. package/dist/src/index.js +411 -0
  26. package/dist/src/index.umd.d.ts +3 -0
  27. package/dist/src/index.umd.d.ts.map +1 -0
  28. package/dist/src/index.umd.js +6 -0
  29. package/dist/src/time.d.ts +70 -0
  30. package/dist/src/time.d.ts.map +1 -0
  31. package/dist/src/time.js +249 -0
  32. package/dist/src/types.d.ts +424 -0
  33. package/dist/src/types.d.ts.map +1 -0
  34. package/dist/src/types.js +1 -0
  35. package/dist/src/utils.d.ts +19 -0
  36. package/dist/src/utils.d.ts.map +1 -0
  37. package/dist/src/utils.js +294 -0
  38. package/dist/test/CubeApi.test.d.ts +7 -0
  39. package/dist/test/CubeApi.test.d.ts.map +1 -0
  40. package/dist/test/CubeApi.test.js +279 -0
  41. package/dist/test/HttpTransport.test.d.ts +2 -0
  42. package/dist/test/HttpTransport.test.d.ts.map +1 -0
  43. package/dist/test/HttpTransport.test.js +244 -0
  44. package/dist/test/ResultSet.test.d.ts +7 -0
  45. package/dist/test/ResultSet.test.d.ts.map +1 -0
  46. package/dist/test/ResultSet.test.js +1725 -0
  47. package/dist/test/compare-date-range.test.d.ts +2 -0
  48. package/dist/test/compare-date-range.test.d.ts.map +1 -0
  49. package/dist/test/compare-date-range.test.js +742 -0
  50. package/dist/test/data-blending.test.d.ts +2 -0
  51. package/dist/test/data-blending.test.d.ts.map +1 -0
  52. package/dist/test/data-blending.test.js +423 -0
  53. package/dist/test/default-heuristics.test.d.ts +2 -0
  54. package/dist/test/default-heuristics.test.d.ts.map +1 -0
  55. package/dist/test/default-heuristics.test.js +108 -0
  56. package/dist/test/drill-down.test.d.ts +2 -0
  57. package/dist/test/drill-down.test.d.ts.map +1 -0
  58. package/dist/test/drill-down.test.js +373 -0
  59. package/dist/test/fixtures/datablending/load-responses.json +261 -0
  60. package/dist/test/granularity.test.d.ts +2 -0
  61. package/dist/test/granularity.test.d.ts.map +1 -0
  62. package/dist/test/granularity.test.js +218 -0
  63. package/dist/test/helpers.d.ts +283 -0
  64. package/dist/test/helpers.d.ts.map +1 -0
  65. package/dist/test/helpers.js +974 -0
  66. package/dist/test/index.test.d.ts +7 -0
  67. package/dist/test/index.test.d.ts.map +1 -0
  68. package/dist/test/index.test.js +370 -0
  69. package/dist/test/table.test.d.ts +2 -0
  70. package/dist/test/table.test.d.ts.map +1 -0
  71. package/dist/test/table.test.js +757 -0
  72. package/dist/test/utils.test.d.ts +2 -0
  73. package/dist/test/utils.test.d.ts.map +1 -0
  74. package/dist/test/utils.test.js +32 -0
  75. package/package.json +26 -21
  76. package/dist/cubejs-client-core.esm.js +0 -1639
  77. package/dist/cubejs-client-core.esm.js.map +0 -1
  78. package/dist/cubejs-client-core.js.map +0 -1
  79. package/index.d.ts +0 -1338
  80. package/src/HttpTransport.js +0 -60
  81. package/src/HttpTransport.test.js +0 -117
  82. package/src/Meta.js +0 -142
  83. package/src/ProgressResult.js +0 -13
  84. package/src/RequestError.js +0 -7
  85. package/src/ResultSet.js +0 -746
  86. package/src/SqlQuery.js +0 -13
  87. package/src/index.js +0 -398
  88. package/src/index.test.js +0 -454
  89. package/src/index.umd.js +0 -8
  90. package/src/tests/ResultSet.test.js +0 -1655
  91. package/src/tests/compare-date-range.test.js +0 -753
  92. package/src/tests/data-blending.test.js +0 -432
  93. package/src/tests/default-heuristics.test.js +0 -118
  94. package/src/tests/drill-down.test.js +0 -402
  95. package/src/tests/fixtures/datablending/load-responses.json +0 -261
  96. package/src/tests/granularity.test.js +0 -225
  97. package/src/tests/table.test.js +0 -791
  98. package/src/tests/utils.test.js +0 -35
  99. package/src/time.js +0 -296
  100. package/src/utils.js +0 -368
@@ -1,1655 +0,0 @@
1
- /**
2
- * @license Apache-2.0
3
- * @copyright Cube Dev, Inc.
4
- * @fileoverview ResultSet class unit tests.
5
- */
6
-
7
- /* globals describe,test,expect */
8
-
9
- import 'jest';
10
- import ResultSet from '../ResultSet';
11
-
12
- describe('ResultSet', () => {
13
- describe('timeSeries', () => {
14
- test('it generates array of dates - granularity month', () => {
15
- const resultSet = new ResultSet({});
16
- const timeDimension = {
17
- dateRange: ['2015-01-01', '2015-12-31'],
18
- granularity: 'month',
19
- timeDimension: 'Events.time'
20
- };
21
- const output = [
22
- '2015-01-01T00:00:00.000',
23
- '2015-02-01T00:00:00.000',
24
- '2015-03-01T00:00:00.000',
25
- '2015-04-01T00:00:00.000',
26
- '2015-05-01T00:00:00.000',
27
- '2015-06-01T00:00:00.000',
28
- '2015-07-01T00:00:00.000',
29
- '2015-08-01T00:00:00.000',
30
- '2015-09-01T00:00:00.000',
31
- '2015-10-01T00:00:00.000',
32
- '2015-11-01T00:00:00.000',
33
- '2015-12-01T00:00:00.000'
34
- ];
35
- expect(resultSet.timeSeries(timeDimension)).toEqual(output);
36
- });
37
-
38
- test('it generates array of dates - granularity quarter', () => {
39
- const resultSet = new ResultSet({});
40
- const timeDimension = {
41
- dateRange: ['2015-01-01', '2015-12-31'],
42
- granularity: 'quarter',
43
- timeDimension: 'Events.time'
44
- };
45
- const output = [
46
- '2015-01-01T00:00:00.000',
47
- '2015-04-01T00:00:00.000',
48
- '2015-07-01T00:00:00.000',
49
- '2015-10-01T00:00:00.000',
50
- ];
51
- expect(resultSet.timeSeries(timeDimension)).toEqual(output);
52
- });
53
-
54
- test('it generates array of dates - granularity hour', () => {
55
- const resultSet = new ResultSet({});
56
- const timeDimension = {
57
- dateRange: ['2015-01-01', '2015-01-01'],
58
- granularity: 'hour',
59
- timeDimension: 'Events.time'
60
- };
61
- const output = [
62
- '2015-01-01T00:00:00.000',
63
- '2015-01-01T01:00:00.000',
64
- '2015-01-01T02:00:00.000',
65
- '2015-01-01T03:00:00.000',
66
- '2015-01-01T04:00:00.000',
67
- '2015-01-01T05:00:00.000',
68
- '2015-01-01T06:00:00.000',
69
- '2015-01-01T07:00:00.000',
70
- '2015-01-01T08:00:00.000',
71
- '2015-01-01T09:00:00.000',
72
- '2015-01-01T10:00:00.000',
73
- '2015-01-01T11:00:00.000',
74
- '2015-01-01T12:00:00.000',
75
- '2015-01-01T13:00:00.000',
76
- '2015-01-01T14:00:00.000',
77
- '2015-01-01T15:00:00.000',
78
- '2015-01-01T16:00:00.000',
79
- '2015-01-01T17:00:00.000',
80
- '2015-01-01T18:00:00.000',
81
- '2015-01-01T19:00:00.000',
82
- '2015-01-01T20:00:00.000',
83
- '2015-01-01T21:00:00.000',
84
- '2015-01-01T22:00:00.000',
85
- '2015-01-01T23:00:00.000'
86
- ];
87
- expect(resultSet.timeSeries(timeDimension)).toEqual(output);
88
- });
89
-
90
- test('it generates array of dates - granularity hour - not full day', () => {
91
- const resultSet = new ResultSet({});
92
- const timeDimension = {
93
- dateRange: ['2015-01-01T10:30:00.000', '2015-01-01T13:59:00.000'],
94
- granularity: 'hour',
95
- timeDimension: 'Events.time'
96
- };
97
- const output = [
98
- '2015-01-01T10:00:00.000',
99
- '2015-01-01T11:00:00.000',
100
- '2015-01-01T12:00:00.000',
101
- '2015-01-01T13:00:00.000'
102
- ];
103
- expect(resultSet.timeSeries(timeDimension)).toEqual(output);
104
- });
105
-
106
- test('it generates array of dates - custom interval - 1 year, origin - 2020-01-01', () => {
107
- const resultSet = new ResultSet({});
108
- const timeDimension = {
109
- dateRange: ['2021-01-01', '2023-12-31'],
110
- granularity: 'one_year',
111
- dimension: 'Events.time'
112
- };
113
- const output = [
114
- '2021-01-01T00:00:00.000',
115
- '2022-01-01T00:00:00.000',
116
- '2023-01-01T00:00:00.000'
117
- ];
118
- expect(resultSet.timeSeries(timeDimension, 1, {
119
- 'Events.time.one_year': {
120
- title: 'Time Dimension',
121
- shortTitle: 'TD',
122
- type: 'time',
123
- granularity: {
124
- name: '1 year',
125
- title: '1 year',
126
- interval: '1 year',
127
- origin: '2020-01-01',
128
- },
129
- },
130
- })).toEqual(output);
131
- });
132
-
133
- test('it generates array of dates - custom interval - 1 year, origin - 2025-03-01', () => {
134
- const resultSet = new ResultSet({});
135
- const timeDimension = {
136
- dateRange: ['2021-01-01', '2022-12-31'],
137
- granularity: 'one_year',
138
- dimension: 'Events.time'
139
- };
140
- const output = [
141
- '2020-03-01T00:00:00.000',
142
- '2021-03-01T00:00:00.000',
143
- '2022-03-01T00:00:00.000',
144
- ];
145
- expect(resultSet.timeSeries(timeDimension, 1, {
146
- 'Events.time.one_year': {
147
- title: 'Time Dimension',
148
- shortTitle: 'TD',
149
- type: 'time',
150
- granularity: {
151
- name: '1 year',
152
- title: '1 year',
153
- interval: '1 year',
154
- origin: '2025-03-01',
155
- },
156
- },
157
- })).toEqual(output);
158
- });
159
-
160
- test('it generates array of dates - custom interval - 1 year, offset - 2 months', () => {
161
- const resultSet = new ResultSet({});
162
- const timeDimension = {
163
- dateRange: ['2021-01-01', '2022-12-31'],
164
- granularity: 'one_year',
165
- dimension: 'Events.time'
166
- };
167
- const output = [
168
- '2020-03-01T00:00:00.000',
169
- '2021-03-01T00:00:00.000',
170
- '2022-03-01T00:00:00.000',
171
- ];
172
- expect(resultSet.timeSeries(timeDimension, 1, {
173
- 'Events.time.one_year': {
174
- title: 'Time Dimension',
175
- shortTitle: 'TD',
176
- type: 'time',
177
- granularity: {
178
- name: '1 year',
179
- title: '1 year',
180
- interval: '1 year',
181
- offset: '2 months',
182
- },
183
- },
184
- })).toEqual(output);
185
- });
186
-
187
- test('it generates array of dates - custom interval - 2 months, origin - 2019-01-01', () => {
188
- const resultSet = new ResultSet({});
189
- const timeDimension = {
190
- dateRange: ['2021-01-01', '2021-12-31'],
191
- granularity: 'two_months',
192
- dimension: 'Events.time'
193
- };
194
- const output = [
195
- '2021-01-01T00:00:00.000',
196
- '2021-03-01T00:00:00.000',
197
- '2021-05-01T00:00:00.000',
198
- '2021-07-01T00:00:00.000',
199
- '2021-09-01T00:00:00.000',
200
- '2021-11-01T00:00:00.000',
201
- ];
202
- expect(resultSet.timeSeries(timeDimension, 1, {
203
- 'Events.time.two_months': {
204
- title: 'Time Dimension',
205
- shortTitle: 'TD',
206
- type: 'time',
207
- granularity: {
208
- name: '2 months',
209
- title: '2 months',
210
- interval: '2 months',
211
- origin: '2019-01-01',
212
- },
213
- },
214
- })).toEqual(output);
215
- });
216
-
217
- test('it generates array of dates - custom interval - 2 months, no offset', () => {
218
- const resultSet = new ResultSet({});
219
- const timeDimension = {
220
- dateRange: ['2021-01-01', '2021-12-31'],
221
- granularity: 'two_months',
222
- dimension: 'Events.time'
223
- };
224
- const output = [
225
- '2021-01-01T00:00:00.000',
226
- '2021-03-01T00:00:00.000',
227
- '2021-05-01T00:00:00.000',
228
- '2021-07-01T00:00:00.000',
229
- '2021-09-01T00:00:00.000',
230
- '2021-11-01T00:00:00.000',
231
- ];
232
- expect(resultSet.timeSeries(timeDimension, 1, {
233
- 'Events.time.two_months': {
234
- title: 'Time Dimension',
235
- shortTitle: 'TD',
236
- type: 'time',
237
- granularity: {
238
- name: '2 months',
239
- title: '2 months',
240
- interval: '2 months',
241
- },
242
- },
243
- })).toEqual(output);
244
- });
245
-
246
- test('it generates array of dates - custom interval - 2 months, origin - 2019-03-15', () => {
247
- const resultSet = new ResultSet({});
248
- const timeDimension = {
249
- dateRange: ['2021-01-01', '2021-12-31'],
250
- granularity: 'two_months',
251
- dimension: 'Events.time'
252
- };
253
- const output = [
254
- '2020-11-15T00:00:00.000',
255
- '2021-01-15T00:00:00.000',
256
- '2021-03-15T00:00:00.000',
257
- '2021-05-15T00:00:00.000',
258
- '2021-07-15T00:00:00.000',
259
- '2021-09-15T00:00:00.000',
260
- '2021-11-15T00:00:00.000',
261
- ];
262
- expect(resultSet.timeSeries(timeDimension, 1, {
263
- 'Events.time.two_months': {
264
- title: 'Time Dimension',
265
- shortTitle: 'TD',
266
- type: 'time',
267
- granularity: {
268
- name: '2 months',
269
- title: '2 months',
270
- interval: '2 months',
271
- origin: '2019-03-15',
272
- },
273
- },
274
- })).toEqual(output);
275
- });
276
-
277
- test('it generates array of dates - custom interval - 1 months 2 weeks 3 days, origin - 2021-01-25', () => {
278
- const resultSet = new ResultSet({});
279
- const timeDimension = {
280
- dateRange: ['2021-01-01', '2021-12-31'],
281
- granularity: 'one_mo_two_we_three_d',
282
- dimension: 'Events.time'
283
- };
284
- const output = [
285
- '2020-12-08T00:00:00.000',
286
- '2021-01-25T00:00:00.000',
287
- '2021-03-14T00:00:00.000',
288
- '2021-05-01T00:00:00.000',
289
- '2021-06-18T00:00:00.000',
290
- '2021-08-04T00:00:00.000',
291
- '2021-09-21T00:00:00.000',
292
- '2021-11-07T00:00:00.000',
293
- '2021-12-24T00:00:00.000',
294
- ];
295
- expect(resultSet.timeSeries(timeDimension, 1, {
296
- 'Events.time.one_mo_two_we_three_d': {
297
- title: 'Time Dimension',
298
- shortTitle: 'TD',
299
- type: 'time',
300
- granularity: {
301
- name: '1 months 2 weeks 3 days',
302
- title: '1 months 2 weeks 3 days',
303
- interval: '1 months 2 weeks 3 days',
304
- origin: '2021-01-25',
305
- },
306
- },
307
- })).toEqual(output);
308
- });
309
-
310
- test('it generates array of dates - custom interval - 3 weeks, origin - 2020-12-15', () => {
311
- const resultSet = new ResultSet({});
312
- const timeDimension = {
313
- dateRange: ['2021-01-01', '2021-03-01'],
314
- granularity: 'three_weeks',
315
- dimension: 'Events.time'
316
- };
317
- const output = [
318
- '2020-12-15T00:00:00.000',
319
- '2021-01-05T00:00:00.000',
320
- '2021-01-26T00:00:00.000',
321
- '2021-02-16T00:00:00.000',
322
- ];
323
- expect(resultSet.timeSeries(timeDimension, 1, {
324
- 'Events.time.three_weeks': {
325
- title: 'Time Dimension',
326
- shortTitle: 'TD',
327
- type: 'time',
328
- granularity: {
329
- name: '3 weeks',
330
- title: '3 weeks',
331
- interval: '3 weeks',
332
- origin: '2020-12-15',
333
- },
334
- },
335
- })).toEqual(output);
336
- });
337
-
338
- test('it generates array of dates - custom interval - 2 months 3 weeks 4 days 5 hours 6 minutes 7 seconds, origin - 2021-01-01', () => {
339
- const resultSet = new ResultSet({});
340
- const timeDimension = {
341
- dateRange: ['2021-01-01', '2021-12-31'],
342
- granularity: 'two_mo_3w_4d_5h_6m_7s',
343
- dimension: 'Events.time'
344
- };
345
- const output = [
346
- '2021-01-01T00:00:00.000',
347
- '2021-03-26T05:06:07.000',
348
- '2021-06-20T10:12:14.000',
349
- '2021-09-14T15:18:21.000',
350
- '2021-12-09T20:24:28.000',
351
- ];
352
- expect(resultSet.timeSeries(timeDimension, 1, {
353
- 'Events.time.two_mo_3w_4d_5h_6m_7s': {
354
- title: 'Time Dimension',
355
- shortTitle: 'TD',
356
- type: 'time',
357
- granularity: {
358
- name: 'two_mo_3w_4d_5h_6m_7s',
359
- title: 'two_mo_3w_4d_5h_6m_7s',
360
- interval: '2 months 3 weeks 4 days 5 hours 6 minutes 7 seconds',
361
- origin: '2021-01-01',
362
- },
363
- },
364
- })).toEqual(output);
365
- });
366
-
367
- test('it generates array of dates - custom interval - 10 minutes 15 seconds, origin - 2021-02-01 09:59:45', () => {
368
- const resultSet = new ResultSet({});
369
- const timeDimension = {
370
- dateRange: ['2021-02-01 10:00:00', '2021-02-01 12:00:00'],
371
- granularity: 'ten_min_fifteen_sec',
372
- dimension: 'Events.time'
373
- };
374
- const output = [
375
- '2021-02-01T09:59:45.000',
376
- '2021-02-01T10:10:00.000',
377
- '2021-02-01T10:20:15.000',
378
- '2021-02-01T10:30:30.000',
379
- '2021-02-01T10:40:45.000',
380
- '2021-02-01T10:51:00.000',
381
- '2021-02-01T11:01:15.000',
382
- '2021-02-01T11:11:30.000',
383
- '2021-02-01T11:21:45.000',
384
- '2021-02-01T11:32:00.000',
385
- '2021-02-01T11:42:15.000',
386
- '2021-02-01T11:52:30.000',
387
- ];
388
- expect(resultSet.timeSeries(timeDimension, 1, {
389
- 'Events.time.ten_min_fifteen_sec': {
390
- title: 'Time Dimension',
391
- shortTitle: 'TD',
392
- type: 'time',
393
- granularity: {
394
- name: '10 minutes 15 seconds',
395
- title: '10 minutes 15 seconds',
396
- interval: '10 minutes 15 seconds',
397
- origin: '2021-02-01 09:59:45',
398
- },
399
- },
400
- })).toEqual(output);
401
- });
402
- });
403
-
404
- describe('chartPivot', () => {
405
- test('String field', () => {
406
- const resultSet = new ResultSet({
407
- query: {
408
- measures: ['Foo.count'],
409
- dimensions: ['Foo.name'],
410
- filters: [],
411
- timezone: 'UTC',
412
- timeDimensions: []
413
- },
414
- data: [
415
- {
416
- 'Foo.name': 'Name 1',
417
- 'Foo.count': 'Some string'
418
- }
419
- ],
420
- lastRefreshTime: '2020-03-18T13:41:04.436Z',
421
- usedPreAggregations: {},
422
- annotation: {
423
- measures: {
424
- 'Foo.count': {
425
- title: 'Foo Count',
426
- shortTitle: 'Count',
427
- type: 'number'
428
- }
429
- },
430
- dimensions: {
431
- 'Foo.name': {
432
- title: 'Foo Name',
433
- shortTitle: 'Name',
434
- type: 'string'
435
- }
436
- },
437
- segments: {},
438
- timeDimensions: {}
439
- }
440
- });
441
-
442
- expect(resultSet.chartPivot()).toEqual([
443
- {
444
- x: 'Name 1',
445
-
446
- 'Foo.count': 'Some string',
447
- xValues: [
448
- 'Name 1'
449
- ],
450
- }
451
- ]);
452
- });
453
-
454
- test('Null field', () => {
455
- const resultSet = new ResultSet({
456
- query: {
457
- measures: ['Foo.count'],
458
- dimensions: ['Foo.name'],
459
- filters: [],
460
- timezone: 'UTC',
461
- timeDimensions: []
462
- },
463
- data: [
464
- {
465
- 'Foo.name': 'Name 1',
466
- 'Foo.count': null
467
- }
468
- ],
469
- lastRefreshTime: '2020-03-18T13:41:04.436Z',
470
- usedPreAggregations: {},
471
- annotation: {
472
- measures: {
473
- 'Foo.count': {
474
- title: 'Foo Count',
475
- shortTitle: 'Count',
476
- type: 'number'
477
- }
478
- },
479
- dimensions: {
480
- 'Foo.name': {
481
- title: 'Foo Name',
482
- shortTitle: 'Name',
483
- type: 'string'
484
- }
485
- },
486
- segments: {},
487
- timeDimensions: {}
488
- }
489
- });
490
-
491
- expect(resultSet.chartPivot()).toEqual([
492
- {
493
- x: 'Name 1',
494
-
495
- 'Foo.count': 0,
496
- xValues: [
497
- 'Name 1'
498
- ],
499
- }
500
- ]);
501
- });
502
-
503
- test('Empty field', () => {
504
- const resultSet = new ResultSet({
505
- query: {
506
- measures: ['Foo.count'],
507
- dimensions: ['Foo.name'],
508
- filters: [],
509
- timezone: 'UTC',
510
- timeDimensions: []
511
- },
512
- data: [
513
- {
514
- 'Foo.name': 'Name 1',
515
- 'Foo.count': undefined
516
- }
517
- ],
518
- lastRefreshTime: '2020-03-18T13:41:04.436Z',
519
- usedPreAggregations: {},
520
- annotation: {
521
- measures: {
522
- 'Foo.count': {
523
- title: 'Foo Count',
524
- shortTitle: 'Count',
525
- type: 'number'
526
- }
527
- },
528
- dimensions: {
529
- 'Foo.name': {
530
- title: 'Foo Name',
531
- shortTitle: 'Name',
532
- type: 'string'
533
- }
534
- },
535
- segments: {},
536
- timeDimensions: {}
537
- }
538
- });
539
-
540
- expect(resultSet.chartPivot()).toEqual([
541
- {
542
- x: 'Name 1',
543
- 'Foo.count': 0,
544
- xValues: [
545
- 'Name 1'
546
- ],
547
- }
548
- ]);
549
- });
550
-
551
- test('Number field', () => {
552
- const resultSet = new ResultSet({
553
- query: {
554
- measures: ['Foo.count'],
555
- dimensions: ['Foo.name'],
556
- filters: [],
557
- timezone: 'UTC',
558
- timeDimensions: []
559
- },
560
- data: [
561
- {
562
- 'Foo.name': 'Name 1',
563
- 'Foo.count': '10'
564
- }
565
- ],
566
- lastRefreshTime: '2020-03-18T13:41:04.436Z',
567
- usedPreAggregations: {},
568
- annotation: {
569
- measures: {
570
- 'Foo.count': {
571
- title: 'Foo Count',
572
- shortTitle: 'Count',
573
- type: 'number'
574
- }
575
- },
576
- dimensions: {
577
- 'Foo.name': {
578
- title: 'Foo Name',
579
- shortTitle: 'Name',
580
- type: 'string'
581
- }
582
- },
583
- segments: {},
584
- timeDimensions: {}
585
- }
586
- });
587
-
588
- expect(resultSet.chartPivot()).toEqual([
589
- {
590
- x: 'Name 1',
591
-
592
- 'Foo.count': 10,
593
- xValues: [
594
- 'Name 1'
595
- ],
596
- }
597
- ]);
598
- });
599
-
600
- test('time field results', () => {
601
- const resultSet = new ResultSet(
602
- {
603
- query: {
604
- measures: ['Foo.latestRun'],
605
- dimensions: ['Foo.name'],
606
- filters: [],
607
- timezone: 'UTC',
608
- timeDimensions: []
609
- },
610
- data: [
611
- {
612
- 'Foo.name': 'Name 1',
613
- 'Foo.latestRun': '2020-03-11T18:06:09.403Z'
614
- }
615
- ],
616
- lastRefreshTime: '2020-03-18T13:41:04.436Z',
617
- usedPreAggregations: {},
618
- annotation: {
619
- measures: {
620
- 'Foo.latestRun': {
621
- title: 'Foo Latest Run',
622
- shortTitle: 'Latest Run',
623
- type: 'number'
624
- }
625
- },
626
- dimensions: {
627
- 'Foo.name': {
628
- title: 'Foo Name',
629
- shortTitle: 'Name',
630
- type: 'string'
631
- }
632
- },
633
- segments: {},
634
- timeDimensions: {}
635
- }
636
- },
637
- { parseDateMeasures: true }
638
- );
639
-
640
- expect(resultSet.chartPivot()).toEqual([
641
- {
642
- x: 'Name 1',
643
-
644
- 'Foo.latestRun': new Date('2020-03-11T18:06:09.403Z'),
645
- xValues: [
646
- 'Name 1'
647
- ],
648
- }
649
- ]);
650
- });
651
- });
652
-
653
- describe('seriesNames', () => {
654
- test('Multiple series with custom alias', () => {
655
- const resultSet = new ResultSet({
656
- queryType: 'blendingQuery',
657
- results: [
658
- {
659
- query: {
660
- measures: ['Users.count'],
661
- timeDimensions: [
662
- {
663
- dimension: 'Users.ts',
664
- granularity: 'month',
665
- dateRange: ['2020-07-01T00:00:00.000', '2020-11-01T00:00:00.000'],
666
- },
667
- ],
668
- filters: [],
669
- order: [],
670
- dimensions: [],
671
- },
672
- data: [
673
- {
674
- 'Users.ts.month': '2020-08-01T00:00:00.000',
675
- 'Users.ts': '2020-08-01T00:00:00.000',
676
- 'Users.count': 14,
677
- 'time.month': '2020-08-01T00:00:00.000',
678
- },
679
- ],
680
- annotation: {
681
- measures: {
682
- 'Users.count': {
683
- title: 'Users Count',
684
- shortTitle: 'Count',
685
- type: 'number',
686
- drillMembers: ['Users.id', 'Users.name'],
687
- drillMembersGrouped: {
688
- measures: [],
689
- dimensions: ['Users.id', 'Users.name'],
690
- },
691
- },
692
- },
693
- dimensions: {},
694
- segments: {},
695
- timeDimensions: {
696
- 'Users.ts.month': { title: 'Users Ts', shortTitle: 'Ts', type: 'time' },
697
- 'Users.ts': { title: 'Users Ts', shortTitle: 'Ts', type: 'time' },
698
- },
699
- },
700
- },
701
- {
702
- query: {
703
- measures: ['Users.count'],
704
- timeDimensions: [
705
- {
706
- dimension: 'Users.ts',
707
- granularity: 'month',
708
- dateRange: ['2020-07-01T00:00:00.000', '2020-11-01T00:00:00.000'],
709
- },
710
- ],
711
- filters: [
712
- {
713
- member: 'Users.country',
714
- operator: 'equals',
715
- value: ['USA'],
716
- },
717
- ],
718
- order: [],
719
- },
720
- data: [
721
- {
722
- 'Users.ts.month': '2020-08-01T00:00:00.000',
723
- 'Users.ts': '2020-08-01T00:00:00.000',
724
- 'Users.count': 2,
725
- 'time.month': '2020-08-01T00:00:00.000',
726
- },
727
- ],
728
- annotation: {
729
- measures: {
730
- 'Users.count': {
731
- title: 'Users Count',
732
- shortTitle: 'Count',
733
- type: 'number',
734
- drillMembers: [],
735
- drillMembersGrouped: {
736
- measures: [],
737
- dimensions: [],
738
- },
739
- },
740
- },
741
- dimensions: {},
742
- segments: {},
743
- timeDimensions: {
744
- 'Users.ts.month': { title: 'Users Ts', shortTitle: 'Ts', type: 'time' },
745
- 'Users.ts': { title: 'Users Ts', shortTitle: 'Ts', type: 'time' },
746
- },
747
- },
748
- },
749
- ],
750
- pivotQuery: {
751
- measures: ['Users.count', 'Users.count'],
752
- timeDimensions: [
753
- {
754
- dimension: 'time',
755
- granularity: 'month',
756
- dateRange: ['2020-07-01T00:00:00.000', '2020-11-01T00:00:00.000'],
757
- },
758
- ],
759
- dimensions: [],
760
- },
761
- });
762
-
763
- expect(resultSet.seriesNames({ aliasSeries: ['one', 'two'] })).toEqual([
764
- {
765
- key: 'one,Users.count',
766
- title: 'one, Users Count',
767
- shortTitle: 'one, Count',
768
- yValues: ['Users.count'],
769
- },
770
- {
771
- key: 'two,Users.count',
772
- title: 'two, Users Count',
773
- shortTitle: 'two, Count',
774
- yValues: ['Users.count'],
775
- },
776
- ]);
777
- });
778
- test('Multiple series with same measure', () => {
779
- const resultSet = new ResultSet({
780
- queryType: 'blendingQuery',
781
- results: [
782
- {
783
- query: {
784
- measures: ['Users.count'],
785
- timeDimensions: [
786
- {
787
- dimension: 'Users.ts',
788
- granularity: 'month',
789
- dateRange: ['2020-07-01T00:00:00.000', '2020-11-01T00:00:00.000'],
790
- },
791
- ],
792
- filters: [],
793
- order: [],
794
- dimensions: [],
795
- },
796
- data: [
797
- {
798
- 'Users.ts.month': '2020-08-01T00:00:00.000',
799
- 'Users.ts': '2020-08-01T00:00:00.000',
800
- 'Users.count': 14,
801
- 'time.month': '2020-08-01T00:00:00.000',
802
- },
803
- ],
804
- annotation: {
805
- measures: {
806
- 'Users.count': {
807
- title: 'Users Count',
808
- shortTitle: 'Count',
809
- type: 'number',
810
- drillMembers: ['Users.id', 'Users.name'],
811
- drillMembersGrouped: {
812
- measures: [],
813
- dimensions: ['Users.id', 'Users.name'],
814
- },
815
- },
816
- },
817
- dimensions: {},
818
- segments: {},
819
- timeDimensions: {
820
- 'Users.ts.month': { title: 'Users Ts', shortTitle: 'Ts', type: 'time' },
821
- 'Users.ts': { title: 'Users Ts', shortTitle: 'Ts', type: 'time' },
822
- },
823
- },
824
- },
825
- {
826
- query: {
827
- measures: ['Users.count'],
828
- timeDimensions: [
829
- {
830
- dimension: 'Users.ts',
831
- granularity: 'month',
832
- dateRange: ['2020-07-01T00:00:00.000', '2020-11-01T00:00:00.000'],
833
- },
834
- ],
835
- filters: [
836
- {
837
- member: 'Users.country',
838
- operator: 'equals',
839
- value: ['USA'],
840
- },
841
- ],
842
- order: [],
843
- },
844
- data: [
845
- {
846
- 'Users.ts.month': '2020-08-01T00:00:00.000',
847
- 'Users.ts': '2020-08-01T00:00:00.000',
848
- 'Users.count': 2,
849
- 'time.month': '2020-08-01T00:00:00.000',
850
- },
851
- ],
852
- annotation: {
853
- measures: {
854
- 'Users.count': {
855
- title: 'Users Count',
856
- shortTitle: 'Count',
857
- type: 'number',
858
- drillMembers: [],
859
- drillMembersGrouped: {
860
- measures: [],
861
- dimensions: [],
862
- },
863
- },
864
- },
865
- dimensions: {},
866
- segments: {},
867
- timeDimensions: {
868
- 'Users.ts.month': { title: 'Users Ts', shortTitle: 'Ts', type: 'time' },
869
- 'Users.ts': { title: 'Users Ts', shortTitle: 'Ts', type: 'time' },
870
- },
871
- },
872
- },
873
- ],
874
- pivotQuery: {
875
- measures: ['Users.count', 'Users.count'],
876
- timeDimensions: [
877
- {
878
- dimension: 'time',
879
- granularity: 'month',
880
- dateRange: ['2020-07-01T00:00:00.000', '2020-11-01T00:00:00.000'],
881
- },
882
- ],
883
- dimensions: [],
884
- },
885
- });
886
-
887
- expect(resultSet.seriesNames()).toEqual([
888
- {
889
- key: '0,Users.count',
890
- title: '0, Users Count',
891
- shortTitle: '0, Count',
892
- yValues: ['Users.count'],
893
- },
894
- {
895
- key: '1,Users.count',
896
- title: '1, Users Count',
897
- shortTitle: '1, Count',
898
- yValues: ['Users.count'],
899
- },
900
- ]);
901
- });
902
- });
903
-
904
- describe('normalizePivotConfig', () => {
905
- test('fills missing x, y', () => {
906
- const resultSet = new ResultSet({
907
- query: {
908
- dimensions: ['Foo.bar'],
909
- timeDimensions: [
910
- {
911
- granularity: 'day',
912
- dimension: 'Foo.createdAt'
913
- }
914
- ]
915
- }
916
- });
917
-
918
- expect(resultSet.normalizePivotConfig({ y: ['Foo.bar'] })).toEqual({
919
- x: ['Foo.createdAt.day'],
920
- y: ['Foo.bar'],
921
- fillMissingDates: true,
922
- joinDateRange: false
923
- });
924
- });
925
-
926
- test('time dimensions with granularity passed without', () => {
927
- const resultSet = new ResultSet({
928
- query: {
929
- dimensions: ['Foo.bar'],
930
- timeDimensions: [
931
- {
932
- granularity: 'day',
933
- dimension: 'Foo.createdAt'
934
- }
935
- ]
936
- }
937
- });
938
-
939
- expect(
940
- resultSet.normalizePivotConfig({ x: ['Foo.createdAt'], y: ['Foo.bar'] })
941
- ).toEqual({
942
- x: ['Foo.createdAt.day'],
943
- y: ['Foo.bar'],
944
- fillMissingDates: true,
945
- joinDateRange: false
946
- });
947
- });
948
-
949
- test('double time dimensions without granularity', () => {
950
- const resultSet = new ResultSet({
951
- query: {
952
- measures: [],
953
- timeDimensions: [
954
- {
955
- dimension: 'Orders.createdAt',
956
- dateRange: ['2020-01-08T00:00:00.000', '2020-01-14T23:59:59.999']
957
- }
958
- ],
959
- dimensions: ['Orders.createdAt'],
960
- filters: [],
961
- timezone: 'UTC'
962
- }
963
- });
964
-
965
- expect(
966
- resultSet.normalizePivotConfig(resultSet.normalizePivotConfig({}))
967
- ).toEqual({
968
- x: ['Orders.createdAt'],
969
- y: [],
970
- fillMissingDates: true,
971
- joinDateRange: false
972
- });
973
- });
974
-
975
- test('single time dimensions with granularity', () => {
976
- const resultSet = new ResultSet({
977
- query: {
978
- measures: [],
979
- timeDimensions: [
980
- {
981
- dimension: 'Orders.createdAt',
982
- granularity: 'day',
983
- dateRange: ['2020-01-08T00:00:00.000', '2020-01-09T23:59:59.999']
984
- }
985
- ],
986
- filters: [],
987
- timezone: 'UTC'
988
- }
989
- });
990
-
991
- expect(
992
- resultSet.normalizePivotConfig(resultSet.normalizePivotConfig())
993
- ).toEqual({
994
- x: ['Orders.createdAt.day'],
995
- y: [],
996
- fillMissingDates: true,
997
- joinDateRange: false
998
- });
999
- });
1000
-
1001
- test('double time dimensions with granularity', () => {
1002
- const resultSet = new ResultSet({
1003
- query: {
1004
- measures: [],
1005
- timeDimensions: [
1006
- {
1007
- dimension: 'Orders.createdAt',
1008
- granularity: 'day',
1009
- dateRange: ['2020-01-08T00:00:00.000', '2020-01-14T23:59:59.999']
1010
- }
1011
- ],
1012
- dimensions: ['Orders.createdAt'],
1013
- filters: [],
1014
- timezone: 'UTC'
1015
- }
1016
- });
1017
-
1018
- expect(
1019
- resultSet.normalizePivotConfig(resultSet.normalizePivotConfig({}))
1020
- ).toEqual({
1021
- x: ['Orders.createdAt.day', 'Orders.createdAt'],
1022
- y: [],
1023
- fillMissingDates: true,
1024
- joinDateRange: false
1025
- });
1026
- });
1027
- });
1028
-
1029
- describe('pivot', () => {
1030
- test('same dimension and time dimension', () => {
1031
- const resultSet = new ResultSet({
1032
- query: {
1033
- measures: [],
1034
- timeDimensions: [
1035
- {
1036
- dimension: 'Orders.createdAt',
1037
- granularity: 'day',
1038
- dateRange: ['2020-01-08T00:00:00.000', '2020-01-14T23:59:59.999']
1039
- }
1040
- ],
1041
- dimensions: ['Orders.createdAt'],
1042
- filters: [],
1043
- timezone: 'UTC'
1044
- },
1045
- data: [
1046
- {
1047
- 'Orders.createdAt': '2020-01-08T17:04:43.000',
1048
- 'Orders.createdAt.day': '2020-01-08T00:00:00.000'
1049
- },
1050
- {
1051
- 'Orders.createdAt': '2020-01-08T19:28:26.000',
1052
- 'Orders.createdAt.day': '2020-01-08T00:00:00.000'
1053
- },
1054
- {
1055
- 'Orders.createdAt': '2020-01-09T00:13:01.000',
1056
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1057
- },
1058
- {
1059
- 'Orders.createdAt': '2020-01-09T00:25:32.000',
1060
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1061
- },
1062
- {
1063
- 'Orders.createdAt': '2020-01-09T00:43:11.000',
1064
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1065
- },
1066
- {
1067
- 'Orders.createdAt': '2020-01-09T03:04:00.000',
1068
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1069
- },
1070
- {
1071
- 'Orders.createdAt': '2020-01-09T04:30:10.000',
1072
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1073
- },
1074
- {
1075
- 'Orders.createdAt': '2020-01-09T10:25:04.000',
1076
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1077
- },
1078
- {
1079
- 'Orders.createdAt': '2020-01-09T19:47:19.000',
1080
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1081
- },
1082
- {
1083
- 'Orders.createdAt': '2020-01-09T19:48:04.000',
1084
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1085
- },
1086
- {
1087
- 'Orders.createdAt': '2020-01-09T21:46:24.000',
1088
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1089
- },
1090
- {
1091
- 'Orders.createdAt': '2020-01-09T23:49:37.000',
1092
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1093
- },
1094
- {
1095
- 'Orders.createdAt': '2020-01-10T09:07:20.000',
1096
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000'
1097
- },
1098
- {
1099
- 'Orders.createdAt': '2020-01-10T13:50:05.000',
1100
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000'
1101
- },
1102
- {
1103
- 'Orders.createdAt': '2020-01-10T15:30:32.000',
1104
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000'
1105
- },
1106
- {
1107
- 'Orders.createdAt': '2020-01-10T15:32:52.000',
1108
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000'
1109
- },
1110
- {
1111
- 'Orders.createdAt': '2020-01-10T18:55:23.000',
1112
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000'
1113
- },
1114
- {
1115
- 'Orders.createdAt': '2020-01-11T01:13:17.000',
1116
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000'
1117
- },
1118
- {
1119
- 'Orders.createdAt': '2020-01-11T09:17:40.000',
1120
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000'
1121
- },
1122
- {
1123
- 'Orders.createdAt': '2020-01-11T13:23:03.000',
1124
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000'
1125
- },
1126
- {
1127
- 'Orders.createdAt': '2020-01-11T17:28:42.000',
1128
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000'
1129
- },
1130
- {
1131
- 'Orders.createdAt': '2020-01-11T22:34:32.000',
1132
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000'
1133
- },
1134
- {
1135
- 'Orders.createdAt': '2020-01-11T23:03:58.000',
1136
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000'
1137
- },
1138
- {
1139
- 'Orders.createdAt': '2020-01-12T03:46:25.000',
1140
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000'
1141
- },
1142
- {
1143
- 'Orders.createdAt': '2020-01-12T09:57:10.000',
1144
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000'
1145
- },
1146
- {
1147
- 'Orders.createdAt': '2020-01-12T12:28:22.000',
1148
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000'
1149
- },
1150
- {
1151
- 'Orders.createdAt': '2020-01-12T14:34:20.000',
1152
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000'
1153
- },
1154
- {
1155
- 'Orders.createdAt': '2020-01-12T18:45:15.000',
1156
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000'
1157
- },
1158
- {
1159
- 'Orders.createdAt': '2020-01-12T19:38:05.000',
1160
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000'
1161
- },
1162
- {
1163
- 'Orders.createdAt': '2020-01-12T21:43:51.000',
1164
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000'
1165
- },
1166
- {
1167
- 'Orders.createdAt': '2020-01-13T01:42:49.000',
1168
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000'
1169
- },
1170
- {
1171
- 'Orders.createdAt': '2020-01-13T03:19:22.000',
1172
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000'
1173
- },
1174
- {
1175
- 'Orders.createdAt': '2020-01-13T05:20:50.000',
1176
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000'
1177
- },
1178
- {
1179
- 'Orders.createdAt': '2020-01-13T05:46:35.000',
1180
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000'
1181
- },
1182
- {
1183
- 'Orders.createdAt': '2020-01-13T11:24:01.000',
1184
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000'
1185
- },
1186
- {
1187
- 'Orders.createdAt': '2020-01-13T12:13:42.000',
1188
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000'
1189
- },
1190
- {
1191
- 'Orders.createdAt': '2020-01-13T20:21:59.000',
1192
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000'
1193
- },
1194
- {
1195
- 'Orders.createdAt': '2020-01-14T20:16:23.000',
1196
- 'Orders.createdAt.day': '2020-01-14T00:00:00.000'
1197
- }
1198
- ],
1199
- annotation: {
1200
- measures: {},
1201
- dimensions: {
1202
- 'Orders.createdAt': {
1203
- title: 'Orders Created at',
1204
- shortTitle: 'Created at',
1205
- type: 'time'
1206
- }
1207
- },
1208
- segments: {},
1209
- timeDimensions: {
1210
- 'Orders.createdAt.day': {
1211
- title: 'Orders Created at',
1212
- shortTitle: 'Created at',
1213
- type: 'time'
1214
- }
1215
- }
1216
- }
1217
- });
1218
-
1219
- expect(resultSet.tablePivot()).toEqual([
1220
- {
1221
- 'Orders.createdAt.day': '2020-01-08T00:00:00.000',
1222
- 'Orders.createdAt': '2020-01-08T17:04:43.000'
1223
- },
1224
- {
1225
- 'Orders.createdAt.day': '2020-01-08T00:00:00.000',
1226
- 'Orders.createdAt': '2020-01-08T19:28:26.000'
1227
- },
1228
- {
1229
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1230
- 'Orders.createdAt': '2020-01-09T00:13:01.000'
1231
- },
1232
- {
1233
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1234
- 'Orders.createdAt': '2020-01-09T00:25:32.000'
1235
- },
1236
- {
1237
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1238
- 'Orders.createdAt': '2020-01-09T00:43:11.000'
1239
- },
1240
- {
1241
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1242
- 'Orders.createdAt': '2020-01-09T03:04:00.000'
1243
- },
1244
- {
1245
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1246
- 'Orders.createdAt': '2020-01-09T04:30:10.000'
1247
- },
1248
- {
1249
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1250
- 'Orders.createdAt': '2020-01-09T10:25:04.000'
1251
- },
1252
- {
1253
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1254
- 'Orders.createdAt': '2020-01-09T19:47:19.000'
1255
- },
1256
- {
1257
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1258
- 'Orders.createdAt': '2020-01-09T19:48:04.000'
1259
- },
1260
- {
1261
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1262
- 'Orders.createdAt': '2020-01-09T21:46:24.000'
1263
- },
1264
- {
1265
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1266
- 'Orders.createdAt': '2020-01-09T23:49:37.000'
1267
- },
1268
- {
1269
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000',
1270
- 'Orders.createdAt': '2020-01-10T09:07:20.000'
1271
- },
1272
- {
1273
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000',
1274
- 'Orders.createdAt': '2020-01-10T13:50:05.000'
1275
- },
1276
- {
1277
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000',
1278
- 'Orders.createdAt': '2020-01-10T15:30:32.000'
1279
- },
1280
- {
1281
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000',
1282
- 'Orders.createdAt': '2020-01-10T15:32:52.000'
1283
- },
1284
- {
1285
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000',
1286
- 'Orders.createdAt': '2020-01-10T18:55:23.000'
1287
- },
1288
- {
1289
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000',
1290
- 'Orders.createdAt': '2020-01-11T01:13:17.000'
1291
- },
1292
- {
1293
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000',
1294
- 'Orders.createdAt': '2020-01-11T09:17:40.000'
1295
- },
1296
- {
1297
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000',
1298
- 'Orders.createdAt': '2020-01-11T13:23:03.000'
1299
- },
1300
- {
1301
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000',
1302
- 'Orders.createdAt': '2020-01-11T17:28:42.000'
1303
- },
1304
- {
1305
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000',
1306
- 'Orders.createdAt': '2020-01-11T22:34:32.000'
1307
- },
1308
- {
1309
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000',
1310
- 'Orders.createdAt': '2020-01-11T23:03:58.000'
1311
- },
1312
- {
1313
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000',
1314
- 'Orders.createdAt': '2020-01-12T03:46:25.000'
1315
- },
1316
- {
1317
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000',
1318
- 'Orders.createdAt': '2020-01-12T09:57:10.000'
1319
- },
1320
- {
1321
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000',
1322
- 'Orders.createdAt': '2020-01-12T12:28:22.000'
1323
- },
1324
- {
1325
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000',
1326
- 'Orders.createdAt': '2020-01-12T14:34:20.000'
1327
- },
1328
- {
1329
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000',
1330
- 'Orders.createdAt': '2020-01-12T18:45:15.000'
1331
- },
1332
- {
1333
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000',
1334
- 'Orders.createdAt': '2020-01-12T19:38:05.000'
1335
- },
1336
- {
1337
- 'Orders.createdAt.day': '2020-01-12T00:00:00.000',
1338
- 'Orders.createdAt': '2020-01-12T21:43:51.000'
1339
- },
1340
- {
1341
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000',
1342
- 'Orders.createdAt': '2020-01-13T01:42:49.000'
1343
- },
1344
- {
1345
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000',
1346
- 'Orders.createdAt': '2020-01-13T03:19:22.000'
1347
- },
1348
- {
1349
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000',
1350
- 'Orders.createdAt': '2020-01-13T05:20:50.000'
1351
- },
1352
- {
1353
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000',
1354
- 'Orders.createdAt': '2020-01-13T05:46:35.000'
1355
- },
1356
- {
1357
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000',
1358
- 'Orders.createdAt': '2020-01-13T11:24:01.000'
1359
- },
1360
- {
1361
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000',
1362
- 'Orders.createdAt': '2020-01-13T12:13:42.000'
1363
- },
1364
- {
1365
- 'Orders.createdAt.day': '2020-01-13T00:00:00.000',
1366
- 'Orders.createdAt': '2020-01-13T20:21:59.000'
1367
- },
1368
- {
1369
- 'Orders.createdAt.day': '2020-01-14T00:00:00.000',
1370
- 'Orders.createdAt': '2020-01-14T20:16:23.000'
1371
- }
1372
- ]);
1373
- });
1374
-
1375
- test('time dimension backward compatibility', () => {
1376
- const resultSet = new ResultSet({
1377
- query: {
1378
- measures: [],
1379
- timeDimensions: [
1380
- {
1381
- dimension: 'Orders.createdAt',
1382
- granularity: 'day',
1383
- dateRange: ['2020-01-08T00:00:00.000', '2020-01-09T23:59:59.999']
1384
- }
1385
- ],
1386
- filters: [],
1387
- timezone: 'UTC'
1388
- },
1389
- data: [
1390
- {
1391
- 'Orders.createdAt': '2020-01-08T00:00:00.000'
1392
- },
1393
- {
1394
- 'Orders.createdAt': '2020-01-09T00:00:00.000'
1395
- }
1396
- ],
1397
- annotation: {
1398
- measures: {},
1399
- dimensions: {},
1400
- segments: {},
1401
- timeDimensions: {
1402
- 'Orders.createdAt': {
1403
- title: 'Orders Created at',
1404
- shortTitle: 'Created at',
1405
- type: 'time'
1406
- }
1407
- }
1408
- }
1409
- });
1410
-
1411
- expect(resultSet.tablePivot()).toEqual([
1412
- {
1413
- 'Orders.createdAt.day': '2020-01-08T00:00:00.000'
1414
- },
1415
- {
1416
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000'
1417
- }
1418
- ]);
1419
- });
1420
-
1421
- test('fill missing dates with custom value', () => {
1422
- const resultSet = new ResultSet({
1423
- query: {
1424
- measures: ['Orders.total'],
1425
- timeDimensions: [
1426
- {
1427
- dimension: 'Orders.createdAt',
1428
- granularity: 'day',
1429
- dateRange: ['2020-01-08T00:00:00.000', '2020-01-11T23:59:59.999']
1430
- }
1431
- ],
1432
- filters: [],
1433
- timezone: 'UTC'
1434
- },
1435
- data: [
1436
- {
1437
- 'Orders.createdAt': '2020-01-08T00:00:00.000',
1438
- 'Orders.total': 1
1439
- },
1440
- {
1441
- 'Orders.createdAt': '2020-01-10T00:00:00.000',
1442
- 'Orders.total': 10
1443
- }
1444
- ],
1445
- annotation: {
1446
- measures: {},
1447
- dimensions: {},
1448
- segments: {},
1449
- timeDimensions: {
1450
- 'Orders.createdAt': {
1451
- title: 'Orders Created at',
1452
- shortTitle: 'Created at',
1453
- type: 'time'
1454
- }
1455
- }
1456
- }
1457
- });
1458
-
1459
- expect(resultSet.tablePivot({
1460
- 'fillWithValue': 5
1461
- })).toEqual([
1462
- {
1463
- 'Orders.createdAt.day': '2020-01-08T00:00:00.000',
1464
- 'Orders.total': 1
1465
- },
1466
- {
1467
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1468
- 'Orders.total': 5
1469
- },
1470
- {
1471
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000',
1472
- 'Orders.total': 10
1473
- },
1474
- {
1475
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000',
1476
- 'Orders.total': 5
1477
- }
1478
- ]);
1479
- });
1480
-
1481
- test('fill missing dates with custom string', () => {
1482
- const resultSet = new ResultSet({
1483
- query: {
1484
- measures: ['Orders.total'],
1485
- timeDimensions: [
1486
- {
1487
- dimension: 'Orders.createdAt',
1488
- granularity: 'day',
1489
- dateRange: ['2020-01-08T00:00:00.000', '2020-01-11T23:59:59.999']
1490
- }
1491
- ],
1492
- filters: [],
1493
- timezone: 'UTC'
1494
- },
1495
- data: [
1496
- {
1497
- 'Orders.createdAt': '2020-01-08T00:00:00.000',
1498
- 'Orders.total': 1
1499
- },
1500
- {
1501
- 'Orders.createdAt': '2020-01-10T00:00:00.000',
1502
- 'Orders.total': 10
1503
- }
1504
- ],
1505
- annotation: {
1506
- measures: {},
1507
- dimensions: {},
1508
- segments: {},
1509
- timeDimensions: {
1510
- 'Orders.createdAt': {
1511
- title: 'Orders Created at',
1512
- shortTitle: 'Created at',
1513
- type: 'time'
1514
- }
1515
- }
1516
- }
1517
- });
1518
-
1519
- expect(resultSet.tablePivot({
1520
- 'fillWithValue': 'N/A'
1521
- })).toEqual([
1522
- {
1523
- 'Orders.createdAt.day': '2020-01-08T00:00:00.000',
1524
- 'Orders.total': 1
1525
- },
1526
- {
1527
- 'Orders.createdAt.day': '2020-01-09T00:00:00.000',
1528
- 'Orders.total': "N/A"
1529
- },
1530
- {
1531
- 'Orders.createdAt.day': '2020-01-10T00:00:00.000',
1532
- 'Orders.total': 10
1533
- },
1534
- {
1535
- 'Orders.createdAt.day': '2020-01-11T00:00:00.000',
1536
- 'Orders.total': "N/A"
1537
- }
1538
- ]);
1539
- });
1540
-
1541
- test('same dimension and time dimension without granularity', () => {
1542
- const resultSet = new ResultSet({
1543
- query: {
1544
- measures: [],
1545
- timeDimensions: [
1546
- {
1547
- dimension: 'Orders.createdAt',
1548
- dateRange: ['2020-01-08T00:00:00.000', '2020-01-14T23:59:59.999']
1549
- }
1550
- ],
1551
- dimensions: ['Orders.createdAt'],
1552
- filters: [],
1553
- timezone: 'UTC'
1554
- },
1555
- data: [
1556
- { 'Orders.createdAt': '2020-01-08T17:04:43.000' },
1557
- { 'Orders.createdAt': '2020-01-08T19:28:26.000' },
1558
- { 'Orders.createdAt': '2020-01-09T00:13:01.000' },
1559
- { 'Orders.createdAt': '2020-01-09T00:25:32.000' },
1560
- { 'Orders.createdAt': '2020-01-09T00:43:11.000' },
1561
- { 'Orders.createdAt': '2020-01-09T03:04:00.000' },
1562
- { 'Orders.createdAt': '2020-01-09T04:30:10.000' },
1563
- { 'Orders.createdAt': '2020-01-09T10:25:04.000' },
1564
- { 'Orders.createdAt': '2020-01-09T19:47:19.000' },
1565
- { 'Orders.createdAt': '2020-01-09T19:48:04.000' },
1566
- { 'Orders.createdAt': '2020-01-09T21:46:24.000' },
1567
- { 'Orders.createdAt': '2020-01-09T23:49:37.000' },
1568
- { 'Orders.createdAt': '2020-01-10T09:07:20.000' },
1569
- { 'Orders.createdAt': '2020-01-10T13:50:05.000' }
1570
- ],
1571
- annotation: {
1572
- measures: {},
1573
- dimensions: {
1574
- 'Orders.createdAt': {
1575
- title: 'Orders Created at',
1576
- shortTitle: 'Created at',
1577
- type: 'time'
1578
- }
1579
- },
1580
- segments: {},
1581
- timeDimensions: {}
1582
- }
1583
- });
1584
-
1585
- expect(resultSet.tablePivot()).toEqual([
1586
- { 'Orders.createdAt': '2020-01-08T17:04:43.000' },
1587
- { 'Orders.createdAt': '2020-01-08T19:28:26.000' },
1588
- { 'Orders.createdAt': '2020-01-09T00:13:01.000' },
1589
- { 'Orders.createdAt': '2020-01-09T00:25:32.000' },
1590
- { 'Orders.createdAt': '2020-01-09T00:43:11.000' },
1591
- { 'Orders.createdAt': '2020-01-09T03:04:00.000' },
1592
- { 'Orders.createdAt': '2020-01-09T04:30:10.000' },
1593
- { 'Orders.createdAt': '2020-01-09T10:25:04.000' },
1594
- { 'Orders.createdAt': '2020-01-09T19:47:19.000' },
1595
- { 'Orders.createdAt': '2020-01-09T19:48:04.000' },
1596
- { 'Orders.createdAt': '2020-01-09T21:46:24.000' },
1597
- { 'Orders.createdAt': '2020-01-09T23:49:37.000' },
1598
- { 'Orders.createdAt': '2020-01-10T09:07:20.000' },
1599
- { 'Orders.createdAt': '2020-01-10T13:50:05.000' }
1600
- ]);
1601
- });
1602
-
1603
- test('order is preserved', () => {
1604
- const resultSet = new ResultSet({
1605
- query: {
1606
- measures: ['User.total'],
1607
- dimensions: ['User.visits'],
1608
- filters: [],
1609
- timezone: 'UTC'
1610
- },
1611
- data: [
1612
- {
1613
- 'User.total': 1,
1614
- 'User.visits': 1
1615
- },
1616
- {
1617
- 'User.total': 15,
1618
- 'User.visits': 0.9
1619
- },
1620
- {
1621
- 'User.total': 20,
1622
- 'User.visits': 0.7
1623
- },
1624
- {
1625
- 'User.total': 10,
1626
- 'User.visits': 0
1627
- },
1628
- ],
1629
- annotation: {
1630
- measures: {
1631
- 'User.total': {}
1632
- },
1633
- dimensions: {
1634
- 'User.visits': {
1635
- title: 'User Visits',
1636
- shortTitle: 'Visits',
1637
- type: 'number'
1638
- }
1639
- },
1640
- segments: {},
1641
- timeDimensions: {}
1642
- }
1643
- });
1644
-
1645
- expect(resultSet.pivot()).toEqual(
1646
- [
1647
- { xValues: [1], yValuesArray: [[['User.total'], 1]] },
1648
- { xValues: [0.9], yValuesArray: [[['User.total'], 15]] },
1649
- { xValues: [0.7], yValuesArray: [[['User.total'], 20]] },
1650
- { xValues: [0], yValuesArray: [[['User.total'], 10]] },
1651
- ]
1652
- );
1653
- });
1654
- });
1655
- });