@sisense/sdk-data 1.18.1 → 1.20.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 (42) hide show
  1. package/dist/cjs/dimensional-model/attributes.d.ts +3 -3
  2. package/dist/cjs/dimensional-model/attributes.js +4 -4
  3. package/dist/cjs/dimensional-model/base.d.ts +10 -1
  4. package/dist/cjs/dimensional-model/base.js +11 -1
  5. package/dist/cjs/dimensional-model/dimensions.js +9 -8
  6. package/dist/cjs/dimensional-model/filters/factory.d.ts +9 -9
  7. package/dist/cjs/dimensional-model/filters/factory.js +9 -9
  8. package/dist/cjs/dimensional-model/filters/filters.d.ts +79 -1
  9. package/dist/cjs/dimensional-model/filters/filters.js +119 -4
  10. package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.d.ts +16 -5
  11. package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.js +31 -9
  12. package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.js +3 -1
  13. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.js +1 -1
  14. package/dist/cjs/dimensional-model/filters/utils/types.d.ts +15 -6
  15. package/dist/cjs/dimensional-model/interfaces.d.ts +11 -1
  16. package/dist/cjs/dimensional-model/measures/factory.d.ts +12 -2
  17. package/dist/cjs/dimensional-model/measures/factory.js +4 -3
  18. package/dist/cjs/dimensional-model/types.d.ts +13 -3
  19. package/dist/cjs/utils.d.ts +27 -2
  20. package/dist/cjs/utils.js +61 -2
  21. package/dist/dimensional-model/attributes.d.ts +3 -3
  22. package/dist/dimensional-model/attributes.js +4 -4
  23. package/dist/dimensional-model/base.d.ts +10 -1
  24. package/dist/dimensional-model/base.js +11 -1
  25. package/dist/dimensional-model/dimensions.js +9 -8
  26. package/dist/dimensional-model/filters/factory.d.ts +9 -9
  27. package/dist/dimensional-model/filters/factory.js +9 -9
  28. package/dist/dimensional-model/filters/filters.d.ts +79 -1
  29. package/dist/dimensional-model/filters/filters.js +107 -3
  30. package/dist/dimensional-model/filters/utils/attribute-measure-util.d.ts +16 -5
  31. package/dist/dimensional-model/filters/utils/attribute-measure-util.js +29 -8
  32. package/dist/dimensional-model/filters/utils/condition-filter-util.js +3 -1
  33. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.js +1 -1
  34. package/dist/dimensional-model/filters/utils/types.d.ts +15 -6
  35. package/dist/dimensional-model/interfaces.d.ts +11 -1
  36. package/dist/dimensional-model/measures/factory.d.ts +12 -2
  37. package/dist/dimensional-model/measures/factory.js +3 -3
  38. package/dist/dimensional-model/types.d.ts +13 -3
  39. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -1
  40. package/dist/utils.d.ts +27 -2
  41. package/dist/utils.js +56 -1
  42. package/package.json +3 -3
@@ -23,11 +23,12 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.createMeasureFromRankingFilterJaql = exports.createMeasureFromFilterJaql = exports.createMeasureHelper = exports.createAttributeFromFilterJaql = exports.createAttributeHelper = void 0;
26
+ exports.createMeasureFromRankingFilterJaql = exports.createMeasureFromFilterJaql = exports.createCalculatedMeasureFromJaql = exports.createMeasureHelper = exports.createAttributeFromFilterJaql = exports.createAttributeHelper = void 0;
27
27
  const attributes_js_1 = require("../../attributes.js");
28
28
  const simple_column_types_js_1 = require("../../simple-column-types.js");
29
29
  const types_js_1 = require("../../types.js");
30
30
  const measureFactory = __importStar(require("../../measures/factory.js"));
31
+ const factory_js_1 = require("../../measures/factory.js");
31
32
  const DATA_MODEL_MODULE_NAME = 'DM';
32
33
  /**
33
34
  * Creates an attribute or level attribute from the provided parameters
@@ -37,22 +38,24 @@ const DATA_MODEL_MODULE_NAME = 'DM';
37
38
  * @param column - Column name
38
39
  * @param level - Date level
39
40
  * @param dataType - Data type
41
+ * @param title - Attribute title
42
+ * @param dataSource - Jaql data source
40
43
  * @returns attribute or level attribute
41
44
  */
42
- const createAttributeHelper = (dim, table, column, level, dataType) => {
45
+ const createAttributeHelper = (dim, table, column, level, dataType, title, dataSource) => {
43
46
  // if table is undefined, extract it from dim
44
47
  const dimTable = table !== null && table !== void 0 ? table : dim.slice(1, -1).split('.')[0];
45
48
  if (level) {
46
49
  const dateLevel = attributes_js_1.DimensionalLevelAttribute.translateJaqlToGranularity({ level });
47
50
  const format = attributes_js_1.DimensionalLevelAttribute.getDefaultFormatForGranularity(dateLevel);
48
- const levelAttribute = new attributes_js_1.DimensionalLevelAttribute(column, dim, dateLevel, format);
51
+ const levelAttribute = new attributes_js_1.DimensionalLevelAttribute(title !== null && title !== void 0 ? title : column, dim, dateLevel, format, undefined, undefined, dataSource);
49
52
  levelAttribute.composeCode = (0, attributes_js_1.normalizeAttributeName)(dimTable, column, level, DATA_MODEL_MODULE_NAME);
50
53
  return levelAttribute;
51
54
  }
52
55
  const attributeType = (0, simple_column_types_js_1.isNumber)(dataType)
53
56
  ? types_js_1.MetadataTypes.NumericAttribute
54
57
  : types_js_1.MetadataTypes.TextAttribute;
55
- const attribute = new attributes_js_1.DimensionalAttribute(column, dim, attributeType);
58
+ const attribute = new attributes_js_1.DimensionalAttribute(title !== null && title !== void 0 ? title : column, dim, attributeType, undefined, undefined, dataSource);
56
59
  attribute.composeCode = (0, attributes_js_1.normalizeAttributeName)(dimTable, column, undefined, DATA_MODEL_MODULE_NAME);
57
60
  return attribute;
58
61
  };
@@ -64,7 +67,8 @@ exports.createAttributeHelper = createAttributeHelper;
64
67
  * @returns attribute or level attribute
65
68
  */
66
69
  const createAttributeFromFilterJaql = (jaql) => {
67
- return (0, exports.createAttributeHelper)(jaql.dim, jaql.table, jaql.column, jaql.level, jaql.datatype);
70
+ const { dim, table, column, level, datatype, title, datasource: dataSource } = jaql;
71
+ return (0, exports.createAttributeHelper)(dim, table, column, level, datatype, title, dataSource);
68
72
  };
69
73
  exports.createAttributeFromFilterJaql = createAttributeFromFilterJaql;
70
74
  /**
@@ -76,15 +80,31 @@ exports.createAttributeFromFilterJaql = createAttributeFromFilterJaql;
76
80
  * @param level - Date level
77
81
  * @param dataType - Data type
78
82
  * @param agg - Aggregation function
83
+ * @param title - Measure title
84
+ * @param dataSource - data source provided in JAQL
79
85
  * @returns measure
80
86
  */
81
- const createMeasureHelper = (dim, table, column, level, dataType, agg) => {
82
- const attribute = (0, exports.createAttributeHelper)(dim, table, column, level, dataType);
87
+ const createMeasureHelper = (dim, table, column, level, dataType, agg, title, dataSource) => {
88
+ const attribute = (0, exports.createAttributeHelper)(dim, table, column, level, dataType, title, dataSource);
83
89
  const measure = measureFactory.aggregate(attribute, agg);
84
90
  measure.composeCode = `measureFactory.${agg}(${attribute.composeCode})`;
85
91
  return measure;
86
92
  };
87
93
  exports.createMeasureHelper = createMeasureHelper;
94
+ /**
95
+ * Creates a calculated measure from the provided filter JAQL object
96
+ *
97
+ * @param jaql - custom formula jaql
98
+ * @returns calculated measure
99
+ */
100
+ const createCalculatedMeasureFromJaql = (jaql) => {
101
+ const measure = (0, factory_js_1.transformCustomFormulaJaql)(jaql);
102
+ // TBD (SNS-108945)
103
+ // Handle preparation of 'composeCode' for formula
104
+ measure.composeCode = `'Formula code to be implemented'`;
105
+ return measure;
106
+ };
107
+ exports.createCalculatedMeasureFromJaql = createCalculatedMeasureFromJaql;
88
108
  /**
89
109
  * Creates a measure from the provided filter JAQL object
90
110
  *
@@ -92,10 +112,10 @@ exports.createMeasureHelper = createMeasureHelper;
92
112
  * @returns Measure
93
113
  */
94
114
  const createMeasureFromFilterJaql = (jaql) => {
95
- const { dim, table, column, level, datatype: dataType, agg } = jaql;
115
+ const { dim, table, column, title, level, datatype: dataType, agg, datasource: dataSource, } = jaql;
96
116
  if (!agg)
97
117
  return undefined;
98
- return (0, exports.createMeasureHelper)(dim, table, column, level, dataType, agg);
118
+ return (0, exports.createMeasureHelper)(dim, table, column, level, dataType, agg, title, dataSource);
99
119
  };
100
120
  exports.createMeasureFromFilterJaql = createMeasureFromFilterJaql;
101
121
  /**
@@ -105,6 +125,8 @@ exports.createMeasureFromFilterJaql = createMeasureFromFilterJaql;
105
125
  * @returns Measure
106
126
  */
107
127
  const createMeasureFromRankingFilterJaql = (jaql) => {
128
+ if ('formula' in jaql)
129
+ return (0, exports.createCalculatedMeasureFromJaql)(jaql);
108
130
  const { dim, table, column, level, datatype: dataType, agg } = jaql;
109
131
  return (0, exports.createMeasureHelper)(dim, table, column, level, dataType, agg);
110
132
  };
@@ -112,12 +112,14 @@ const createAttributeFilterFromConditionFilterJaql = (attribute, conditionFilter
112
112
  const conditionType = (0, exports.getSelectedConditionOption)(conditionFilterJaql);
113
113
  switch (conditionType) {
114
114
  case types_js_1.ConditionFilterType.BOTTOM:
115
- if (conditionFilterJaql.by && 'agg' in conditionFilterJaql.by) {
115
+ if (conditionFilterJaql.by) {
116
116
  return (0, filter_code_util_js_1.withComposeCode)(filterFactory.bottomRanking)(attribute, (0, attribute_measure_util_js_1.createMeasureFromRankingFilterJaql)(conditionFilterJaql.by), conditionFilterJaql[types_js_1.ConditionFilterType.BOTTOM], guid);
117
117
  }
118
118
  break;
119
119
  case types_js_1.ConditionFilterType.EQUALS:
120
120
  return (0, filter_code_util_js_1.withComposeCode)(filterFactory.equals)(attribute, conditionFilterJaql[types_js_1.ConditionFilterType.EQUALS], guid);
121
+ case types_js_1.ConditionFilterType.DOESNT_EQUAL:
122
+ return (0, filter_code_util_js_1.withComposeCode)(filterFactory.doesntEqual)(attribute, conditionFilterJaql[types_js_1.ConditionFilterType.DOESNT_EQUAL], guid);
121
123
  case types_js_1.ConditionFilterType.GREATER_THAN:
122
124
  return (0, filter_code_util_js_1.withComposeCode)(filterFactory.greaterThan)(attribute, conditionFilterJaql[types_js_1.ConditionFilterType.GREATER_THAN], guid);
123
125
  case types_js_1.ConditionFilterType.GREATER_THAN_OR_EQUAL:
@@ -211,7 +211,7 @@ const createFilterFromJaqlInternal = (jaql, guid) => {
211
211
  }
212
212
  catch (e) {
213
213
  // if a filter type is untranslatable, fall back to the generic pass-through JAQL filter
214
- // console.error(e);
214
+ console.debug('Fall back to generic pass-through JAQL filter due to filter translation error:', e);
215
215
  }
216
216
  return (0, exports.createGenericFilter)(jaql, guid);
217
217
  };
@@ -1,15 +1,21 @@
1
+ import { FormulaContext, FormulaJaql } from '../../types.js';
1
2
  declare type RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> & {
2
3
  [K in Keys]-?: Required<Pick<T, K>> & Partial<Record<Exclude<Keys, K>, undefined>>;
3
4
  }[Keys];
4
5
  export declare type JaqlContext = Record<string, Partial<FilterJaqlInternal>>;
5
6
  export declare type Id = string;
6
- export declare type Datasource = {
7
- address: Id;
8
- database: string;
9
- id: string;
7
+ /**
8
+ * Data source as specified in the jaql
9
+ *
10
+ * @internal
11
+ */
12
+ export declare type JaqlDataSource = {
13
+ address?: Id;
14
+ database?: string;
15
+ id?: string;
10
16
  title: string;
11
17
  live?: boolean;
12
- fullname: string;
18
+ fullname?: string;
13
19
  lastBuildTime?: string;
14
20
  revisionId?: string;
15
21
  };
@@ -56,6 +62,9 @@ export interface RangeFilterJaql extends BaseFilterJaql {
56
62
  to?: string | number;
57
63
  multiSelection?: boolean;
58
64
  }
65
+ export declare type CustomFormulaJaql = (FormulaJaql & {
66
+ context?: FormulaJaql | FormulaContext;
67
+ }) | FormulaContext;
59
68
  export declare type RankingFilterJaql = {
60
69
  agg: string;
61
70
  column: string;
@@ -120,7 +129,7 @@ export declare enum DatetimeLevel {
120
129
  export declare type FilterJaqlInternal = {
121
130
  title: string;
122
131
  column: string;
123
- datasource?: Datasource;
132
+ datasource?: JaqlDataSource;
124
133
  datatype: string;
125
134
  dim: string;
126
135
  dimension?: string;
@@ -1,5 +1,5 @@
1
1
  import { DataSource } from '../interfaces.js';
2
- import { Sort } from './types.js';
2
+ import { JaqlDataSource, Sort } from './types.js';
3
3
  /**
4
4
  * @internal
5
5
  */
@@ -35,6 +35,12 @@ export interface Element {
35
35
  * @internal
36
36
  */
37
37
  readonly id: string;
38
+ /**
39
+ * Data Source
40
+ *
41
+ * @internal
42
+ */
43
+ readonly dataSource?: JaqlDataSource;
38
44
  /**
39
45
  * Gets a serializable representation of the element.
40
46
  *
@@ -344,6 +350,10 @@ export interface Filter extends Element {
344
350
  * Attribute this filter instance is filtering
345
351
  */
346
352
  readonly attribute: Attribute;
353
+ /**
354
+ * Filter type
355
+ */
356
+ readonly filterType: string;
347
357
  /**
348
358
  * Boolean flag whether the filter is a scope filter
349
359
  */
@@ -1,5 +1,6 @@
1
1
  import { Attribute, Measure, Filter, CalculatedMeasure, BaseMeasure, CustomFormulaContext } from '../interfaces.js';
2
2
  import { ForecastFormulaOptions, TrendFormulaOptions } from '../../interfaces.js';
3
+ import { CustomFormulaJaql } from '../filters/utils/types.js';
3
4
  /**
4
5
  * Defines the different numeric operators that can be used with numeric filters
5
6
  *
@@ -32,6 +33,16 @@ export declare const RankingSortTypes: {
32
33
  Ascending: string;
33
34
  Descending: string;
34
35
  };
36
+ /**
37
+ * Transforms a custom formula jaql into a calculated measure instance.
38
+ *
39
+ * As custom formulas can be nested, the function performs a recursive transformation via a helper function.
40
+ *
41
+ * @param jaql - Custom formula jaql
42
+ * @returns Calculated measure instance
43
+ * @internal
44
+ */
45
+ export declare function transformCustomFormulaJaql(jaql: CustomFormulaJaql): CalculatedMeasure;
35
46
  /**
36
47
  * Creates a calculated measure for a valid custom formula built from [base functions](/guides/sdk/reference/functions.html#measured-value-functions).
37
48
  *
@@ -78,7 +89,6 @@ export declare const RankingSortTypes: {
78
89
  * },
79
90
  * );
80
91
  * ```
81
- *
82
92
  * @param title - Title of the measure to be displayed in legend
83
93
  * @param formula - Formula to be used for the measure
84
94
  * @param context - Formula context as a map of strings to attributes, measures, or filters
@@ -258,7 +268,7 @@ export declare function countDistinct(attribute: Attribute, name?: string, forma
258
268
  * ```ts
259
269
  * measureFactory.measuredValue(
260
270
  * measureFactory.sum(DM.Commerce.Cost),
261
- * [filters.greaterThan(DM.Commerce.Cost, 100)],
271
+ * [filterFactory.greaterThan(DM.Commerce.Cost, 100)],
262
272
  * 'Cost Greater Than 100'
263
273
  * ),
264
274
  * ```
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.rank = exports.forecast = exports.trend = exports.contribution = exports.pastYear = exports.pastQuarter = exports.pastMonth = exports.pastWeek = exports.pastDay = exports.diffPastYear = exports.diffPastQuarter = exports.diffPastMonth = exports.diffPastWeek = exports.difference = exports.growthPastYear = exports.growthPastQuarter = exports.growthPastMonth = exports.growthPastWeek = exports.growthRate = exports.growth = exports.runningSum = exports.weekToDateSum = exports.monthToDateSum = exports.quarterToDateSum = exports.yearToDateSum = exports.divide = exports.multiply = exports.subtract = exports.add = exports.measuredValue = exports.countDistinct = exports.count = exports.median = exports.max = exports.min = exports.avg = exports.average = exports.sum = exports.constant = exports.aggregate = exports.customFormula = exports.RankingSortTypes = exports.RankingTypes = void 0;
6
+ exports.rank = exports.forecast = exports.trend = exports.contribution = exports.pastYear = exports.pastQuarter = exports.pastMonth = exports.pastWeek = exports.pastDay = exports.diffPastYear = exports.diffPastQuarter = exports.diffPastMonth = exports.diffPastWeek = exports.difference = exports.growthPastYear = exports.growthPastQuarter = exports.growthPastMonth = exports.growthPastWeek = exports.growthRate = exports.growth = exports.runningSum = exports.weekToDateSum = exports.monthToDateSum = exports.quarterToDateSum = exports.yearToDateSum = exports.divide = exports.multiply = exports.subtract = exports.add = exports.measuredValue = exports.countDistinct = exports.count = exports.median = exports.max = exports.min = exports.avg = exports.average = exports.sum = exports.constant = exports.aggregate = exports.customFormula = exports.transformCustomFormulaJaql = exports.RankingSortTypes = exports.RankingTypes = void 0;
7
7
  const measures_js_1 = require("./measures.js");
8
8
  const types_js_1 = require("../types.js");
9
9
  const base_js_1 = require("../base.js");
@@ -109,6 +109,7 @@ function transformFormulaJaqlHelper(jaql) {
109
109
  *
110
110
  * @param jaql - Custom formula jaql
111
111
  * @returns Calculated measure instance
112
+ * @internal
112
113
  */
113
114
  function transformCustomFormulaJaql(jaql) {
114
115
  var _a;
@@ -120,6 +121,7 @@ function transformCustomFormulaJaql(jaql) {
120
121
  const context = (0, mapValues_js_1.default)((_a = jaql.context) !== null && _a !== void 0 ? _a : {}, (jaqlContextValue) => jaqlContextValue ? transformFormulaJaqlHelper(jaqlContextValue) : {});
121
122
  return new measures_js_1.DimensionalCalculatedMeasure(jaql.title, jaql.formula, context, undefined, undefined, sort);
122
123
  }
124
+ exports.transformCustomFormulaJaql = transformCustomFormulaJaql;
123
125
  /**
124
126
  * Creates a calculated measure for a valid custom formula built from [base functions](/guides/sdk/reference/functions.html#measured-value-functions).
125
127
  *
@@ -166,7 +168,6 @@ function transformCustomFormulaJaql(jaql) {
166
168
  * },
167
169
  * );
168
170
  * ```
169
- *
170
171
  * @param title - Title of the measure to be displayed in legend
171
172
  * @param formula - Formula to be used for the measure
172
173
  * @param context - Formula context as a map of strings to attributes, measures, or filters
@@ -398,7 +399,7 @@ exports.countDistinct = countDistinct;
398
399
  * ```ts
399
400
  * measureFactory.measuredValue(
400
401
  * measureFactory.sum(DM.Commerce.Cost),
401
- * [filters.greaterThan(DM.Commerce.Cost, 100)],
402
+ * [filterFactory.greaterThan(DM.Commerce.Cost, 100)],
402
403
  * 'Cost Greater Than 100'
403
404
  * ),
404
405
  * ```
@@ -1,4 +1,9 @@
1
- import { type ConditionFilterJaql } from './filters/utils/types.js';
1
+ import { JaqlDataSource, type ConditionFilterJaql } from './filters/utils/types.js';
2
+ import { Attribute } from './interfaces.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export type { JaqlDataSource };
2
7
  /**
3
8
  * Different aggregation types
4
9
  */
@@ -123,7 +128,7 @@ export declare const MetadataTypes: {
123
128
  * @param o - object to check
124
129
  * @returns true if the object or type is an attribute - of any type
125
130
  */
126
- isAttribute(o: any): boolean;
131
+ isAttribute(o: any): o is Attribute;
127
132
  /**
128
133
  * Checks whether the given object or type is a filter
129
134
  *
@@ -182,6 +187,7 @@ export declare type BaseJaql = {
182
187
  dim: string;
183
188
  table: string;
184
189
  column: string;
190
+ datasource?: JaqlDataSource;
185
191
  title: string;
186
192
  level?: 'years' | 'quarters' | 'months' | 'weeks' | 'minutes' | 'days';
187
193
  sort?: `${JaqlSortDirection}`;
@@ -190,6 +196,7 @@ export declare type BaseJaql = {
190
196
  jaql: FilterJaql;
191
197
  };
192
198
  };
199
+ merged?: boolean;
193
200
  };
194
201
  /** @internal */
195
202
  export declare type FormulaID = string;
@@ -255,4 +262,7 @@ declare type AndFilter<FilterItem> = {
255
262
  export declare type OrFilter<FilterItem> = {
256
263
  or: FilterItem[];
257
264
  };
258
- export {};
265
+ /**
266
+ * Abstract object with any unknown values
267
+ */
268
+ export declare type AnyObject = Record<string, any>;
@@ -1,4 +1,5 @@
1
- import { Filter, FilterRelations, FilterRelationsJaql, DataSource, DataSourceInfo, FilterJaql, Sort } from './index.js';
1
+ import { Filter, FilterRelations, FilterRelationsJaql, DataSource, DataSourceInfo, FilterJaql, Sort, Attribute } from './index.js';
2
+ import { JaqlDataSource } from './dimensional-model/filters/utils/types.js';
2
3
  /**
3
4
  * A more performant, but slightly bulkier, RFC4122v4 implementation. Performance is improved by minimizing calls to random()
4
5
  *
@@ -26,11 +27,23 @@ export declare function getDataSourceName(dataSource: DataSource): string;
26
27
  * @internal
27
28
  */
28
29
  export declare function isDataSourceInfo(dataSource: DataSource): dataSource is DataSourceInfo;
30
+ /**
31
+ * Converts a JaqlDataSource to DataSource.
32
+ *
33
+ * @internal
34
+ */
35
+ export declare function convertDataSource(jaqlDataSource: JaqlDataSource): DataSource;
36
+ /**
37
+ * Converts a DataSource to a description of data source used in JAQL.
38
+ *
39
+ * @internal
40
+ */
41
+ export declare function convertJaqlDataSource(dataSource: DataSource): JaqlDataSource;
29
42
  /**
30
43
  * Converts a string to a Sort enum
44
+ *
31
45
  * @param sort - The string to convert
32
46
  * @returns The converted Sort enum
33
- *
34
47
  * @internal
35
48
  */
36
49
  export declare function convertSort(sort?: string): Sort;
@@ -43,3 +56,15 @@ export declare function convertSort(sort?: string): Sort;
43
56
  * @internal
44
57
  */
45
58
  export declare const createFilterFromJaql: (jaql: FilterJaql, instanceid?: string) => Filter;
59
+ /**
60
+ * Retrieves the table value from the attribute.
61
+ *
62
+ * @internal
63
+ */
64
+ export declare function getTableNameFromAttribute(attribute: Attribute): string;
65
+ /**
66
+ * Retrieves the column value from the attribute.
67
+ *
68
+ * @internal
69
+ */
70
+ export declare function getColumnNameFromAttribute(attribute: Attribute): string;
package/dist/cjs/utils.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createFilterFromJaql = exports.convertSort = exports.isDataSourceInfo = exports.getDataSourceName = exports.getFilterListAndRelations = exports.guidFast = void 0;
6
+ exports.getColumnNameFromAttribute = exports.getTableNameFromAttribute = exports.createFilterFromJaql = exports.convertSort = exports.convertJaqlDataSource = exports.convertDataSource = exports.isDataSourceInfo = exports.getDataSourceName = exports.getFilterListAndRelations = exports.guidFast = void 0;
7
7
  const cloneDeep_js_1 = __importDefault(require("lodash-es/cloneDeep.js"));
8
8
  const index_js_1 = require("./index.js");
9
9
  const filter_from_jaql_util_js_1 = require("./dimensional-model/filters/utils/filter-from-jaql-util.js");
@@ -89,11 +89,40 @@ function isDataSourceInfo(dataSource) {
89
89
  return typeof dataSource === 'object' && 'type' in dataSource && 'title' in dataSource;
90
90
  }
91
91
  exports.isDataSourceInfo = isDataSourceInfo;
92
+ /**
93
+ * Converts a JaqlDataSource to DataSource.
94
+ *
95
+ * @internal
96
+ */
97
+ function convertDataSource(jaqlDataSource) {
98
+ return {
99
+ title: jaqlDataSource.title,
100
+ type: jaqlDataSource.live ? 'live' : 'elasticube',
101
+ };
102
+ }
103
+ exports.convertDataSource = convertDataSource;
104
+ /**
105
+ * Converts a DataSource to a description of data source used in JAQL.
106
+ *
107
+ * @internal
108
+ */
109
+ function convertJaqlDataSource(dataSource) {
110
+ return isDataSourceInfo(dataSource)
111
+ ? {
112
+ title: dataSource.title,
113
+ live: dataSource.type === 'live',
114
+ }
115
+ : {
116
+ title: dataSource,
117
+ live: false,
118
+ };
119
+ }
120
+ exports.convertJaqlDataSource = convertJaqlDataSource;
92
121
  /**
93
122
  * Converts a string to a Sort enum
123
+ *
94
124
  * @param sort - The string to convert
95
125
  * @returns The converted Sort enum
96
- *
97
126
  * @internal
98
127
  */
99
128
  function convertSort(sort) {
@@ -124,3 +153,33 @@ const createFilterFromJaql = (jaql, instanceid) => {
124
153
  return filter;
125
154
  };
126
155
  exports.createFilterFromJaql = createFilterFromJaql;
156
+ /**
157
+ * Extracts the table and column names from the given expression string.
158
+ *
159
+ * @internal
160
+ */
161
+ function parseExpression(expression) {
162
+ const [table, column] = expression.slice(1, -1).split('.');
163
+ return {
164
+ table,
165
+ column,
166
+ };
167
+ }
168
+ /**
169
+ * Retrieves the table value from the attribute.
170
+ *
171
+ * @internal
172
+ */
173
+ function getTableNameFromAttribute(attribute) {
174
+ return parseExpression(attribute.expression).table;
175
+ }
176
+ exports.getTableNameFromAttribute = getTableNameFromAttribute;
177
+ /**
178
+ * Retrieves the column value from the attribute.
179
+ *
180
+ * @internal
181
+ */
182
+ function getColumnNameFromAttribute(attribute) {
183
+ return parseExpression(attribute.expression).column;
184
+ }
185
+ exports.getColumnNameFromAttribute = getColumnNameFromAttribute;
@@ -1,5 +1,5 @@
1
1
  import { Attribute, LevelAttribute } from './interfaces.js';
2
- import { Sort } from './types.js';
2
+ import { Sort, JaqlDataSource } from './types.js';
3
3
  import { DimensionalElement } from './base.js';
4
4
  /**
5
5
  * @internal
@@ -11,7 +11,7 @@ export declare const jaqlSimpleColumnType: (datatype: string) => string;
11
11
  export declare class DimensionalAttribute extends DimensionalElement implements Attribute {
12
12
  readonly expression: string;
13
13
  protected _sort: Sort;
14
- constructor(name: string, expression: string, type?: string, desc?: string, sort?: Sort);
14
+ constructor(name: string, expression: string, type?: string, desc?: string, sort?: Sort, dataSource?: JaqlDataSource);
15
15
  /**
16
16
  * gets the element's ID
17
17
  */
@@ -46,7 +46,7 @@ export declare class DimensionalAttribute extends DimensionalElement implements
46
46
  export declare class DimensionalLevelAttribute extends DimensionalAttribute implements LevelAttribute {
47
47
  private _format;
48
48
  readonly granularity: string;
49
- constructor(l: string, expression: string, granularity: string, format?: string, desc?: string, sort?: Sort);
49
+ constructor(l: string, expression: string, granularity: string, format?: string, desc?: string, sort?: Sort, dataSource?: JaqlDataSource);
50
50
  /**
51
51
  * gets the element's ID
52
52
  */
@@ -9,8 +9,8 @@ export const jaqlSimpleColumnType = (datatype) => simpleColumnType(datatype).rep
9
9
  * @internal
10
10
  */
11
11
  export class DimensionalAttribute extends DimensionalElement {
12
- constructor(name, expression, type, desc, sort) {
13
- super(normalizeName(name), type || MetadataTypes.Attribute, desc);
12
+ constructor(name, expression, type, desc, sort, dataSource) {
13
+ super(name, type || MetadataTypes.Attribute, desc, dataSource);
14
14
  this._sort = Sort.None;
15
15
  this.expression = expression;
16
16
  this._sort = sort || Sort.None;
@@ -72,8 +72,8 @@ export class DimensionalAttribute extends DimensionalElement {
72
72
  * @internal
73
73
  */
74
74
  export class DimensionalLevelAttribute extends DimensionalAttribute {
75
- constructor(l, expression, granularity, format, desc, sort) {
76
- super(l, expression, MetadataTypes.DateLevel, desc, sort);
75
+ constructor(l, expression, granularity, format, desc, sort, dataSource) {
76
+ super(l, expression, MetadataTypes.DateLevel, desc, sort, dataSource);
77
77
  this._format = format;
78
78
  this.granularity = granularity;
79
79
  }
@@ -1,4 +1,5 @@
1
1
  import { Element } from './interfaces.js';
2
+ import { JaqlDataSource } from './types.js';
2
3
  /**
3
4
  * @internal
4
5
  */
@@ -7,12 +8,20 @@ export declare abstract class DimensionalElement implements Element {
7
8
  * @internal
8
9
  */
9
10
  private _name;
11
+ /**
12
+ * @internal
13
+ */
14
+ private readonly _dataSource;
10
15
  /**
11
16
  * Defines the element's name
12
17
  */
13
18
  get name(): string;
14
19
  set name(value: string);
15
- constructor(name: string, type: string, desc?: string);
20
+ /**
21
+ * Defines the element's data source
22
+ */
23
+ get dataSource(): JaqlDataSource;
24
+ constructor(name: string, type: string, desc?: string, dataSource?: JaqlDataSource);
16
25
  /**
17
26
  * gets the element's description
18
27
  */
@@ -2,10 +2,13 @@
2
2
  * @internal
3
3
  */
4
4
  export class DimensionalElement {
5
- constructor(name, type, desc) {
5
+ constructor(name, type, desc, dataSource) {
6
6
  this._name = name;
7
7
  this.type = type;
8
8
  this.description = desc || '';
9
+ if (dataSource) {
10
+ this._dataSource = dataSource;
11
+ }
9
12
  }
10
13
  /**
11
14
  * Defines the element's name
@@ -16,6 +19,12 @@ export class DimensionalElement {
16
19
  set name(value) {
17
20
  this._name = value;
18
21
  }
22
+ /**
23
+ * Defines the element's data source
24
+ */
25
+ get dataSource() {
26
+ return this._dataSource;
27
+ }
19
28
  /**
20
29
  * Gets a serializable representation of the element
21
30
  */
@@ -24,6 +33,7 @@ export class DimensionalElement {
24
33
  name: this.name,
25
34
  type: this.type,
26
35
  desc: this.description,
36
+ dataSource: this.dataSource,
27
37
  __serializable: 'DimensionalElement',
28
38
  };
29
39
  }
@@ -32,13 +32,14 @@ export class DimensionalDimension extends DimensionalElement {
32
32
  return MetadataTypes.TextDimension;
33
33
  }
34
34
  getAttachedName(name, expression) {
35
- let result = normalizeName(name);
35
+ let result = name;
36
36
  // if exists fallback to expression
37
- if (result === 'id' ||
38
- result === 'name' ||
39
- Object.getOwnPropertyDescriptor(this, result) !== undefined ||
40
- this[result] !== undefined) {
41
- result = normalizeName(expression.replace('.', '_').replace('[', '').replace(']', ''));
37
+ const normalizedName = normalizeName(name);
38
+ if (normalizedName === 'id' ||
39
+ normalizedName === 'name' ||
40
+ Object.getOwnPropertyDescriptor(this, normalizedName) !== undefined ||
41
+ this[normalizedName] !== undefined) {
42
+ result = expression;
42
43
  }
43
44
  return result;
44
45
  }
@@ -46,7 +47,7 @@ export class DimensionalDimension extends DimensionalElement {
46
47
  this._dimensions = dimensions;
47
48
  for (let i = 0; i < dimensions.length; i++) {
48
49
  const n = this.getAttachedName(dimensions[i].name, dimensions[i].attributes[0].expression);
49
- this[n] = dimensions[i];
50
+ this[normalizeName(n)] = dimensions[i];
50
51
  if (n != dimensions[i].name) {
51
52
  dimensions[i].name = n;
52
53
  }
@@ -56,7 +57,7 @@ export class DimensionalDimension extends DimensionalElement {
56
57
  this._attributes = attributes || [];
57
58
  for (let i = 0; i < attributes.length; i++) {
58
59
  const n = this.getAttachedName(attributes[i].name, attributes[i].expression);
59
- this[n] = attributes[i];
60
+ this[normalizeName(n)] = attributes[i];
60
61
  if (attributes[i].name != n) {
61
62
  attributes[i].name = n;
62
63
  }