@sisense/sdk-data 1.12.0 → 1.14.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.
- package/dist/cjs/dimensional-model/analytics/factory.js +6 -4
- package/dist/cjs/dimensional-model/attributes.js +20 -1
- package/dist/cjs/dimensional-model/dimensions.d.ts +8 -0
- package/dist/cjs/dimensional-model/dimensions.js +4 -0
- package/dist/cjs/dimensional-model/dimensions.test.js +30 -0
- package/dist/cjs/dimensional-model/filters/factory.d.ts +3 -2
- package/dist/cjs/dimensional-model/filters/factory.js +5 -5
- package/dist/cjs/dimensional-model/filters/factory.test.js +1 -1
- package/dist/cjs/dimensional-model/filters/filters.d.ts +37 -2
- package/dist/cjs/dimensional-model/filters/filters.js +88 -4
- package/dist/cjs/dimensional-model/filters/filters.test.js +16 -0
- package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.js +4 -2
- package/dist/cjs/dimensional-model/filters/utils/filter-code-util.js +5 -1
- package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +10 -1
- package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.js +28 -3
- package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.test.js +80 -15
- package/dist/cjs/dimensional-model/filters/utils/filter-types-util.js +3 -3
- package/dist/cjs/dimensional-model/filters/utils/types.d.ts +6 -0
- package/dist/cjs/dimensional-model/interfaces.d.ts +14 -0
- package/dist/cjs/dimensional-model/types.d.ts +2 -0
- package/dist/cjs/dimensional-model/types.js +4 -0
- package/dist/cjs/interfaces.d.ts +1 -1
- package/dist/cjs/translation/resources/en.js +1 -1
- package/dist/cjs/translation/resources/uk.js +1 -1
- package/dist/cjs/utils.js +6 -2
- package/dist/cjs/utils.test.js +24 -0
- package/dist/dimensional-model/analytics/factory.js +6 -4
- package/dist/dimensional-model/attributes.js +20 -1
- package/dist/dimensional-model/dimensions.d.ts +8 -0
- package/dist/dimensional-model/dimensions.js +4 -0
- package/dist/dimensional-model/filters/factory.d.ts +3 -2
- package/dist/dimensional-model/filters/factory.js +6 -6
- package/dist/dimensional-model/filters/filters.d.ts +37 -2
- package/dist/dimensional-model/filters/filters.js +86 -3
- package/dist/dimensional-model/filters/utils/condition-filter-util.js +4 -2
- package/dist/dimensional-model/filters/utils/filter-code-util.js +5 -1
- package/dist/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +10 -1
- package/dist/dimensional-model/filters/utils/filter-from-jaql-util.js +26 -2
- package/dist/dimensional-model/filters/utils/filter-types-util.js +3 -3
- package/dist/dimensional-model/filters/utils/types.d.ts +6 -0
- package/dist/dimensional-model/interfaces.d.ts +14 -0
- package/dist/dimensional-model/types.d.ts +2 -0
- package/dist/dimensional-model/types.js +4 -0
- package/dist/interfaces.d.ts +1 -1
- package/dist/translation/resources/en.js +1 -1
- package/dist/translation/resources/uk.js +1 -1
- package/dist/utils.js +6 -2
- package/package.json +3 -3
|
@@ -31,6 +31,8 @@ const filterFactory = __importStar(require("../factory.js"));
|
|
|
31
31
|
const types_js_1 = require("./types.js");
|
|
32
32
|
const attribute_measure_util_js_1 = require("./attribute-measure-util.js");
|
|
33
33
|
const condition_filter_util_js_1 = require("./condition-filter-util.js");
|
|
34
|
+
const filter_from_jaql_util_js_2 = require("./filter-from-jaql-util.js");
|
|
35
|
+
const filter_code_util_js_1 = require("./filter-code-util.js");
|
|
34
36
|
(0, vitest_1.describe)('filter-from-jaql-util', () => {
|
|
35
37
|
(0, vitest_1.describe)('createFilterFromJaqlInternal', () => {
|
|
36
38
|
const guid = 'instanceid';
|
|
@@ -56,7 +58,7 @@ const condition_filter_util_js_1 = require("./condition-filter-util.js");
|
|
|
56
58
|
};
|
|
57
59
|
const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
|
|
58
60
|
const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
|
|
59
|
-
const expectedFilter = filterFactory.members(attribute, [], guid);
|
|
61
|
+
const expectedFilter = filterFactory.members(attribute, [], [], guid);
|
|
60
62
|
expectEqualFilters(filter, expectedFilter);
|
|
61
63
|
});
|
|
62
64
|
it('should handle members text', () => {
|
|
@@ -74,7 +76,7 @@ const condition_filter_util_js_1 = require("./condition-filter-util.js");
|
|
|
74
76
|
};
|
|
75
77
|
const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
|
|
76
78
|
const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
|
|
77
|
-
const expectedFilter = filterFactory.members(attribute, jaql.filter.members, guid);
|
|
79
|
+
const expectedFilter = filterFactory.members(attribute, jaql.filter.members, [], guid);
|
|
78
80
|
expectEqualFilters(filter, expectedFilter);
|
|
79
81
|
});
|
|
80
82
|
test('should handle members datetime', () => {
|
|
@@ -116,7 +118,7 @@ const condition_filter_util_js_1 = require("./condition-filter-util.js");
|
|
|
116
118
|
].forEach((jaql) => {
|
|
117
119
|
const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
|
|
118
120
|
const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
|
|
119
|
-
const expectedFilter = filterFactory.members(attribute, jaql.filter.members, guid);
|
|
121
|
+
const expectedFilter = filterFactory.members(attribute, jaql.filter.members, [], guid);
|
|
120
122
|
expectEqualFilters(filter, expectedFilter);
|
|
121
123
|
});
|
|
122
124
|
});
|
|
@@ -134,7 +136,39 @@ const condition_filter_util_js_1 = require("./condition-filter-util.js");
|
|
|
134
136
|
};
|
|
135
137
|
const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
|
|
136
138
|
const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
|
|
137
|
-
const expectedFilter = filterFactory.members(attribute, jaql.filter.members, guid);
|
|
139
|
+
const expectedFilter = filterFactory.members(attribute, jaql.filter.members, [], guid);
|
|
140
|
+
expectEqualFilters(filter, expectedFilter);
|
|
141
|
+
});
|
|
142
|
+
it('should handle deactivated members', () => {
|
|
143
|
+
const jaql = {
|
|
144
|
+
datasource: {
|
|
145
|
+
title: 'Sample ECommerce',
|
|
146
|
+
fullname: 'LocalHost/Sample ECommerce',
|
|
147
|
+
id: 'localhost_aSampleIAAaECommerce',
|
|
148
|
+
address: 'LocalHost',
|
|
149
|
+
database: 'aSampleIAAaECommerce',
|
|
150
|
+
},
|
|
151
|
+
column: 'Country',
|
|
152
|
+
dim: '[country.Country]',
|
|
153
|
+
datatype: 'text',
|
|
154
|
+
title: 'COUNTRY',
|
|
155
|
+
collapsed: true,
|
|
156
|
+
isDashboardFilter: true,
|
|
157
|
+
filter: {
|
|
158
|
+
explicit: true,
|
|
159
|
+
multiSelection: true,
|
|
160
|
+
members: ['Albania', 'Algeria', 'Angola'],
|
|
161
|
+
filter: {
|
|
162
|
+
turnedOff: true,
|
|
163
|
+
exclude: {
|
|
164
|
+
members: ['Angola'],
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
|
|
170
|
+
const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
|
|
171
|
+
const expectedFilter = filterFactory.members(attribute, ['Albania', 'Algeria'], ['Angola'], guid);
|
|
138
172
|
expectEqualFilters(filter, expectedFilter);
|
|
139
173
|
});
|
|
140
174
|
});
|
|
@@ -475,19 +509,50 @@ const condition_filter_util_js_1 = require("./condition-filter-util.js");
|
|
|
475
509
|
});
|
|
476
510
|
});
|
|
477
511
|
});
|
|
512
|
+
(0, vitest_1.describe)('ExcludeFilter', () => {
|
|
513
|
+
it('should handle exclude members', () => {
|
|
514
|
+
const jaql = {
|
|
515
|
+
table: 'Country',
|
|
516
|
+
column: 'Country',
|
|
517
|
+
datatype: 'text',
|
|
518
|
+
title: 'exclude Turkey from Country',
|
|
519
|
+
dim: '[Country.Country]',
|
|
520
|
+
filter: {
|
|
521
|
+
exclude: {
|
|
522
|
+
members: ['Turkey'],
|
|
523
|
+
},
|
|
524
|
+
},
|
|
525
|
+
};
|
|
526
|
+
const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
|
|
527
|
+
const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
|
|
528
|
+
const expectedFilter = filterFactory.exclude((0, filter_code_util_js_1.withComposeCode)(filterFactory.members)(attribute, jaql.filter.exclude.members, undefined, guid), undefined, guid);
|
|
529
|
+
expectEqualFilters(filter, expectedFilter);
|
|
530
|
+
});
|
|
531
|
+
});
|
|
532
|
+
(0, vitest_1.describe)('Advanced filter (pass-through JAQL)', () => {
|
|
533
|
+
test('should handle', () => {
|
|
534
|
+
const jaql = {
|
|
535
|
+
table: 'Commerce',
|
|
536
|
+
column: 'Revenue',
|
|
537
|
+
datatype: 'numeric',
|
|
538
|
+
title: 'sum Revenue',
|
|
539
|
+
filter: {
|
|
540
|
+
custom: true,
|
|
541
|
+
isAdvanced: true,
|
|
542
|
+
},
|
|
543
|
+
};
|
|
544
|
+
const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
|
|
545
|
+
const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
|
|
546
|
+
const expectedFilter = filterFactory.customFilter(attribute, jaql.filter, guid);
|
|
547
|
+
expect(filter.jaql()).toEqual(expectedFilter.jaql());
|
|
548
|
+
expect(filter.jaql(true)).toEqual(expectedFilter.jaql(true));
|
|
549
|
+
expect(filter.serializable()).toBeDefined();
|
|
550
|
+
expect(filter.toJSON()).toBeDefined();
|
|
551
|
+
});
|
|
552
|
+
});
|
|
478
553
|
(0, vitest_1.describe)('Generic filter (pass-through JAQL)', () => {
|
|
479
554
|
test('should fall back to generic filter (pass-through JAQL)', () => {
|
|
480
555
|
[
|
|
481
|
-
// ADVANCED FILTER TYPE
|
|
482
|
-
{
|
|
483
|
-
table: 'Commerce',
|
|
484
|
-
column: 'Revenue',
|
|
485
|
-
datatype: 'numeric',
|
|
486
|
-
title: 'sum Revenue',
|
|
487
|
-
filter: {
|
|
488
|
-
isAdvanced: true,
|
|
489
|
-
},
|
|
490
|
-
},
|
|
491
556
|
// SIMULATE INVALID FILTER TYPE
|
|
492
557
|
{
|
|
493
558
|
table: 'Commerce',
|
|
@@ -546,7 +611,7 @@ const condition_filter_util_js_1 = require("./condition-filter-util.js");
|
|
|
546
611
|
].forEach((item) => {
|
|
547
612
|
const jaql = item;
|
|
548
613
|
const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, guid);
|
|
549
|
-
const expectedFilter =
|
|
614
|
+
const expectedFilter = (0, filter_from_jaql_util_js_2.createGenericFilter)(jaql, guid);
|
|
550
615
|
expect(filter.jaql()).toEqual(expectedFilter.jaql());
|
|
551
616
|
expect(filter.jaql(true)).toEqual(expectedFilter.jaql(true));
|
|
552
617
|
expect(filter.serializable()).toBeDefined();
|
|
@@ -35,6 +35,8 @@ const isInvalidFilter = (filter) => filter.filterType === types_js_1.FILTER_TYPE
|
|
|
35
35
|
const getFilterType = (filter, dataType = types_js_1.FilterModalType.DATE_TIME, timeData) => {
|
|
36
36
|
if (timeData && isTimeLevelNotSupported(timeData))
|
|
37
37
|
return types_js_1.FILTER_TYPES.ADVANCED;
|
|
38
|
+
if (isAdvancedFilter(filter))
|
|
39
|
+
return types_js_1.FILTER_TYPES.ADVANCED;
|
|
38
40
|
if (isIncludeAllFilter(filter))
|
|
39
41
|
return types_js_1.FILTER_TYPES.INCLUDE_ALL;
|
|
40
42
|
if (isPeriodFilter(filter))
|
|
@@ -47,11 +49,9 @@ const getFilterType = (filter, dataType = types_js_1.FilterModalType.DATE_TIME,
|
|
|
47
49
|
return types_js_1.FILTER_TYPES.NUMERIC_RANGE;
|
|
48
50
|
if ((0, exports.isConditionFilter)(filter))
|
|
49
51
|
return types_js_1.FILTER_TYPES.CONDITION;
|
|
50
|
-
if (isAdvancedFilter(filter))
|
|
51
|
-
return types_js_1.FILTER_TYPES.ADVANCED;
|
|
52
52
|
if (isInvalidFilter(filter))
|
|
53
53
|
return types_js_1.FILTER_TYPES.INVALID;
|
|
54
|
-
return types_js_1.FILTER_TYPES.
|
|
54
|
+
return types_js_1.FILTER_TYPES.INVALID;
|
|
55
55
|
};
|
|
56
56
|
exports.getFilterType = getFilterType;
|
|
57
57
|
/**
|
|
@@ -70,6 +70,12 @@ export declare type FilterMultiSelectJaql = {
|
|
|
70
70
|
multiSelection: boolean;
|
|
71
71
|
members: string[];
|
|
72
72
|
isCondition?: boolean;
|
|
73
|
+
filter?: {
|
|
74
|
+
turnedOff?: boolean;
|
|
75
|
+
exclude?: {
|
|
76
|
+
members?: string[];
|
|
77
|
+
};
|
|
78
|
+
};
|
|
73
79
|
};
|
|
74
80
|
export declare type FilterMultipleConditionJaql = {
|
|
75
81
|
or: ConditionFilterJaql[];
|
|
@@ -249,6 +249,14 @@ export interface DateDimension extends Dimension {
|
|
|
249
249
|
* Minutes (round to 15) level (for Live Models)
|
|
250
250
|
*/
|
|
251
251
|
readonly MinutesRoundTo15: LevelAttribute;
|
|
252
|
+
/**
|
|
253
|
+
* Minutes level (for Live Models)
|
|
254
|
+
*/
|
|
255
|
+
readonly Minutes: LevelAttribute;
|
|
256
|
+
/**
|
|
257
|
+
* Seconds level (for Live Models)
|
|
258
|
+
*/
|
|
259
|
+
readonly Seconds: LevelAttribute;
|
|
252
260
|
/**
|
|
253
261
|
* Aggregated Hours level (for Live Models)
|
|
254
262
|
*/
|
|
@@ -346,6 +354,12 @@ export interface Filter extends Element {
|
|
|
346
354
|
* @internal
|
|
347
355
|
*/
|
|
348
356
|
disabled: boolean;
|
|
357
|
+
/**
|
|
358
|
+
* Boolean flag whether the filter is locked
|
|
359
|
+
*
|
|
360
|
+
* @internal
|
|
361
|
+
*/
|
|
362
|
+
locked: boolean;
|
|
349
363
|
/**
|
|
350
364
|
* Gets JAQL representing this Filter instance
|
|
351
365
|
*
|
|
@@ -261,6 +261,8 @@ exports.DateLevels = {
|
|
|
261
261
|
Hours: 'Hours',
|
|
262
262
|
MinutesRoundTo30: 'MinutesRoundTo30',
|
|
263
263
|
MinutesRoundTo15: 'MinutesRoundTo15',
|
|
264
|
+
Minutes: 'Minutes',
|
|
265
|
+
Seconds: 'Seconds',
|
|
264
266
|
AggHours: 'AggHours',
|
|
265
267
|
AggMinutesRoundTo30: 'AggMinutesRoundTo30',
|
|
266
268
|
AggMinutesRoundTo15: 'AggMinutesRoundTo15',
|
|
@@ -276,6 +278,8 @@ exports.DateLevels = {
|
|
|
276
278
|
exports.DateLevels.Hours,
|
|
277
279
|
exports.DateLevels.MinutesRoundTo30,
|
|
278
280
|
exports.DateLevels.MinutesRoundTo15,
|
|
281
|
+
exports.DateLevels.Minutes,
|
|
282
|
+
exports.DateLevels.Seconds,
|
|
279
283
|
exports.DateLevels.AggHours,
|
|
280
284
|
exports.DateLevels.AggMinutesRoundTo30,
|
|
281
285
|
exports.DateLevels.AggMinutesRoundTo15,
|
package/dist/cjs/interfaces.d.ts
CHANGED
|
@@ -288,7 +288,7 @@ export declare const EMPTY_PIVOT_QUERY_RESULT_DATA: PivotQueryResultData;
|
|
|
288
288
|
* @param arg
|
|
289
289
|
* @internal
|
|
290
290
|
*/
|
|
291
|
-
export declare function isDataSource(arg: DataSource | Data | undefined): arg is DataSource;
|
|
291
|
+
export declare function isDataSource(arg: DataSource | Data | undefined): arg is DataSource | undefined;
|
|
292
292
|
/**
|
|
293
293
|
* Trend formula options.
|
|
294
294
|
*/
|
|
@@ -22,7 +22,7 @@ exports.translation = {
|
|
|
22
22
|
},
|
|
23
23
|
filter: {
|
|
24
24
|
unsupportedType: 'Unsupported filter type: {{filterType}}',
|
|
25
|
-
unsupportedDatetimeLevel: 'Filters do not support the next "datetime" levels: Hours, MinutesRoundTo30, MinutesRoundTo15',
|
|
25
|
+
unsupportedDatetimeLevel: 'Filters do not support the next "datetime" levels: Hours, MinutesRoundTo30, MinutesRoundTo15, Minutes, Seconds',
|
|
26
26
|
membersFilterNullMember: 'MembersFilter of {{attributeId}} - member cannot be null',
|
|
27
27
|
},
|
|
28
28
|
unsupportedDimensionalElement: 'Unsupported dimensional element type',
|
|
@@ -22,7 +22,7 @@ exports.translation = {
|
|
|
22
22
|
},
|
|
23
23
|
filter: {
|
|
24
24
|
unsupportedType: 'Непідтримуваний тип фільтра: {{filterType}}',
|
|
25
|
-
unsupportedDatetimeLevel: 'Фільтри не підтримують наступні рівні "datetime": Hours, MinutesRoundTo30, MinutesRoundTo15',
|
|
25
|
+
unsupportedDatetimeLevel: 'Фільтри не підтримують наступні рівні "datetime": Hours, MinutesRoundTo30, MinutesRoundTo15, Minutes, Seconds',
|
|
26
26
|
membersFilterNullMember: 'MembersFilter у {{attributeId}} - member не може бути нульовим',
|
|
27
27
|
},
|
|
28
28
|
unsupportedDimensionalElement: 'Непідтримуваний тип елемента',
|
package/dist/cjs/utils.js
CHANGED
|
@@ -99,7 +99,11 @@ exports.isDataSourceInfo = isDataSourceInfo;
|
|
|
99
99
|
const createFilterFromJaql = (jaql, instanceid) => {
|
|
100
100
|
// translation logic is based on FilterJaqlInternal type (from internal modern-analytics-filters)
|
|
101
101
|
// TODO reconcile FilterJaql and FilterJaqlInternal
|
|
102
|
-
const
|
|
103
|
-
|
|
102
|
+
const hasBackgroundFilter = jaql.filter.filter && !('turnedOff' in jaql.filter.filter);
|
|
103
|
+
const filter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaql, instanceid);
|
|
104
|
+
if (hasBackgroundFilter) {
|
|
105
|
+
filter.backgroundFilter = (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(Object.assign(Object.assign({}, jaql), { filter: jaql.filter.filter }), `${instanceid}-bg`);
|
|
106
|
+
}
|
|
107
|
+
return filter;
|
|
104
108
|
};
|
|
105
109
|
exports.createFilterFromJaql = createFilterFromJaql;
|
package/dist/cjs/utils.test.js
CHANGED
|
@@ -154,5 +154,29 @@ const nestedFilterRelationsResult = {
|
|
|
154
154
|
const expectedFilter = filterFactory.members(attribute, jaql.filter.members);
|
|
155
155
|
expect(filter.jaql().jaql).toEqual(expectedFilter.jaql().jaql);
|
|
156
156
|
});
|
|
157
|
+
test('should creact MembersFilter with inner background filter', () => {
|
|
158
|
+
const jaql = {
|
|
159
|
+
table: 'Category',
|
|
160
|
+
column: 'Category',
|
|
161
|
+
dim: '[Category.Category]',
|
|
162
|
+
datatype: 'text',
|
|
163
|
+
filter: {
|
|
164
|
+
explicit: true,
|
|
165
|
+
multiSelection: true,
|
|
166
|
+
members: ['Cell Phones'],
|
|
167
|
+
filter: {
|
|
168
|
+
members: ['Cell Phones', 'GPS Devices'],
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
title: 'Category',
|
|
172
|
+
};
|
|
173
|
+
const filter = (0, index_js_1.createFilterFromJaql)(jaql, instanceid);
|
|
174
|
+
const attribute = (0, attribute_measure_util_js_1.createAttributeFromFilterJaql)(jaql);
|
|
175
|
+
const backgroundFilter = filterFactory.members(attribute, jaql.filter.filter.members);
|
|
176
|
+
const expectedFilter = filterFactory.members(attribute, jaql.filter.members, undefined, undefined, backgroundFilter);
|
|
177
|
+
expect(filter.jaql().jaql).toEqual(expectedFilter.jaql().jaql);
|
|
178
|
+
expect(filter.backgroundFilter).toBeDefined();
|
|
179
|
+
expect(expectedFilter.backgroundFilter).toBeDefined();
|
|
180
|
+
});
|
|
157
181
|
});
|
|
158
182
|
});
|
|
@@ -96,8 +96,8 @@ export const boxWhiskerIqrOutliers = (target) => {
|
|
|
96
96
|
Attr: target,
|
|
97
97
|
});
|
|
98
98
|
outliersAttrWithInnerFilter.name = `${outliersAttrWithInnerFilter.name} (Outliers)`;
|
|
99
|
-
outliersAttrWithInnerFilter.jaql = () => {
|
|
100
|
-
|
|
99
|
+
outliersAttrWithInnerFilter.jaql = (nested) => {
|
|
100
|
+
const jaql = Object.assign(Object.assign({}, target.jaql(true)), { filter: {
|
|
101
101
|
or: [
|
|
102
102
|
{
|
|
103
103
|
fromNotEqual: outliersMax.jaql(true),
|
|
@@ -107,6 +107,7 @@ export const boxWhiskerIqrOutliers = (target) => {
|
|
|
107
107
|
},
|
|
108
108
|
],
|
|
109
109
|
} });
|
|
110
|
+
return nested ? jaql : { jaql };
|
|
110
111
|
};
|
|
111
112
|
return outliersAttrWithInnerFilter;
|
|
112
113
|
};
|
|
@@ -124,8 +125,8 @@ export const boxWhiskerStdDevOutliers = (target) => {
|
|
|
124
125
|
const outliersMin = customFormula(BOX_WHISKER.OUTLIER_MIN_VALUE_NAME, '(LOWERWHISKERMAX_STDEVP([Attr]), all([Attr]))', {
|
|
125
126
|
Attr: target,
|
|
126
127
|
});
|
|
127
|
-
outliersAttrWithInnerFilter.jaql = () => {
|
|
128
|
-
|
|
128
|
+
outliersAttrWithInnerFilter.jaql = (nested) => {
|
|
129
|
+
const jaql = Object.assign(Object.assign({}, target.jaql(true)), { filter: {
|
|
129
130
|
or: [
|
|
130
131
|
{
|
|
131
132
|
fromNotEqual: outliersMax.jaql(true),
|
|
@@ -135,6 +136,7 @@ export const boxWhiskerStdDevOutliers = (target) => {
|
|
|
135
136
|
},
|
|
136
137
|
],
|
|
137
138
|
} });
|
|
139
|
+
return nested ? jaql : { jaql };
|
|
138
140
|
};
|
|
139
141
|
return outliersAttrWithInnerFilter;
|
|
140
142
|
};
|
|
@@ -158,6 +158,7 @@ export class DimensionalLevelAttribute extends DimensionalAttribute {
|
|
|
158
158
|
*/
|
|
159
159
|
translateGranularityToJaql() {
|
|
160
160
|
const MINUTES_LEVEL = 'minutes';
|
|
161
|
+
const SECONDS_LEVEL = 'seconds';
|
|
161
162
|
switch (this.granularity) {
|
|
162
163
|
case DateLevels.Years:
|
|
163
164
|
case DateLevels.Quarters:
|
|
@@ -180,6 +181,16 @@ export class DimensionalLevelAttribute extends DimensionalAttribute {
|
|
|
180
181
|
dateTimeLevel: MINUTES_LEVEL,
|
|
181
182
|
bucket: '15',
|
|
182
183
|
};
|
|
184
|
+
case DateLevels.Minutes:
|
|
185
|
+
return {
|
|
186
|
+
dateTimeLevel: MINUTES_LEVEL,
|
|
187
|
+
bucket: '1',
|
|
188
|
+
};
|
|
189
|
+
case DateLevels.Seconds:
|
|
190
|
+
return {
|
|
191
|
+
dateTimeLevel: SECONDS_LEVEL,
|
|
192
|
+
bucket: '0',
|
|
193
|
+
};
|
|
183
194
|
case DateLevels.AggHours:
|
|
184
195
|
return {
|
|
185
196
|
level: MINUTES_LEVEL,
|
|
@@ -211,7 +222,7 @@ export class DimensionalLevelAttribute extends DimensionalAttribute {
|
|
|
211
222
|
return lvl;
|
|
212
223
|
};
|
|
213
224
|
if (json.dateTimeLevel) {
|
|
214
|
-
if (json.dateTimeLevel !== 'minutes') {
|
|
225
|
+
if (json.dateTimeLevel !== 'minutes' && json.dateTimeLevel !== 'seconds') {
|
|
215
226
|
return returnUnsupported(json.dateTimeLevel);
|
|
216
227
|
}
|
|
217
228
|
switch (json.bucket) {
|
|
@@ -221,6 +232,10 @@ export class DimensionalLevelAttribute extends DimensionalAttribute {
|
|
|
221
232
|
return DateLevels.MinutesRoundTo30;
|
|
222
233
|
case '15':
|
|
223
234
|
return DateLevels.MinutesRoundTo15;
|
|
235
|
+
case '1':
|
|
236
|
+
return DateLevels.Minutes;
|
|
237
|
+
case '0':
|
|
238
|
+
return DateLevels.Seconds;
|
|
224
239
|
default:
|
|
225
240
|
return returnUnsupported(json.dateTimeLevel);
|
|
226
241
|
}
|
|
@@ -272,6 +287,10 @@ export class DimensionalLevelAttribute extends DimensionalAttribute {
|
|
|
272
287
|
return 'yyyy-MM-dd HH:mm';
|
|
273
288
|
case DateLevels.MinutesRoundTo15:
|
|
274
289
|
return 'yyyy-MM-dd HH:mm';
|
|
290
|
+
case DateLevels.Minutes:
|
|
291
|
+
return 'yyyy-MM-dd HH:mm';
|
|
292
|
+
case DateLevels.Seconds:
|
|
293
|
+
return 'yyyy-MM-dd HH:mm:ss';
|
|
275
294
|
case DateLevels.AggHours:
|
|
276
295
|
return 'HH:mm';
|
|
277
296
|
case DateLevels.AggMinutesRoundTo30:
|
|
@@ -94,6 +94,14 @@ export declare class DimensionalDateDimension extends DimensionalDimension imple
|
|
|
94
94
|
* Minutes (round to 15) level
|
|
95
95
|
*/
|
|
96
96
|
readonly MinutesRoundTo15: LevelAttribute;
|
|
97
|
+
/**
|
|
98
|
+
* Minutes level (for Live Models)
|
|
99
|
+
*/
|
|
100
|
+
readonly Minutes: LevelAttribute;
|
|
101
|
+
/**
|
|
102
|
+
* Seconds level (for Live Models)
|
|
103
|
+
*/
|
|
104
|
+
readonly Seconds: LevelAttribute;
|
|
97
105
|
/**
|
|
98
106
|
* Aggregated Hours level
|
|
99
107
|
*/
|
|
@@ -160,6 +160,8 @@ export class DimensionalDateDimension extends DimensionalDimension {
|
|
|
160
160
|
this.Hours = new DimensionalLevelAttribute(DateLevels.Hours, expression, DateLevels.Hours, 'yyyy-MM-dd HH:mm');
|
|
161
161
|
this.MinutesRoundTo30 = new DimensionalLevelAttribute(DateLevels.MinutesRoundTo30, expression, DateLevels.MinutesRoundTo30, 'yyyy-MM-dd HH:mm');
|
|
162
162
|
this.MinutesRoundTo15 = new DimensionalLevelAttribute(DateLevels.MinutesRoundTo15, expression, DateLevels.MinutesRoundTo15, 'yyyy-MM-dd HH:mm');
|
|
163
|
+
this.Minutes = new DimensionalLevelAttribute(DateLevels.Minutes, expression, DateLevels.Minutes, 'yyyy-MM-dd HH:mm');
|
|
164
|
+
this.Seconds = new DimensionalLevelAttribute(DateLevels.Seconds, expression, DateLevels.Seconds, 'yyyy-MM-dd HH:mm:ss');
|
|
163
165
|
this.AggHours = new DimensionalLevelAttribute(DateLevels.AggHours, expression, DateLevels.AggHours, 'HH:mm');
|
|
164
166
|
this.AggMinutesRoundTo30 = new DimensionalLevelAttribute(DateLevels.AggMinutesRoundTo30, expression, DateLevels.AggMinutesRoundTo30, 'HH:mm');
|
|
165
167
|
this.AggMinutesRoundTo15 = new DimensionalLevelAttribute(DateLevels.AggMinutesRoundTo15, expression, DateLevels.AggMinutesRoundTo15, 'HH:mm');
|
|
@@ -173,6 +175,8 @@ export class DimensionalDateDimension extends DimensionalDimension {
|
|
|
173
175
|
this.Hours,
|
|
174
176
|
this.MinutesRoundTo30,
|
|
175
177
|
this.MinutesRoundTo15,
|
|
178
|
+
this.Minutes,
|
|
179
|
+
this.Seconds,
|
|
176
180
|
this.AggHours,
|
|
177
181
|
this.AggMinutesRoundTo30,
|
|
178
182
|
this.AggMinutesRoundTo15,
|
|
@@ -373,10 +373,11 @@ export declare function numeric(attribute: Attribute, operatorA?: string, valueA
|
|
|
373
373
|
* ```
|
|
374
374
|
* @param attribute - Attribute to filter on
|
|
375
375
|
* @param members - Array of member values to filter by
|
|
376
|
+
* @param _deactivatedMembers - [internal] Array of deactivated member values
|
|
376
377
|
* @param guid - Optional GUID for the filter
|
|
377
378
|
* @returns A filter instance
|
|
378
379
|
*/
|
|
379
|
-
export declare function members(attribute: Attribute, members: string[], guid?: string): Filter;
|
|
380
|
+
export declare function members(attribute: Attribute, members: string[], _deactivatedMembers?: string[], guid?: string, backgroundFilter?: Filter): Filter;
|
|
380
381
|
/**
|
|
381
382
|
* Creates a filter to isolate date values starting from and including the given date and level.
|
|
382
383
|
*
|
|
@@ -793,4 +794,4 @@ export declare namespace logic {
|
|
|
793
794
|
* @returns A filter instance
|
|
794
795
|
* @internal
|
|
795
796
|
*/
|
|
796
|
-
export declare function customFilter(jaql: any, guid?: string): Filter;
|
|
797
|
+
export declare function customFilter(attribute: Attribute, jaql: any, guid?: string): Filter;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { TextOperators, NumericOperators, DateOperators, LogicalOperators, RankingOperators, LogicalAttributeFilter, MembersFilter, ExcludeFilter, NumericFilter, MeasureFilter, RankingFilter, TextFilter, DateRangeFilter, RelativeDateFilter, } from './filters.js';
|
|
2
|
-
import { createGenericFilter } from './utils/filter-from-jaql-util.js';
|
|
1
|
+
import { TextOperators, NumericOperators, DateOperators, LogicalOperators, RankingOperators, LogicalAttributeFilter, MembersFilter, ExcludeFilter, NumericFilter, MeasureFilter, RankingFilter, TextFilter, DateRangeFilter, RelativeDateFilter, CustomFilter, } from './filters.js';
|
|
3
2
|
// LOGICAL FILTERS
|
|
4
3
|
/**
|
|
5
4
|
* Creates a filter representing the union of multiple filters on the same attribute. The resulting
|
|
@@ -424,11 +423,12 @@ export function numeric(attribute, operatorA, valueA, operatorB, valueB, guid) {
|
|
|
424
423
|
* ```
|
|
425
424
|
* @param attribute - Attribute to filter on
|
|
426
425
|
* @param members - Array of member values to filter by
|
|
426
|
+
* @param _deactivatedMembers - [internal] Array of deactivated member values
|
|
427
427
|
* @param guid - Optional GUID for the filter
|
|
428
428
|
* @returns A filter instance
|
|
429
429
|
*/
|
|
430
|
-
export function members(attribute, members, guid) {
|
|
431
|
-
return new MembersFilter(attribute, members, guid);
|
|
430
|
+
export function members(attribute, members, _deactivatedMembers, guid, backgroundFilter) {
|
|
431
|
+
return new MembersFilter(attribute, members, _deactivatedMembers, guid, backgroundFilter);
|
|
432
432
|
}
|
|
433
433
|
// DATE FILTERS
|
|
434
434
|
/**
|
|
@@ -913,6 +913,6 @@ export var logic;
|
|
|
913
913
|
* @returns A filter instance
|
|
914
914
|
* @internal
|
|
915
915
|
*/
|
|
916
|
-
export function customFilter(jaql, guid) {
|
|
917
|
-
return
|
|
916
|
+
export function customFilter(attribute, jaql, guid) {
|
|
917
|
+
return new CustomFilter(attribute, jaql, guid);
|
|
918
918
|
}
|
|
@@ -74,6 +74,7 @@ export declare const FilterTypes: {
|
|
|
74
74
|
date: string;
|
|
75
75
|
relativeDate: string;
|
|
76
76
|
cascading: string;
|
|
77
|
+
advanced: string;
|
|
77
78
|
};
|
|
78
79
|
/**
|
|
79
80
|
* base implementation for filter classes
|
|
@@ -93,12 +94,22 @@ declare abstract class AbstractFilter extends DimensionalElement implements Filt
|
|
|
93
94
|
* Global filter identifier
|
|
94
95
|
*/
|
|
95
96
|
readonly guid: string;
|
|
97
|
+
private _disabled;
|
|
98
|
+
private _locked;
|
|
96
99
|
/**
|
|
97
100
|
* Boolean flag whether the filter is disabled
|
|
98
101
|
*
|
|
99
102
|
* @internal
|
|
100
103
|
*/
|
|
101
|
-
disabled: boolean;
|
|
104
|
+
get disabled(): boolean;
|
|
105
|
+
set disabled(value: boolean);
|
|
106
|
+
/**
|
|
107
|
+
* Boolean flag whether the filter is locked
|
|
108
|
+
*
|
|
109
|
+
* @internal
|
|
110
|
+
*/
|
|
111
|
+
get locked(): boolean;
|
|
112
|
+
set locked(value: boolean);
|
|
102
113
|
constructor(att: Attribute, filterType: string, guid?: string);
|
|
103
114
|
get name(): string;
|
|
104
115
|
/**
|
|
@@ -151,7 +162,11 @@ export declare class LogicalAttributeFilter extends AbstractFilter {
|
|
|
151
162
|
*/
|
|
152
163
|
export declare class MembersFilter extends AbstractFilter {
|
|
153
164
|
readonly members: any[];
|
|
154
|
-
|
|
165
|
+
/** @internal */
|
|
166
|
+
_deactivatedMembers: any[];
|
|
167
|
+
/** @internal */
|
|
168
|
+
backgroundFilter?: Filter;
|
|
169
|
+
constructor(attribute: Attribute, members?: any[], _deactivatedMembers?: any[], guid?: string, backgroundFilter?: Filter);
|
|
155
170
|
/**
|
|
156
171
|
* gets the element's ID
|
|
157
172
|
*/
|
|
@@ -175,6 +190,10 @@ export declare class CascadingFilter extends AbstractFilter {
|
|
|
175
190
|
* gets the element's ID
|
|
176
191
|
*/
|
|
177
192
|
get id(): string;
|
|
193
|
+
get disabled(): boolean;
|
|
194
|
+
set disabled(value: boolean);
|
|
195
|
+
get locked(): boolean;
|
|
196
|
+
set locked(value: boolean);
|
|
178
197
|
/**
|
|
179
198
|
* Gets a serializable representation of the element
|
|
180
199
|
*/
|
|
@@ -313,6 +332,22 @@ export declare class RelativeDateFilter extends AbstractFilter {
|
|
|
313
332
|
*/
|
|
314
333
|
filterJaql(): any;
|
|
315
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* @internal
|
|
337
|
+
*/
|
|
338
|
+
export declare class CustomFilter extends AbstractFilter {
|
|
339
|
+
readonly jaqlExpression: any;
|
|
340
|
+
constructor(att: Attribute, jaql: any, guid?: string);
|
|
341
|
+
/**
|
|
342
|
+
* gets the element's ID
|
|
343
|
+
*/
|
|
344
|
+
get id(): string;
|
|
345
|
+
/**
|
|
346
|
+
* Gets JAQL representing this Filter instance
|
|
347
|
+
*
|
|
348
|
+
*/
|
|
349
|
+
filterJaql(): any;
|
|
350
|
+
}
|
|
316
351
|
/**
|
|
317
352
|
* @param json - Filter JSON representation
|
|
318
353
|
* @internal
|