@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.
Files changed (48) hide show
  1. package/dist/cjs/dimensional-model/analytics/factory.js +6 -4
  2. package/dist/cjs/dimensional-model/attributes.js +20 -1
  3. package/dist/cjs/dimensional-model/dimensions.d.ts +8 -0
  4. package/dist/cjs/dimensional-model/dimensions.js +4 -0
  5. package/dist/cjs/dimensional-model/dimensions.test.js +30 -0
  6. package/dist/cjs/dimensional-model/filters/factory.d.ts +3 -2
  7. package/dist/cjs/dimensional-model/filters/factory.js +5 -5
  8. package/dist/cjs/dimensional-model/filters/factory.test.js +1 -1
  9. package/dist/cjs/dimensional-model/filters/filters.d.ts +37 -2
  10. package/dist/cjs/dimensional-model/filters/filters.js +88 -4
  11. package/dist/cjs/dimensional-model/filters/filters.test.js +16 -0
  12. package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.js +4 -2
  13. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.js +5 -1
  14. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +10 -1
  15. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.js +28 -3
  16. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.test.js +80 -15
  17. package/dist/cjs/dimensional-model/filters/utils/filter-types-util.js +3 -3
  18. package/dist/cjs/dimensional-model/filters/utils/types.d.ts +6 -0
  19. package/dist/cjs/dimensional-model/interfaces.d.ts +14 -0
  20. package/dist/cjs/dimensional-model/types.d.ts +2 -0
  21. package/dist/cjs/dimensional-model/types.js +4 -0
  22. package/dist/cjs/interfaces.d.ts +1 -1
  23. package/dist/cjs/translation/resources/en.js +1 -1
  24. package/dist/cjs/translation/resources/uk.js +1 -1
  25. package/dist/cjs/utils.js +6 -2
  26. package/dist/cjs/utils.test.js +24 -0
  27. package/dist/dimensional-model/analytics/factory.js +6 -4
  28. package/dist/dimensional-model/attributes.js +20 -1
  29. package/dist/dimensional-model/dimensions.d.ts +8 -0
  30. package/dist/dimensional-model/dimensions.js +4 -0
  31. package/dist/dimensional-model/filters/factory.d.ts +3 -2
  32. package/dist/dimensional-model/filters/factory.js +6 -6
  33. package/dist/dimensional-model/filters/filters.d.ts +37 -2
  34. package/dist/dimensional-model/filters/filters.js +86 -3
  35. package/dist/dimensional-model/filters/utils/condition-filter-util.js +4 -2
  36. package/dist/dimensional-model/filters/utils/filter-code-util.js +5 -1
  37. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +10 -1
  38. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.js +26 -2
  39. package/dist/dimensional-model/filters/utils/filter-types-util.js +3 -3
  40. package/dist/dimensional-model/filters/utils/types.d.ts +6 -0
  41. package/dist/dimensional-model/interfaces.d.ts +14 -0
  42. package/dist/dimensional-model/types.d.ts +2 -0
  43. package/dist/dimensional-model/types.js +4 -0
  44. package/dist/interfaces.d.ts +1 -1
  45. package/dist/translation/resources/en.js +1 -1
  46. package/dist/translation/resources/uk.js +1 -1
  47. package/dist/utils.js +6 -2
  48. 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 = filterFactory.customFilter(jaql, guid);
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.ADVANCED;
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
  *
@@ -144,6 +144,8 @@ export declare const DateLevels: {
144
144
  Hours: string;
145
145
  MinutesRoundTo30: string;
146
146
  MinutesRoundTo15: string;
147
+ Minutes: string;
148
+ Seconds: string;
147
149
  AggHours: string;
148
150
  AggMinutesRoundTo30: string;
149
151
  AggMinutesRoundTo15: string;
@@ -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,
@@ -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 jaqlInternal = jaql;
103
- return (0, filter_from_jaql_util_js_1.createFilterFromJaqlInternal)(jaqlInternal, instanceid);
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;
@@ -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
- return Object.assign(Object.assign({}, target.jaql(true)), { filter: {
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
- return Object.assign(Object.assign({}, target.jaql(true)), { filter: {
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 createGenericFilter(jaql, guid);
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
- constructor(attribute: Attribute, members?: any[], guid?: string);
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