@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,402 +0,0 @@
1
- import 'jest';
2
- import ResultSet from '../ResultSet';
3
-
4
- jest.mock('moment-range', () => {
5
- const Moment = jest.requireActual('moment');
6
- const MomentRange = jest.requireActual('moment-range');
7
- const moment = MomentRange.extendMoment(Moment);
8
- return {
9
- extendMoment: () => moment,
10
- };
11
- });
12
-
13
- const loadResponse = (query = {}) => ({
14
- queryType: 'regularQuery',
15
- results: [
16
- {
17
- query: {
18
- measures: ['Orders.count'],
19
- timeDimensions: [
20
- {
21
- dimension: 'Orders.ts',
22
- granularity: 'day',
23
- dateRange: ['2020-08-01T00:00:00.000', '2020-08-07T23:59:59.999'],
24
- },
25
- ],
26
- filters: [],
27
- timezone: 'UTC',
28
- order: [],
29
- dimensions: [],
30
- ...query,
31
- },
32
- data: [
33
- {
34
- 'Orders.ts.day': '2020-08-01T00:00:00.000',
35
- 'Orders.ts': '2020-08-01T00:00:00.000',
36
- 'Orders.count': 1,
37
- },
38
- {
39
- 'Orders.ts.day': '2020-08-02T00:00:00.000',
40
- 'Orders.ts': '2020-08-02T00:00:00.000',
41
- 'Orders.count': 2,
42
- },
43
- ],
44
- annotation: {
45
- measures: {
46
- 'Orders.count': {
47
- title: 'Orders Count',
48
- shortTitle: 'Count',
49
- type: 'number',
50
- drillMembers: ['Orders.id', 'Orders.title'],
51
- drillMembersGrouped: {
52
- measures: [],
53
- dimensions: ['Orders.id', 'Orders.title'],
54
- },
55
- },
56
- },
57
- dimensions: {},
58
- segments: {},
59
- timeDimensions: {
60
- 'Orders.ts.day': {
61
- title: 'Orders Ts',
62
- shortTitle: 'Ts',
63
- type: 'time',
64
- },
65
- 'Orders.ts': { title: 'Orders Ts', shortTitle: 'Ts', type: 'time' },
66
- },
67
- },
68
- },
69
- ],
70
- pivotQuery: {
71
- measures: ['Orders.count'],
72
- timeDimensions: [
73
- {
74
- dimension: 'Orders.ts',
75
- granularity: 'day',
76
- dateRange: ['2020-08-01T00:00:00.000', '2020-08-07T23:59:59.999'],
77
- },
78
- ],
79
- filters: [],
80
- timezone: 'UTC',
81
- order: [],
82
- dimensions: [],
83
- ...query,
84
- },
85
- });
86
-
87
- const loadResponse2 = {
88
- queryType: 'regularQuery',
89
- results: [
90
- {
91
- query: {
92
- measures: ['Orders.count'],
93
- timeDimensions: [
94
- {
95
- dimension: 'Orders.createdAt',
96
- granularity: 'week',
97
- dateRange: ['2023-05-10T00:00:00.000', '2023-05-14T23:59:59.999'],
98
- },
99
- ],
100
- limit: 10000,
101
- timezone: 'UTC',
102
- order: [],
103
- filters: [],
104
- dimensions: [],
105
- rowLimit: 10000,
106
- queryType: 'regularQuery',
107
- },
108
- data: [
109
- {
110
- 'Orders.createdAt.week': '2023-05-08T00:00:00.000',
111
- 'Orders.createdAt': '2023-05-08T00:00:00.000',
112
- 'Orders.count': '21',
113
- },
114
- ],
115
- lastRefreshTime: '2023-05-22T14:46:45.000Z',
116
- usedPreAggregations: {
117
- 'prod_pre_aggregations.orders_main': {
118
- targetTableName:
119
- 'prod_pre_aggregations.orders_main20230508_instgodu_ehgypjtt_1i6n02l',
120
- refreshKeyValues: [[]],
121
- lastUpdatedAt: 1684766805000,
122
- },
123
- },
124
- transformedQuery: {
125
- sortedDimensions: [],
126
- sortedTimeDimensions: [['Orders.createdAt', 'day']],
127
- timeDimensions: [['Orders.createdAt', 'week']],
128
- measures: ['Orders.count'],
129
- leafMeasureAdditive: true,
130
- leafMeasures: ['Orders.count'],
131
- measureToLeafMeasures: {
132
- 'Orders.count': [
133
- { measure: 'Orders.count', additive: true, type: 'count' },
134
- ],
135
- },
136
- hasNoTimeDimensionsWithoutGranularity: true,
137
- allFiltersWithinSelectedDimensions: true,
138
- isAdditive: true,
139
- granularityHierarchies: {
140
- year: [
141
- 'year',
142
- 'quarter',
143
- 'month',
144
- 'month',
145
- 'day',
146
- 'hour',
147
- 'minute',
148
- 'second',
149
- ],
150
- quarter: ['quarter', 'month', 'day', 'hour', 'minute', 'second'],
151
- month: ['month', 'day', 'hour', 'minute', 'second'],
152
- week: ['week', 'day', 'hour', 'minute', 'second'],
153
- day: ['day', 'hour', 'minute', 'second'],
154
- hour: ['hour', 'minute', 'second'],
155
- minute: ['minute', 'second'],
156
- second: ['second'],
157
- },
158
- hasMultipliedMeasures: false,
159
- hasCumulativeMeasures: false,
160
- windowGranularity: null,
161
- filterDimensionsSingleValueEqual: {},
162
- ownedDimensions: [],
163
- ownedTimeDimensionsWithRollupGranularity: [['Orders.createdAt', 'day']],
164
- ownedTimeDimensionsAsIs: [['Orders.createdAt', 'week']],
165
- },
166
- requestId: 'x',
167
- annotation: {
168
- measures: {
169
- 'Orders.count': {
170
- title: 'Orders Count',
171
- shortTitle: 'Count',
172
- type: 'number',
173
- drillMembers: ['Orders.id', 'Orders.createdAt'],
174
- drillMembersGrouped: {
175
- measures: [],
176
- dimensions: ['Orders.id', 'Orders.createdAt'],
177
- },
178
- },
179
- },
180
- dimensions: {},
181
- segments: {},
182
- timeDimensions: {
183
- 'Orders.createdAt.week': {
184
- title: 'Orders Created at',
185
- shortTitle: 'Created at',
186
- type: 'time',
187
- },
188
- 'Orders.createdAt': {
189
- title: 'Orders Created at',
190
- shortTitle: 'Created at',
191
- type: 'time',
192
- },
193
- },
194
- },
195
- dataSource: 'default',
196
- dbType: 'postgres',
197
- extDbType: 'cubestore',
198
- },
199
- ],
200
- pivotQuery: {
201
- measures: ['Orders.count'],
202
- timeDimensions: [
203
- {
204
- dimension: 'Orders.createdAt',
205
- granularity: 'week',
206
- dateRange: ['2023-05-10T00:00:00.000', '2023-05-14T23:59:59.999'],
207
- },
208
- ],
209
- limit: 10000,
210
- timezone: 'UTC',
211
- order: [],
212
- filters: [],
213
- dimensions: [],
214
- rowLimit: 10000,
215
- queryType: 'regularQuery',
216
- },
217
- slowQuery: false,
218
- };
219
-
220
- describe('drill down query', () => {
221
- const resultSet1 = new ResultSet(loadResponse());
222
- const resultSet2 = new ResultSet(
223
- loadResponse({
224
- timezone: 'America/Los_Angeles',
225
- })
226
- );
227
- const resultSet3 = new ResultSet(
228
- loadResponse({
229
- filters: [
230
- {
231
- member: 'Users.country',
232
- operator: 'equals',
233
- values: ['Los Angeles'],
234
- },
235
- ],
236
- })
237
- );
238
- const resultSet4 = new ResultSet(
239
- loadResponse({
240
- dimensions: ['Statuses.potential'],
241
- timeDimensions: [],
242
- })
243
- );
244
- const resultSet5 = new ResultSet(
245
- loadResponse({
246
- timeDimensions: [
247
- {
248
- dimension: 'Orders.ts',
249
- granularity: 'week',
250
- }
251
- ]
252
- })
253
- );
254
-
255
- it('handles a query with a time dimension', () => {
256
- expect(
257
- resultSet1.drillDown({
258
- xValues: ['2020-08-01T00:00:00.000'],
259
- })
260
- ).toEqual({
261
- measures: [],
262
- segments: [],
263
- dimensions: ['Orders.id', 'Orders.title'],
264
- filters: [
265
- {
266
- member: 'Orders.count',
267
- operator: 'measureFilter',
268
- },
269
- ],
270
- timeDimensions: [
271
- {
272
- dimension: 'Orders.ts',
273
- dateRange: ['2020-08-01T00:00:00.000', '2020-08-01T23:59:59.999'],
274
- },
275
- ],
276
- timezone: 'UTC',
277
- });
278
- });
279
-
280
- it('respects the time zone', () => {
281
- expect(
282
- resultSet2.drillDown({
283
- xValues: ['2020-08-01T00:00:00.000'],
284
- })
285
- ).toEqual({
286
- measures: [],
287
- segments: [],
288
- dimensions: ['Orders.id', 'Orders.title'],
289
- filters: [
290
- {
291
- member: 'Orders.count',
292
- operator: 'measureFilter',
293
- },
294
- ],
295
- timeDimensions: [
296
- {
297
- dimension: 'Orders.ts',
298
- dateRange: ['2020-08-01T00:00:00.000', '2020-08-01T23:59:59.999'],
299
- },
300
- ],
301
- timezone: 'America/Los_Angeles',
302
- });
303
- });
304
-
305
- it('propagates parent filters', () => {
306
- expect(
307
- resultSet3.drillDown({
308
- xValues: ['2020-08-01T00:00:00.000'],
309
- })
310
- ).toEqual({
311
- measures: [],
312
- segments: [],
313
- dimensions: ['Orders.id', 'Orders.title'],
314
- filters: [
315
- {
316
- member: 'Orders.count',
317
- operator: 'measureFilter',
318
- },
319
- {
320
- member: 'Users.country',
321
- operator: 'equals',
322
- values: ['Los Angeles'],
323
- },
324
- ],
325
- timeDimensions: [
326
- {
327
- dimension: 'Orders.ts',
328
- dateRange: ['2020-08-01T00:00:00.000', '2020-08-01T23:59:59.999'],
329
- },
330
- ],
331
- timezone: 'UTC',
332
- });
333
- });
334
-
335
- it('handles null values', () => {
336
- expect(resultSet4.drillDown({ xvalues: [null] })).toEqual({
337
- measures: [],
338
- segments: [],
339
- dimensions: ['Orders.id', 'Orders.title'],
340
- filters: [
341
- {
342
- member: 'Orders.count',
343
- operator: 'measureFilter',
344
- },
345
- {
346
- member: 'Statuses.potential',
347
- operator: 'notSet',
348
- },
349
- ],
350
- timeDimensions: [],
351
- timezone: 'UTC',
352
- });
353
- });
354
-
355
- it('respects the parent time dimension date range', () => {
356
- const resultSet = new ResultSet(loadResponse2);
357
-
358
- expect(
359
- resultSet.drillDown({ xValues: ['2023-05-08T00:00:00.000'] })
360
- ).toEqual({
361
- measures: [],
362
- segments: [],
363
- dimensions: ['Orders.id', 'Orders.createdAt'],
364
- filters: [
365
- {
366
- operator: 'measureFilter',
367
- member: 'Orders.count',
368
- },
369
- ],
370
- timeDimensions: [
371
- {
372
- dimension: 'Orders.createdAt',
373
- dateRange: ['2023-05-10T00:00:00.000', '2023-05-14T23:59:59.999'],
374
- },
375
- ],
376
- timezone: 'UTC'
377
- });
378
- });
379
-
380
- it('snap date range to granularity if the date range is not defined in the time dimension', () => {
381
- expect(
382
- resultSet5.drillDown({ xValues: ['2020-08-01T00:00:00.000'] })
383
- ).toEqual({
384
- measures: [],
385
- segments: [],
386
- dimensions: ['Orders.id', 'Orders.title'],
387
- filters: [
388
- {
389
- member: 'Orders.count',
390
- operator: 'measureFilter',
391
- },
392
- ],
393
- timeDimensions: [
394
- {
395
- dimension: 'Orders.ts',
396
- dateRange: ['2020-07-27T00:00:00.000', '2020-08-02T23:59:59.999'],
397
- },
398
- ],
399
- timezone: 'UTC',
400
- });
401
- });
402
- });
@@ -1,261 +0,0 @@
1
- {
2
- "loadResponse": {
3
- "queryType": "blendingQuery",
4
- "results": [
5
- {
6
- "query": {
7
- "measures": ["Orders.count"],
8
- "timeDimensions": [
9
- {
10
- "dimension": "Orders.ts",
11
- "granularity": "day",
12
- "dateRange": ["2020-08-01T00:00:00.000", "2020-08-07T23:59:59.999"]
13
- }
14
- ],
15
- "filters": [],
16
- "timezone": "UTC",
17
- "order": [],
18
- "dimensions": []
19
- },
20
- "data": [
21
- {
22
- "Orders.ts.day": "2020-08-01T00:00:00.000",
23
- "Orders.ts": "2020-08-01T00:00:00.000",
24
- "Orders.count": 1,
25
- "time.day": "2020-08-01T00:00:00.000"
26
- },
27
- {
28
- "Orders.ts.day": "2020-08-02T00:00:00.000",
29
- "Orders.ts": "2020-08-02T00:00:00.000",
30
- "Orders.count": 2,
31
- "time.day": "2020-08-02T00:00:00.000"
32
- }
33
- ],
34
- "annotation": {
35
- "measures": {
36
- "Orders.count": {
37
- "title": "Orders Count",
38
- "shortTitle": "Count",
39
- "type": "number",
40
- "drillMembers": ["Orders.id", "Orders.title"],
41
- "drillMembersGrouped": {
42
- "measures": [],
43
- "dimensions": ["Orders.id", "Orders.title"]
44
- }
45
- }
46
- },
47
- "dimensions": {},
48
- "segments": {},
49
- "timeDimensions": {
50
- "Orders.ts.day": { "title": "Orders Ts", "shortTitle": "Ts", "type": "time" },
51
- "Orders.ts": { "title": "Orders Ts", "shortTitle": "Ts", "type": "time" }
52
- }
53
- }
54
- },
55
- {
56
- "query": {
57
- "measures": ["Users.count"],
58
- "timeDimensions": [
59
- {
60
- "dimension": "Users.ts",
61
- "granularity": "day",
62
- "dateRange": ["2020-08-01T00:00:00.000", "2020-08-07T23:59:59.999"]
63
- }
64
- ],
65
- "filters": [],
66
- "timezone": "UTC",
67
- "order": [],
68
- "dimensions": ["Users.country"]
69
- },
70
- "data": [
71
- {
72
- "Users.ts.day": "2020-08-01T00:00:00.000",
73
- "Users.ts": "2020-08-01T00:00:00.000",
74
- "Users.count": 20,
75
- "Users.country": "Australia",
76
- "time.day": "2020-08-01T00:00:00.000"
77
- },
78
- {
79
- "Users.ts.day": "2020-08-05T00:00:00.000",
80
- "Users.ts": "2020-08-05T00:00:00.000",
81
- "Users.count": 34,
82
- "Users.country": "Spain",
83
- "time.day": "2020-08-05T00:00:00.000"
84
- },
85
- {
86
- "Users.ts.day": "2020-08-05T00:00:00.000",
87
- "Users.ts": "2020-08-05T00:00:00.000",
88
- "Users.count": 18,
89
- "Users.country": "Italy",
90
- "time.day": "2020-08-05T00:00:00.000"
91
- }
92
- ],
93
- "annotation": {
94
- "measures": {
95
- "Users.count": {
96
- "title": "Users Count",
97
- "shortTitle": "Count",
98
- "type": "number",
99
- "drillMembers": [],
100
- "drillMembersGrouped": {
101
- "measures": [],
102
- "dimensions": []
103
- }
104
- }
105
- },
106
- "dimensions": {
107
- "Users.country": {
108
- "title": "Users Country",
109
- "shortTitle": "Country",
110
- "type": "string"
111
- }
112
- },
113
- "segments": {},
114
- "timeDimensions": {
115
- "Users.ts.day": { "title": "Orders Ts", "shortTitle": "Ts", "type": "time" },
116
- "Users.ts": { "title": "Orders Ts", "shortTitle": "Ts", "type": "time" }
117
- }
118
- }
119
- }
120
- ],
121
- "pivotQuery": {
122
- "measures": ["Orders.count", "Users.count"],
123
- "timeDimensions": [
124
- {
125
- "dimension": "time",
126
- "granularity": "day",
127
- "dateRange": ["2020-08-01T00:00:00.000", "2020-08-07T23:59:59.999"]
128
- }
129
- ],
130
- "dimensions": ["Users.country"]
131
- }
132
- },
133
- "loadResponseWithoutDateRange": {
134
- "queryType": "blendingQuery",
135
- "results": [
136
- {
137
- "query": {
138
- "measures": ["Orders.count"],
139
- "timeDimensions": [
140
- {
141
- "dimension": "Orders.ts",
142
- "granularity": "day"
143
- }
144
- ],
145
- "filters": [],
146
- "timezone": "UTC",
147
- "order": [],
148
- "dimensions": []
149
- },
150
- "data": [
151
- {
152
- "Orders.ts.day": "2020-08-01T00:00:00.000",
153
- "Orders.ts": "2020-08-01T00:00:00.000",
154
- "Orders.count": 1,
155
- "time.day": "2020-08-01T00:00:00.000"
156
- },
157
- {
158
- "Orders.ts.day": "2020-08-02T00:00:00.000",
159
- "Orders.ts": "2020-08-02T00:00:00.000",
160
- "Orders.count": 2,
161
- "time.day": "2020-08-02T00:00:00.000"
162
- }
163
- ],
164
- "annotation": {
165
- "measures": {
166
- "Orders.count": {
167
- "title": "Orders Count",
168
- "shortTitle": "Count",
169
- "type": "number",
170
- "drillMembers": ["Orders.id", "Orders.title"],
171
- "drillMembersGrouped": {
172
- "measures": [],
173
- "dimensions": ["Orders.id", "Orders.title"]
174
- }
175
- }
176
- },
177
- "dimensions": {},
178
- "segments": {},
179
- "timeDimensions": {
180
- "Orders.ts.day": { "title": "Orders Ts", "shortTitle": "Ts", "type": "time" },
181
- "Orders.ts": { "title": "Orders Ts", "shortTitle": "Ts", "type": "time" }
182
- }
183
- }
184
- },
185
- {
186
- "query": {
187
- "measures": ["Users.count"],
188
- "timeDimensions": [
189
- {
190
- "dimension": "Users.ts",
191
- "granularity": "day"
192
- }
193
- ],
194
- "filters": [],
195
- "timezone": "UTC",
196
- "order": [],
197
- "dimensions": ["Users.country"]
198
- },
199
- "data": [
200
- {
201
- "Users.ts.day": "2020-08-01T00:00:00.000",
202
- "Users.ts": "2020-08-01T00:00:00.000",
203
- "Users.count": 20,
204
- "Users.country": "Australia",
205
- "time.day": "2020-08-01T00:00:00.000"
206
- },
207
- {
208
- "Users.ts.day": "2020-08-05T00:00:00.000",
209
- "Users.ts": "2020-08-05T00:00:00.000",
210
- "Users.count": 34,
211
- "Users.country": "Spain",
212
- "time.day": "2020-08-05T00:00:00.000"
213
- },
214
- {
215
- "Users.ts.day": "2020-08-05T00:00:00.000",
216
- "Users.ts": "2020-08-05T00:00:00.000",
217
- "Users.count": 18,
218
- "Users.country": "Italy",
219
- "time.day": "2020-08-05T00:00:00.000"
220
- }
221
- ],
222
- "annotation": {
223
- "measures": {
224
- "Users.count": {
225
- "title": "Users Count",
226
- "shortTitle": "Count",
227
- "type": "number",
228
- "drillMembers": [],
229
- "drillMembersGrouped": {
230
- "measures": [],
231
- "dimensions": []
232
- }
233
- }
234
- },
235
- "dimensions": {
236
- "Users.country": {
237
- "title": "Users Country",
238
- "shortTitle": "Country",
239
- "type": "string"
240
- }
241
- },
242
- "segments": {},
243
- "timeDimensions": {
244
- "Users.ts.day": { "title": "Orders Ts", "shortTitle": "Ts", "type": "time" },
245
- "Users.ts": { "title": "Orders Ts", "shortTitle": "Ts", "type": "time" }
246
- }
247
- }
248
- }
249
- ],
250
- "pivotQuery": {
251
- "measures": ["Orders.count", "Users.count"],
252
- "timeDimensions": [
253
- {
254
- "dimension": "time",
255
- "granularity": "day"
256
- }
257
- ],
258
- "dimensions": ["Users.country"]
259
- }
260
- }
261
- }