@cubejs-client/core 0.33.0 → 0.33.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cubejs-client-core.esm.js +13 -5
- package/dist/cubejs-client-core.esm.js.map +1 -1
- package/dist/cubejs-client-core.js +16 -2
- package/dist/cubejs-client-core.js.map +1 -1
- package/dist/cubejs-client-core.umd.js +16 -2
- package/dist/cubejs-client-core.umd.js.map +1 -1
- package/package.json +2 -2
- package/src/ResultSet.js +18 -6
- package/src/index.js +1 -1
- package/src/tests/drill-down.test.js +181 -26
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cubejs-client/core",
|
|
3
|
-
"version": "0.33.
|
|
3
|
+
"version": "0.33.44",
|
|
4
4
|
"engines": {},
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"eslint-plugin-node": "^5.2.1",
|
|
46
46
|
"jest": "^26.0.1"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "2488618ee25a1b5e11faac9c754b021f2917f3b0"
|
|
49
49
|
}
|
package/src/ResultSet.js
CHANGED
|
@@ -127,6 +127,7 @@ class ResultSet {
|
|
|
127
127
|
throw new Error('Data blending drillDown query is not currently supported');
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
+
const { query } = this.loadResponses[0];
|
|
130
131
|
const { xValues = [], yValues = [] } = drillDownLocator;
|
|
131
132
|
const normalizedPivotConfig = this.normalizePivotConfig(pivotConfig);
|
|
132
133
|
|
|
@@ -161,13 +162,25 @@ class ResultSet {
|
|
|
161
162
|
|
|
162
163
|
if (granularity !== undefined) {
|
|
163
164
|
const range = dayRange(value, value).snapTo(granularity);
|
|
165
|
+
const originalTimeDimension = query.timeDimensions.find((td) => td.dimension);
|
|
166
|
+
|
|
167
|
+
let dateRange = [
|
|
168
|
+
range.start,
|
|
169
|
+
range.end
|
|
170
|
+
];
|
|
171
|
+
|
|
172
|
+
if (originalTimeDimension) {
|
|
173
|
+
const [originalStart, originalEnd] = originalTimeDimension.dateRange;
|
|
174
|
+
|
|
175
|
+
dateRange = [
|
|
176
|
+
dayjs(originalStart) > range.start ? dayjs(originalStart) : range.start,
|
|
177
|
+
dayjs(originalEnd) < range.end ? dayjs(originalEnd) : range.end,
|
|
178
|
+
];
|
|
179
|
+
}
|
|
164
180
|
|
|
165
181
|
timeDimensions.push({
|
|
166
182
|
dimension: [cubeName, dimension].join('.'),
|
|
167
|
-
dateRange:
|
|
168
|
-
range.start,
|
|
169
|
-
range.end
|
|
170
|
-
].map((dt) => dt.format('YYYY-MM-DDTHH:mm:ss.SSS')),
|
|
183
|
+
dateRange: dateRange.map((dt) => dt.format('YYYY-MM-DDTHH:mm:ss.SSS')),
|
|
171
184
|
});
|
|
172
185
|
} else if (value == null) {
|
|
173
186
|
filters.push({
|
|
@@ -182,8 +195,7 @@ class ResultSet {
|
|
|
182
195
|
});
|
|
183
196
|
}
|
|
184
197
|
});
|
|
185
|
-
|
|
186
|
-
const { query } = this.loadResponses[0];
|
|
198
|
+
|
|
187
199
|
if (
|
|
188
200
|
timeDimensions.length === 0 &&
|
|
189
201
|
query.timeDimensions.length > 0 &&
|
package/src/index.js
CHANGED
|
@@ -348,5 +348,5 @@ class CubejsApi {
|
|
|
348
348
|
|
|
349
349
|
export default (apiToken, options) => new CubejsApi(apiToken, options);
|
|
350
350
|
|
|
351
|
-
export { CubejsApi, HttpTransport, ResultSet, RequestError };
|
|
351
|
+
export { CubejsApi, HttpTransport, ResultSet, RequestError, Meta };
|
|
352
352
|
export * from './utils';
|
|
@@ -57,7 +57,11 @@ const loadResponse = (query = {}) => ({
|
|
|
57
57
|
dimensions: {},
|
|
58
58
|
segments: {},
|
|
59
59
|
timeDimensions: {
|
|
60
|
-
'Orders.ts.day': {
|
|
60
|
+
'Orders.ts.day': {
|
|
61
|
+
title: 'Orders Ts',
|
|
62
|
+
shortTitle: 'Ts',
|
|
63
|
+
type: 'time',
|
|
64
|
+
},
|
|
61
65
|
'Orders.ts': { title: 'Orders Ts', shortTitle: 'Ts', type: 'time' },
|
|
62
66
|
},
|
|
63
67
|
},
|
|
@@ -80,6 +84,139 @@ const loadResponse = (query = {}) => ({
|
|
|
80
84
|
},
|
|
81
85
|
});
|
|
82
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
|
+
|
|
83
220
|
describe('drill down query', () => {
|
|
84
221
|
const resultSet1 = new ResultSet(loadResponse());
|
|
85
222
|
const resultSet2 = new ResultSet(
|
|
@@ -101,7 +238,7 @@ describe('drill down query', () => {
|
|
|
101
238
|
const resultSet4 = new ResultSet(
|
|
102
239
|
loadResponse({
|
|
103
240
|
dimensions: ['Statuses.potential'],
|
|
104
|
-
timeDimensions: []
|
|
241
|
+
timeDimensions: [],
|
|
105
242
|
})
|
|
106
243
|
);
|
|
107
244
|
|
|
@@ -184,31 +321,49 @@ describe('drill down query', () => {
|
|
|
184
321
|
timezone: 'UTC',
|
|
185
322
|
});
|
|
186
323
|
});
|
|
187
|
-
|
|
324
|
+
|
|
188
325
|
it('handles null values', () => {
|
|
326
|
+
expect(resultSet4.drillDown({ xvalues: [null] })).toEqual({
|
|
327
|
+
measures: [],
|
|
328
|
+
segments: [],
|
|
329
|
+
dimensions: ['Orders.id', 'Orders.title'],
|
|
330
|
+
filters: [
|
|
331
|
+
{
|
|
332
|
+
member: 'Orders.count',
|
|
333
|
+
operator: 'measureFilter',
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
member: 'Statuses.potential',
|
|
337
|
+
operator: 'notSet',
|
|
338
|
+
},
|
|
339
|
+
],
|
|
340
|
+
timeDimensions: [],
|
|
341
|
+
timezone: 'UTC',
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
it('respects the parent time dimension date range', () => {
|
|
346
|
+
const resultSet = new ResultSet(loadResponse2);
|
|
347
|
+
|
|
189
348
|
expect(
|
|
190
|
-
|
|
191
|
-
).toEqual(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
'
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
timeDimensions: [],
|
|
210
|
-
timezone: 'UTC',
|
|
211
|
-
}
|
|
212
|
-
);
|
|
349
|
+
resultSet.drillDown({ xValues: ['2023-05-08T00:00:00.000'] })
|
|
350
|
+
).toEqual({
|
|
351
|
+
measures: [],
|
|
352
|
+
segments: [],
|
|
353
|
+
dimensions: ['Orders.id', 'Orders.createdAt'],
|
|
354
|
+
filters: [
|
|
355
|
+
{
|
|
356
|
+
operator: 'measureFilter',
|
|
357
|
+
member: 'Orders.count',
|
|
358
|
+
},
|
|
359
|
+
],
|
|
360
|
+
timeDimensions: [
|
|
361
|
+
{
|
|
362
|
+
dimension: 'Orders.createdAt',
|
|
363
|
+
dateRange: ['2023-05-10T00:00:00.000', '2023-05-14T23:59:59.999'],
|
|
364
|
+
},
|
|
365
|
+
],
|
|
366
|
+
timezone: 'UTC'
|
|
367
|
+
});
|
|
213
368
|
});
|
|
214
369
|
});
|