@sisense/sdk-data 1.28.0 → 1.29.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/attributes.d.ts +2 -2
- package/dist/cjs/dimensional-model/attributes.js +7 -7
- package/dist/cjs/dimensional-model/base.d.ts +7 -1
- package/dist/cjs/dimensional-model/base.js +2 -1
- package/dist/cjs/dimensional-model/filters/filter-config-utils.d.ts +4 -0
- package/dist/cjs/dimensional-model/filters/filter-config-utils.js +5 -2
- package/dist/cjs/dimensional-model/filters/filter-relations.d.ts +187 -0
- package/dist/cjs/dimensional-model/filters/filter-relations.js +532 -0
- package/dist/cjs/dimensional-model/filters/helpers.d.ts +112 -0
- package/dist/cjs/dimensional-model/filters/helpers.js +178 -0
- package/dist/cjs/dimensional-model/filters/index.d.ts +2 -0
- package/dist/cjs/dimensional-model/filters/index.js +18 -0
- package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.d.ts +1 -35
- package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.js +37 -101
- package/dist/cjs/dimensional-model/interfaces.d.ts +2 -0
- package/dist/cjs/dimensional-model/measures/factory.js +1 -32
- package/dist/cjs/dimensional-model/measures/measures.d.ts +3 -3
- package/dist/cjs/dimensional-model/measures/measures.js +10 -9
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/interfaces.d.ts +2 -2
- package/dist/cjs/utils.d.ts +74 -2
- package/dist/cjs/utils.js +138 -3
- package/dist/dimensional-model/attributes.d.ts +2 -2
- package/dist/dimensional-model/attributes.js +7 -7
- package/dist/dimensional-model/base.d.ts +7 -1
- package/dist/dimensional-model/base.js +2 -1
- package/dist/dimensional-model/filters/filter-config-utils.d.ts +4 -0
- package/dist/dimensional-model/filters/filter-config-utils.js +5 -2
- package/dist/dimensional-model/filters/filter-relations.d.ts +187 -0
- package/dist/dimensional-model/filters/filter-relations.js +507 -0
- package/dist/dimensional-model/filters/helpers.d.ts +112 -0
- package/dist/dimensional-model/filters/helpers.js +169 -0
- package/dist/dimensional-model/filters/index.d.ts +2 -0
- package/dist/dimensional-model/filters/index.js +2 -0
- package/dist/dimensional-model/filters/utils/attribute-measure-util.d.ts +1 -35
- package/dist/dimensional-model/filters/utils/attribute-measure-util.js +36 -74
- package/dist/dimensional-model/interfaces.d.ts +2 -0
- package/dist/dimensional-model/measures/factory.js +2 -30
- package/dist/dimensional-model/measures/measures.d.ts +3 -3
- package/dist/dimensional-model/measures/measures.js +10 -9
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/interfaces.d.ts +2 -2
- package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -1
- package/dist/utils.d.ts +74 -2
- package/dist/utils.js +133 -2
- package/package.json +4 -3
- package/dist/cjs/dimensional-model/filter-relations.d.ts +0 -9
- package/dist/cjs/dimensional-model/filter-relations.js +0 -18
- package/dist/dimensional-model/filter-relations.d.ts +0 -9
- package/dist/dimensional-model/filter-relations.js +0 -14
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findFilter = exports.withReplacedFilter = exports.withoutFilters = exports.withoutFilter = exports.withAddedFilters = exports.withAddedFilter = void 0;
|
|
4
|
+
const filter_relations_js_1 = require("./filter-relations.js");
|
|
5
|
+
const index_js_1 = require("../../index.js");
|
|
6
|
+
/**
|
|
7
|
+
* Returns a function that adds a filter to existing filters or filter relations.
|
|
8
|
+
*
|
|
9
|
+
* @param filter - The filter to add.
|
|
10
|
+
* @returns A function that takes existing filters or filter relations and returns updated filters or filter relations with the new filter added.
|
|
11
|
+
* @group Filter Utilities
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* // Using with an array of filters
|
|
15
|
+
* const originalFilters = [filterByAgeRange];
|
|
16
|
+
* const updatedFilters = withAddedFilter(filterByCost)(originalFilters);
|
|
17
|
+
* // [filterByAgeRange, filterByCost]
|
|
18
|
+
*
|
|
19
|
+
* // Using with filter relations
|
|
20
|
+
* const originalFilterRelations = filterFactory.logic.or(filterByAgeRange, filterByRevenue);
|
|
21
|
+
* const updatedFilterRelations = withAddedFilter(filterByCost)(originalFilterRelations);
|
|
22
|
+
* // (filterByAgeRange OR filterByRevenue) AND filterByCost
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
function withAddedFilter(filter) {
|
|
26
|
+
return (filters) => {
|
|
27
|
+
if ((0, index_js_1.isFilterRelations)(filters)) {
|
|
28
|
+
const { filters: existingFilters, relations } = (0, filter_relations_js_1.splitFiltersAndRelations)(filters);
|
|
29
|
+
const newFilters = [...existingFilters, filter];
|
|
30
|
+
const newRelations = (0, filter_relations_js_1.calculateNewRelations)(existingFilters, relations, newFilters);
|
|
31
|
+
return (0, filter_relations_js_1.combineFiltersAndRelations)(newFilters, newRelations);
|
|
32
|
+
}
|
|
33
|
+
return [...(filters || []), filter];
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
exports.withAddedFilter = withAddedFilter;
|
|
37
|
+
/**
|
|
38
|
+
* Returns a function that adds multiple filters to existing filters or filter relations.
|
|
39
|
+
*
|
|
40
|
+
* @param filtersToAdd - An array of filters to add.
|
|
41
|
+
* @returns A function that takes existing filters or filter relations and returns updated filters or filter relations with the new filters added.
|
|
42
|
+
* @group Filter Utilities
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* // Using with an array of filters
|
|
46
|
+
* const originalFilters = [filterByAgeRange];
|
|
47
|
+
* const updatedFilters = withAddedFilters([filterByCost, filterByRevenue])(originalFilters);
|
|
48
|
+
* // [filterByAgeRange, filterByCost, filterByRevenue]
|
|
49
|
+
*
|
|
50
|
+
* // Using with filter relations
|
|
51
|
+
* const originalFilterRelations = filterFactory.logic.or(filterByAgeRange, filterByRevenue);
|
|
52
|
+
* const updatedFilterRelations = withAddedFilters([filterByCost, filterByRevenue])(originalFilterRelations);
|
|
53
|
+
* // (filterByAgeRange OR filterByRevenue) AND filterByCost AND filterByRevenue
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
function withAddedFilters(filtersToAdd) {
|
|
57
|
+
return (filters) => {
|
|
58
|
+
if ((0, index_js_1.isFilterRelations)(filters)) {
|
|
59
|
+
const { filters: existingFilters, relations } = (0, filter_relations_js_1.splitFiltersAndRelations)(filters);
|
|
60
|
+
const newFilters = [...existingFilters, ...filtersToAdd];
|
|
61
|
+
const newRelations = (0, filter_relations_js_1.calculateNewRelations)(existingFilters, relations, newFilters);
|
|
62
|
+
return (0, filter_relations_js_1.combineFiltersAndRelations)(newFilters, newRelations);
|
|
63
|
+
}
|
|
64
|
+
return [...(filters || []), ...filtersToAdd];
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
exports.withAddedFilters = withAddedFilters;
|
|
68
|
+
/**
|
|
69
|
+
* Returns a function that removes a filter from existing filters or filter relations.
|
|
70
|
+
*
|
|
71
|
+
* @param filterToRemove - The filter to remove.
|
|
72
|
+
* @returns A function that takes existing filters or filter relations and returns updated filters or filter relations without the specified filter.
|
|
73
|
+
* @group Filter Utilities
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* // Using with an array of filters
|
|
77
|
+
* const originalFilters = [filterByAgeRange, filterByRevenue, filterByCost];
|
|
78
|
+
* const updatedFilters = withoutFilter(filterByCost)(originalFilters);
|
|
79
|
+
* // [filterByAgeRange, filterByRevenue]
|
|
80
|
+
*
|
|
81
|
+
* // Using with filter relations
|
|
82
|
+
* const originalFilterRelations = filterFactory.logic.or(filterByAgeRange, filterByRevenue);
|
|
83
|
+
* const updatedFiltersRelations = withoutFilter(filterByRevenue)(originalFilterRelations);
|
|
84
|
+
* // filterByAgeRange
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
function withoutFilter(filterToRemove) {
|
|
88
|
+
return (filters) => {
|
|
89
|
+
if ((0, index_js_1.isFilterRelations)(filters)) {
|
|
90
|
+
const { filters: existingFilters, relations } = (0, filter_relations_js_1.splitFiltersAndRelations)(filters);
|
|
91
|
+
const newFilters = existingFilters.filter((filter) => filter.config.guid !== filterToRemove.config.guid);
|
|
92
|
+
const newRelations = (0, filter_relations_js_1.calculateNewRelations)(existingFilters, relations, newFilters);
|
|
93
|
+
return (0, filter_relations_js_1.combineFiltersAndRelations)(newFilters, newRelations);
|
|
94
|
+
}
|
|
95
|
+
return (filters || []).filter((filter) => filter.config.guid !== filterToRemove.config.guid);
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
exports.withoutFilter = withoutFilter;
|
|
99
|
+
/**
|
|
100
|
+
* Returns a function that removes multiple filters from existing filters or filter relations.
|
|
101
|
+
*
|
|
102
|
+
* @param filtersToRemove - An array of filters to remove.
|
|
103
|
+
* @returns A function that takes existing filters or filter relations and returns updated filters or filter relations without the specified filters.
|
|
104
|
+
* @group Filter Utilities
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts
|
|
107
|
+
* // Using with an array of filters
|
|
108
|
+
* const originalFilters = [filterByAgeRange, filterByRevenue, filterByCost];
|
|
109
|
+
* const updatedFilters = withRemovedFilters([filterByRevenue, filterByCost])(originalFilters);
|
|
110
|
+
* // [filterByAgeRange]
|
|
111
|
+
*
|
|
112
|
+
* // Using with filter relations
|
|
113
|
+
* const originalFilterRelations = filterFactory.logic.or(filterByAgeRange, filterByRevenue);
|
|
114
|
+
* const updatedFiltersRelations = withRemovedFilters([filterByRevenue])(originalFilterRelations);
|
|
115
|
+
* // filterByAgeRange
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
function withoutFilters(filtersToRemove) {
|
|
119
|
+
return (filters) => {
|
|
120
|
+
if ((0, index_js_1.isFilterRelations)(filters)) {
|
|
121
|
+
const { filters: existingFilters, relations } = (0, filter_relations_js_1.splitFiltersAndRelations)(filters);
|
|
122
|
+
const newFilters = existingFilters.filter((filter) => !filtersToRemove.some((filterToRemove) => filter.config.guid === filterToRemove.config.guid));
|
|
123
|
+
const newRelations = (0, filter_relations_js_1.calculateNewRelations)(existingFilters, relations, newFilters);
|
|
124
|
+
return (0, filter_relations_js_1.combineFiltersAndRelations)(newFilters, newRelations);
|
|
125
|
+
}
|
|
126
|
+
return (filters || []).filter((filter) => !filtersToRemove.some((filterToRemove) => filter.config.guid === filterToRemove.config.guid));
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
exports.withoutFilters = withoutFilters;
|
|
130
|
+
/**
|
|
131
|
+
* Returns a function that replaces a filter with a new filter in existing filters or filter relations.
|
|
132
|
+
*
|
|
133
|
+
* @param filterToReplace - The filter to replace.
|
|
134
|
+
* @param newFilter - The new filter to use as a replacement.
|
|
135
|
+
* @returns A function that takes existing filters or filter relations and returns updated filters or filter relations with the filter replaced.
|
|
136
|
+
* @group Filter Utilities
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* // Using with an array of filters
|
|
140
|
+
* const originalFilters = [filterByAgeRange, filterByRevenue];
|
|
141
|
+
* const updatedFilters = withReplacedFilter(filterByRevenue, filterByCost)(originalFilters);
|
|
142
|
+
* // [filterByAgeRange, filterByCost]
|
|
143
|
+
*
|
|
144
|
+
* // Using with filter relations
|
|
145
|
+
* const originalFilterRelations = filterFactory.logic.or(filterByAgeRange, filterByRevenue);
|
|
146
|
+
* const updatedFilterRelations = withReplacedFilter(filterByRevenue, filterByCost)(originalFilterRelations);
|
|
147
|
+
* // (filterByAgeRange OR filterByCost)
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
function withReplacedFilter(filterToReplace, newFilter) {
|
|
151
|
+
return (filters) => {
|
|
152
|
+
if ((0, index_js_1.isFilterRelations)(filters)) {
|
|
153
|
+
const { filters: existingFilters, relations } = (0, filter_relations_js_1.splitFiltersAndRelations)(filters);
|
|
154
|
+
const newFilters = existingFilters.map((filter) => filter.config.guid === filterToReplace.config.guid ? newFilter : filter);
|
|
155
|
+
const newRelations = (0, filter_relations_js_1.getRelationsWithReplacedFilter)(relations, filterToReplace, newFilter);
|
|
156
|
+
return (0, filter_relations_js_1.combineFiltersAndRelations)(newFilters, newRelations);
|
|
157
|
+
}
|
|
158
|
+
return (filters || []).map((filter) => filter.config.guid === filterToReplace.config.guid ? newFilter : filter);
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
exports.withReplacedFilter = withReplacedFilter;
|
|
162
|
+
/**
|
|
163
|
+
* Finds a filter in an array of filters or filter relations.
|
|
164
|
+
* Returns the first filter that satisfies the provided search function.
|
|
165
|
+
* @group Filter Utilities
|
|
166
|
+
* @param filters - An array of filters or filter relations to search.
|
|
167
|
+
* @param searchFn - A function that takes a filter and returns a boolean indicating whether the filter satisfies the search criteria.
|
|
168
|
+
* @returns The first filter that satisfies the search function, or `undefined` if no filter is found.
|
|
169
|
+
*
|
|
170
|
+
*/
|
|
171
|
+
function findFilter(filters, searchFn) {
|
|
172
|
+
if (!filters) {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
const filtersArray = (0, index_js_1.isFilterRelations)(filters) ? (0, filter_relations_js_1.getFiltersArray)(filters) : filters;
|
|
176
|
+
return filtersArray.find(searchFn);
|
|
177
|
+
}
|
|
178
|
+
exports.findFilter = findFilter;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./filter-relations.js"), exports);
|
|
18
|
+
__exportStar(require("./helpers.js"), exports);
|
|
@@ -1,19 +1,6 @@
|
|
|
1
1
|
import { Attribute, BaseMeasure, CalculatedMeasure, LevelAttribute } from '../../interfaces.js';
|
|
2
2
|
import { FilterJaql } from '../../types.js';
|
|
3
|
-
import { CustomFormulaJaql, FilterJaqlInternal,
|
|
4
|
-
/**
|
|
5
|
-
* Creates an attribute or level attribute from the provided parameters
|
|
6
|
-
*
|
|
7
|
-
* @param dim - Dimension expression
|
|
8
|
-
* @param table - Table name
|
|
9
|
-
* @param column - Column name
|
|
10
|
-
* @param level - Date level
|
|
11
|
-
* @param dataType - Data type
|
|
12
|
-
* @param title - Attribute title
|
|
13
|
-
* @param dataSource - Jaql data source
|
|
14
|
-
* @returns attribute or level attribute
|
|
15
|
-
*/
|
|
16
|
-
export declare const createAttributeHelper: (dim: string, table: string | undefined, column: string | undefined, level: string | undefined, dataType: string, title?: string, dataSource?: JaqlDataSource) => Attribute | LevelAttribute;
|
|
3
|
+
import { CustomFormulaJaql, FilterJaqlInternal, RankingFilterJaql } from './types.js';
|
|
17
4
|
/**
|
|
18
5
|
* Creates an attribute or level attribute from the provided filter JAQL object
|
|
19
6
|
*
|
|
@@ -21,27 +8,6 @@ export declare const createAttributeHelper: (dim: string, table: string | undefi
|
|
|
21
8
|
* @returns attribute or level attribute
|
|
22
9
|
*/
|
|
23
10
|
export declare const createAttributeFromFilterJaql: (jaql: FilterJaql | FilterJaqlInternal) => Attribute | LevelAttribute;
|
|
24
|
-
/**
|
|
25
|
-
* Creates a measure from the provided parameters
|
|
26
|
-
*
|
|
27
|
-
* @param dim - Dimension expression
|
|
28
|
-
* @param table - Table name
|
|
29
|
-
* @param column - Column name
|
|
30
|
-
* @param level - Date level
|
|
31
|
-
* @param dataType - Data type
|
|
32
|
-
* @param agg - Aggregation function
|
|
33
|
-
* @param title - Measure title
|
|
34
|
-
* @param dataSource - data source provided in JAQL
|
|
35
|
-
* @returns measure
|
|
36
|
-
*/
|
|
37
|
-
export declare const createMeasureHelper: (dim: string, table: string | undefined, column: string, level: string | undefined, dataType: string, agg: string, title?: string, dataSource?: JaqlDataSource) => BaseMeasure;
|
|
38
|
-
/**
|
|
39
|
-
* Creates a calculated measure from the provided filter JAQL object
|
|
40
|
-
*
|
|
41
|
-
* @param jaql - custom formula jaql
|
|
42
|
-
* @returns calculated measure
|
|
43
|
-
*/
|
|
44
|
-
export declare const createCalculatedMeasureFromJaql: (jaql: CustomFormulaJaql) => CalculatedMeasure;
|
|
45
11
|
/**
|
|
46
12
|
* Creates a measure from the provided filter JAQL object
|
|
47
13
|
*
|
|
@@ -1,68 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.createMeasureFromRankingFilterJaql = exports.createMeasureFromFilterJaql = exports.
|
|
27
|
-
const
|
|
28
|
-
const simple_column_types_js_1 = require("../../simple-column-types.js");
|
|
29
|
-
const types_js_1 = require("../../types.js");
|
|
30
|
-
const measureFactory = __importStar(require("../../measures/factory.js"));
|
|
31
|
-
const factory_js_1 = require("../../measures/factory.js");
|
|
32
|
-
const measures_js_1 = require("../../measures/measures.js");
|
|
33
|
-
const DATA_MODEL_MODULE_NAME = 'DM';
|
|
34
|
-
/**
|
|
35
|
-
* Creates an attribute or level attribute from the provided parameters
|
|
36
|
-
*
|
|
37
|
-
* @param dim - Dimension expression
|
|
38
|
-
* @param table - Table name
|
|
39
|
-
* @param column - Column name
|
|
40
|
-
* @param level - Date level
|
|
41
|
-
* @param dataType - Data type
|
|
42
|
-
* @param title - Attribute title
|
|
43
|
-
* @param dataSource - Jaql data source
|
|
44
|
-
* @returns attribute or level attribute
|
|
45
|
-
*/
|
|
46
|
-
const createAttributeHelper = (dim, table, column, level, dataType, title, dataSource) => {
|
|
47
|
-
// if table is undefined, extract it from dim
|
|
48
|
-
const dimTable = table !== null && table !== void 0 ? table : dim.slice(1, -1).split('.')[0];
|
|
49
|
-
// if column is undefined, extract it from dim
|
|
50
|
-
const dimColumn = column !== null && column !== void 0 ? column : dim.slice(1, -1).split('.')[1];
|
|
51
|
-
if (level) {
|
|
52
|
-
const dateLevel = attributes_js_1.DimensionalLevelAttribute.translateJaqlToGranularity({ level });
|
|
53
|
-
const format = attributes_js_1.DimensionalLevelAttribute.getDefaultFormatForGranularity(dateLevel);
|
|
54
|
-
const levelAttribute = new attributes_js_1.DimensionalLevelAttribute(title !== null && title !== void 0 ? title : dimColumn, dim, dateLevel, format, undefined, undefined, dataSource);
|
|
55
|
-
levelAttribute.composeCode = (0, attributes_js_1.normalizeAttributeName)(dimTable, dimColumn, level, DATA_MODEL_MODULE_NAME);
|
|
56
|
-
return levelAttribute;
|
|
57
|
-
}
|
|
58
|
-
const attributeType = (0, simple_column_types_js_1.isNumber)(dataType)
|
|
59
|
-
? types_js_1.MetadataTypes.NumericAttribute
|
|
60
|
-
: types_js_1.MetadataTypes.TextAttribute;
|
|
61
|
-
const attribute = new attributes_js_1.DimensionalAttribute(title !== null && title !== void 0 ? title : dimColumn, dim, attributeType, undefined, undefined, dataSource);
|
|
62
|
-
attribute.composeCode = (0, attributes_js_1.normalizeAttributeName)(dimTable, dimColumn, undefined, DATA_MODEL_MODULE_NAME);
|
|
63
|
-
return attribute;
|
|
64
|
-
};
|
|
65
|
-
exports.createAttributeHelper = createAttributeHelper;
|
|
3
|
+
exports.createMeasureFromRankingFilterJaql = exports.createMeasureFromFilterJaql = exports.createAttributeFromFilterJaql = void 0;
|
|
4
|
+
const utils_js_1 = require("../../../utils.js");
|
|
66
5
|
/**
|
|
67
6
|
* Creates an attribute or level attribute from the provided filter JAQL object
|
|
68
7
|
*
|
|
@@ -71,43 +10,19 @@ exports.createAttributeHelper = createAttributeHelper;
|
|
|
71
10
|
*/
|
|
72
11
|
const createAttributeFromFilterJaql = (jaql) => {
|
|
73
12
|
const { dim, table, column, level, datatype, title, datasource: dataSource } = jaql;
|
|
74
|
-
return (0,
|
|
13
|
+
return (0, utils_js_1.createAttributeHelper)({
|
|
14
|
+
dim,
|
|
15
|
+
table,
|
|
16
|
+
column,
|
|
17
|
+
dataType: datatype,
|
|
18
|
+
level,
|
|
19
|
+
format: undefined,
|
|
20
|
+
sort: undefined,
|
|
21
|
+
title,
|
|
22
|
+
dataSource,
|
|
23
|
+
});
|
|
75
24
|
};
|
|
76
25
|
exports.createAttributeFromFilterJaql = createAttributeFromFilterJaql;
|
|
77
|
-
/**
|
|
78
|
-
* Creates a measure from the provided parameters
|
|
79
|
-
*
|
|
80
|
-
* @param dim - Dimension expression
|
|
81
|
-
* @param table - Table name
|
|
82
|
-
* @param column - Column name
|
|
83
|
-
* @param level - Date level
|
|
84
|
-
* @param dataType - Data type
|
|
85
|
-
* @param agg - Aggregation function
|
|
86
|
-
* @param title - Measure title
|
|
87
|
-
* @param dataSource - data source provided in JAQL
|
|
88
|
-
* @returns measure
|
|
89
|
-
*/
|
|
90
|
-
const createMeasureHelper = (dim, table, column, level, dataType, agg, title, dataSource) => {
|
|
91
|
-
const attribute = (0, exports.createAttributeHelper)(dim, table, column, level, dataType, title, dataSource);
|
|
92
|
-
const measure = measureFactory.aggregate(attribute, agg, title);
|
|
93
|
-
measure.composeCode = `measureFactory.${agg}(${attribute.composeCode})`;
|
|
94
|
-
return measure;
|
|
95
|
-
};
|
|
96
|
-
exports.createMeasureHelper = createMeasureHelper;
|
|
97
|
-
/**
|
|
98
|
-
* Creates a calculated measure from the provided filter JAQL object
|
|
99
|
-
*
|
|
100
|
-
* @param jaql - custom formula jaql
|
|
101
|
-
* @returns calculated measure
|
|
102
|
-
*/
|
|
103
|
-
const createCalculatedMeasureFromJaql = (jaql) => {
|
|
104
|
-
const measure = (0, factory_js_1.transformCustomFormulaJaql)(jaql);
|
|
105
|
-
// TBD (SNS-108945)
|
|
106
|
-
// Handle preparation of 'composeCode' for formula
|
|
107
|
-
measure.composeCode = `'Formula code to be implemented'`;
|
|
108
|
-
return measure;
|
|
109
|
-
};
|
|
110
|
-
exports.createCalculatedMeasureFromJaql = createCalculatedMeasureFromJaql;
|
|
111
26
|
/**
|
|
112
27
|
* Creates a measure from the provided filter JAQL object
|
|
113
28
|
*
|
|
@@ -118,7 +33,18 @@ const createMeasureFromFilterJaql = (jaql) => {
|
|
|
118
33
|
const { dim, table, column, title, level, datatype: dataType, agg, datasource: dataSource, } = jaql;
|
|
119
34
|
if (!agg)
|
|
120
35
|
return undefined;
|
|
121
|
-
return (0,
|
|
36
|
+
return (0, utils_js_1.createMeasureHelper)({
|
|
37
|
+
dim,
|
|
38
|
+
table,
|
|
39
|
+
column,
|
|
40
|
+
dataType,
|
|
41
|
+
agg,
|
|
42
|
+
level,
|
|
43
|
+
format: undefined,
|
|
44
|
+
sort: undefined,
|
|
45
|
+
title,
|
|
46
|
+
dataSource,
|
|
47
|
+
});
|
|
122
48
|
};
|
|
123
49
|
exports.createMeasureFromFilterJaql = createMeasureFromFilterJaql;
|
|
124
50
|
/**
|
|
@@ -129,8 +55,18 @@ exports.createMeasureFromFilterJaql = createMeasureFromFilterJaql;
|
|
|
129
55
|
*/
|
|
130
56
|
const createMeasureFromRankingFilterJaql = (jaql, rankingMessage) => {
|
|
131
57
|
if ('formula' in jaql)
|
|
132
|
-
return (0,
|
|
58
|
+
return (0, utils_js_1.createCalculatedMeasureHelper)(jaql);
|
|
133
59
|
const { dim, table, column, level, datatype: dataType, agg } = jaql;
|
|
134
|
-
return (0,
|
|
60
|
+
return (0, utils_js_1.createMeasureHelper)({
|
|
61
|
+
dim,
|
|
62
|
+
table,
|
|
63
|
+
column,
|
|
64
|
+
level,
|
|
65
|
+
dataType,
|
|
66
|
+
agg,
|
|
67
|
+
format: undefined,
|
|
68
|
+
sort: undefined,
|
|
69
|
+
title: rankingMessage,
|
|
70
|
+
});
|
|
135
71
|
};
|
|
136
72
|
exports.createMeasureFromRankingFilterJaql = createMeasureFromRankingFilterJaql;
|
|
@@ -438,6 +438,7 @@ export declare type FilterConfig = CompleteBaseFilterConfig | CompleteMembersFil
|
|
|
438
438
|
export interface Filter extends Element {
|
|
439
439
|
/**
|
|
440
440
|
* Attribute this filter instance is filtering
|
|
441
|
+
*
|
|
441
442
|
* @internal
|
|
442
443
|
*/
|
|
443
444
|
readonly attribute: Attribute;
|
|
@@ -448,6 +449,7 @@ export interface Filter extends Element {
|
|
|
448
449
|
/**
|
|
449
450
|
* Boolean flag whether the filter is a scope filter
|
|
450
451
|
* which is on a dimension that isn’t used in the query
|
|
452
|
+
*
|
|
451
453
|
* @internal
|
|
452
454
|
*/
|
|
453
455
|
isScope: boolean;
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
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
4
|
const measures_js_1 = require("./measures.js");
|
|
8
5
|
const types_js_1 = require("../types.js");
|
|
9
6
|
const base_js_1 = require("../base.js");
|
|
10
|
-
const mapValues_js_1 = __importDefault(require("lodash-es/mapValues.js"));
|
|
11
|
-
const attributes_js_1 = require("../attributes.js");
|
|
12
|
-
const simple_column_types_js_1 = require("./../simple-column-types.js");
|
|
13
7
|
const utils_js_1 = require("../../utils.js");
|
|
14
8
|
const translatable_error_js_1 = require("../../translation/translatable-error.js");
|
|
15
9
|
/**
|
|
@@ -81,28 +75,6 @@ function measureFunction(measure, name, func, options) {
|
|
|
81
75
|
builder.push(')');
|
|
82
76
|
return new measures_js_1.DimensionalCalculatedMeasure(name, builder.join(''), context);
|
|
83
77
|
}
|
|
84
|
-
function transformFormulaJaqlHelper(jaql) {
|
|
85
|
-
const isFormulaJaql = 'formula' in jaql;
|
|
86
|
-
if (isFormulaJaql) {
|
|
87
|
-
return transformCustomFormulaJaql(jaql);
|
|
88
|
-
}
|
|
89
|
-
const sort = (0, utils_js_1.convertSort)(jaql.sort);
|
|
90
|
-
const hasAggregation = !!jaql.agg;
|
|
91
|
-
const isDatatypeDatetime = (0, simple_column_types_js_1.isDatetime)(jaql.datatype);
|
|
92
|
-
const attributeType = (0, simple_column_types_js_1.isNumber)(jaql.datatype)
|
|
93
|
-
? types_js_1.MetadataTypes.NumericAttribute
|
|
94
|
-
: types_js_1.MetadataTypes.TextAttribute;
|
|
95
|
-
const attribute = isDatatypeDatetime
|
|
96
|
-
? new attributes_js_1.DimensionalLevelAttribute(jaql.title, jaql.dim, attributes_js_1.DimensionalLevelAttribute.translateJaqlToGranularity(jaql), undefined, undefined, sort)
|
|
97
|
-
: new attributes_js_1.DimensionalAttribute(jaql.title, jaql.dim, attributeType, undefined, sort);
|
|
98
|
-
if (hasAggregation) {
|
|
99
|
-
return new measures_js_1.DimensionalBaseMeasure(jaql.title, attribute, measures_js_1.DimensionalBaseMeasure.aggregationFromJAQL(jaql.agg || ''), undefined, undefined, sort);
|
|
100
|
-
}
|
|
101
|
-
if ('filter' in jaql) {
|
|
102
|
-
return (0, utils_js_1.createFilterFromJaql)(jaql);
|
|
103
|
-
}
|
|
104
|
-
return attribute;
|
|
105
|
-
}
|
|
106
78
|
/**
|
|
107
79
|
* Transforms a custom formula jaql into a calculated measure instance.
|
|
108
80
|
*
|
|
@@ -113,14 +85,11 @@ function transformFormulaJaqlHelper(jaql) {
|
|
|
113
85
|
* @internal
|
|
114
86
|
*/
|
|
115
87
|
function transformCustomFormulaJaql(jaql) {
|
|
116
|
-
var _a;
|
|
117
88
|
const isFormulaJaql = 'formula' in jaql;
|
|
118
89
|
if (!isFormulaJaql) {
|
|
119
90
|
throw new translatable_error_js_1.TranslatableError('errors.measure.notAFormula');
|
|
120
91
|
}
|
|
121
|
-
|
|
122
|
-
const context = (0, mapValues_js_1.default)((_a = jaql.context) !== null && _a !== void 0 ? _a : {}, (jaqlContextValue) => jaqlContextValue ? transformFormulaJaqlHelper(jaqlContextValue) : {});
|
|
123
|
-
return new measures_js_1.DimensionalCalculatedMeasure(jaql.title, jaql.formula, context, undefined, undefined, sort);
|
|
92
|
+
return (0, utils_js_1.createCalculatedMeasureHelper)(jaql);
|
|
124
93
|
}
|
|
125
94
|
exports.transformCustomFormulaJaql = transformCustomFormulaJaql;
|
|
126
95
|
/**
|
|
@@ -7,7 +7,7 @@ import { DimensionalElement } from '../base.js';
|
|
|
7
7
|
export declare abstract class AbstractMeasure extends DimensionalElement {
|
|
8
8
|
protected _sort: Sort;
|
|
9
9
|
protected _format: string | undefined;
|
|
10
|
-
constructor(name: string, type: string, format?: string, desc?: string, sort?: Sort);
|
|
10
|
+
constructor(name: string, type: string, format?: string, desc?: string, sort?: Sort, composeCode?: string);
|
|
11
11
|
/**
|
|
12
12
|
* gets the element's ID
|
|
13
13
|
*/
|
|
@@ -51,7 +51,7 @@ export declare abstract class AbstractMeasure extends DimensionalElement {
|
|
|
51
51
|
export declare class DimensionalBaseMeasure extends AbstractMeasure implements BaseMeasure {
|
|
52
52
|
static aggregationFromJAQL(agg: string): string;
|
|
53
53
|
static aggregationToJAQL(agg: string): string;
|
|
54
|
-
constructor(name: string, attribute: Attribute, agg: string, format?: string, desc?: string, sort?: Sort);
|
|
54
|
+
constructor(name: string, attribute: Attribute, agg: string, format?: string, desc?: string, sort?: Sort, composeCode?: string);
|
|
55
55
|
/**
|
|
56
56
|
* Aggregating attribute
|
|
57
57
|
*/
|
|
@@ -93,7 +93,7 @@ export declare class DimensionalBaseMeasure extends AbstractMeasure implements B
|
|
|
93
93
|
* @internal
|
|
94
94
|
*/
|
|
95
95
|
export declare class DimensionalCalculatedMeasure extends AbstractMeasure implements CalculatedMeasure {
|
|
96
|
-
constructor(name: string, expression: string, context: MeasureContext, format?: string, desc?: string, sort?: Sort);
|
|
96
|
+
constructor(name: string, expression: string, context: MeasureContext, format?: string, desc?: string, sort?: Sort, composeCode?: string);
|
|
97
97
|
/**
|
|
98
98
|
* Defines the Calculated measure's expression
|
|
99
99
|
*/
|
|
@@ -41,12 +41,13 @@ const translatable_error_js_1 = require("../../translation/translatable-error.js
|
|
|
41
41
|
* @internal
|
|
42
42
|
*/
|
|
43
43
|
class AbstractMeasure extends base_js_1.DimensionalElement {
|
|
44
|
-
constructor(name, type, format, desc, sort) {
|
|
44
|
+
constructor(name, type, format, desc, sort, composeCode) {
|
|
45
45
|
super(name, type, desc);
|
|
46
46
|
this._sort = types_js_1.Sort.None;
|
|
47
47
|
this._format = '#,#.00';
|
|
48
48
|
this._format = format;
|
|
49
49
|
this._sort = sort || types_js_1.Sort.None;
|
|
50
|
+
this.composeCode = composeCode;
|
|
50
51
|
}
|
|
51
52
|
/**
|
|
52
53
|
* Gets the sort definition of this instance
|
|
@@ -85,8 +86,8 @@ exports.AbstractMeasure = AbstractMeasure;
|
|
|
85
86
|
* @internal
|
|
86
87
|
*/
|
|
87
88
|
class DimensionalBaseMeasure extends AbstractMeasure {
|
|
88
|
-
constructor(name, attribute, agg, format, desc, sort) {
|
|
89
|
-
super(name, types_js_1.MetadataTypes.BaseMeasure, format, desc, sort);
|
|
89
|
+
constructor(name, attribute, agg, format, desc, sort, composeCode) {
|
|
90
|
+
super(name, types_js_1.MetadataTypes.BaseMeasure, format, desc, sort, composeCode);
|
|
90
91
|
this.attribute = attribute;
|
|
91
92
|
this.aggregation = agg;
|
|
92
93
|
}
|
|
@@ -143,7 +144,7 @@ class DimensionalBaseMeasure extends AbstractMeasure {
|
|
|
143
144
|
* @returns An instance representing the sorted {@link Measure} of this instance
|
|
144
145
|
*/
|
|
145
146
|
sort(sort) {
|
|
146
|
-
return new DimensionalBaseMeasure(this.name, this.attribute, this.aggregation, this._format, this.description, sort);
|
|
147
|
+
return new DimensionalBaseMeasure(this.name, this.attribute, this.aggregation, this._format, this.description, sort, this.composeCode);
|
|
147
148
|
}
|
|
148
149
|
/**
|
|
149
150
|
* Gets a formatted {@link Measure} with the given definition
|
|
@@ -154,7 +155,7 @@ class DimensionalBaseMeasure extends AbstractMeasure {
|
|
|
154
155
|
* @returns An instance representing the formatted {@link Measure} of this instance
|
|
155
156
|
*/
|
|
156
157
|
format(format) {
|
|
157
|
-
return new DimensionalBaseMeasure(this.name, this.attribute, this.aggregation, format, this.description, this._sort);
|
|
158
|
+
return new DimensionalBaseMeasure(this.name, this.attribute, this.aggregation, format, this.description, this._sort, this.composeCode);
|
|
158
159
|
}
|
|
159
160
|
/**
|
|
160
161
|
* gets the element's ID
|
|
@@ -193,8 +194,8 @@ exports.DimensionalBaseMeasure = DimensionalBaseMeasure;
|
|
|
193
194
|
* @internal
|
|
194
195
|
*/
|
|
195
196
|
class DimensionalCalculatedMeasure extends AbstractMeasure {
|
|
196
|
-
constructor(name, expression, context, format, desc, sort) {
|
|
197
|
-
super(name, types_js_1.MetadataTypes.CalculatedMeasure, format, desc, sort);
|
|
197
|
+
constructor(name, expression, context, format, desc, sort, composeCode) {
|
|
198
|
+
super(name, types_js_1.MetadataTypes.CalculatedMeasure, format, desc, sort, composeCode);
|
|
198
199
|
this.expression = expression;
|
|
199
200
|
this.context = context;
|
|
200
201
|
}
|
|
@@ -205,7 +206,7 @@ class DimensionalCalculatedMeasure extends AbstractMeasure {
|
|
|
205
206
|
* @returns An instance representing the sorted {@link Measure} of this instance
|
|
206
207
|
*/
|
|
207
208
|
sort(sort) {
|
|
208
|
-
return new DimensionalCalculatedMeasure(this.name, this.expression, this.context, this._format, this.description, sort);
|
|
209
|
+
return new DimensionalCalculatedMeasure(this.name, this.expression, this.context, this._format, this.description, sort, this.composeCode);
|
|
209
210
|
}
|
|
210
211
|
/**
|
|
211
212
|
* Gets a formatted {@link Measure} with the given definition
|
|
@@ -216,7 +217,7 @@ class DimensionalCalculatedMeasure extends AbstractMeasure {
|
|
|
216
217
|
* @returns An instance representing the formatted {@link Measure} of this instance
|
|
217
218
|
*/
|
|
218
219
|
format(format) {
|
|
219
|
-
return new DimensionalCalculatedMeasure(this.name, this.expression, this.context, format, this.description, this._sort);
|
|
220
|
+
return new DimensionalCalculatedMeasure(this.name, this.expression, this.context, format, this.description, this._sort, this.composeCode);
|
|
220
221
|
}
|
|
221
222
|
/**
|
|
222
223
|
* gets the element's ID
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -86,7 +86,6 @@ export * from './dimensional-model/measures/measures.js';
|
|
|
86
86
|
*/
|
|
87
87
|
export * as measureFactory from './dimensional-model/measures/factory.js';
|
|
88
88
|
export * from './dimensional-model/simple-column-types.js';
|
|
89
|
-
export * from './dimensional-model/filter-relations.js';
|
|
90
89
|
/**
|
|
91
90
|
* Functions to create elements for advanced analytics – for example, attributes and measures for constructing a custom Boxplot chart
|
|
92
91
|
*
|
|
@@ -94,4 +93,5 @@ export * from './dimensional-model/filter-relations.js';
|
|
|
94
93
|
*/
|
|
95
94
|
export * as analyticsFactory from './dimensional-model/analytics/factory.js';
|
|
96
95
|
export * from './utils.js';
|
|
96
|
+
export * from './dimensional-model/filters/index.js';
|
|
97
97
|
export { type TranslationDictionary, PACKAGE_NAMESPACE as translationNamespace, } from './translation/resources/index.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -116,7 +116,6 @@ __exportStar(require("./dimensional-model/measures/measures.js"), exports);
|
|
|
116
116
|
*/
|
|
117
117
|
exports.measureFactory = __importStar(require("./dimensional-model/measures/factory.js"));
|
|
118
118
|
__exportStar(require("./dimensional-model/simple-column-types.js"), exports);
|
|
119
|
-
__exportStar(require("./dimensional-model/filter-relations.js"), exports);
|
|
120
119
|
/**
|
|
121
120
|
* Functions to create elements for advanced analytics – for example, attributes and measures for constructing a custom Boxplot chart
|
|
122
121
|
*
|
|
@@ -124,5 +123,6 @@ __exportStar(require("./dimensional-model/filter-relations.js"), exports);
|
|
|
124
123
|
*/
|
|
125
124
|
exports.analyticsFactory = __importStar(require("./dimensional-model/analytics/factory.js"));
|
|
126
125
|
__exportStar(require("./utils.js"), exports);
|
|
126
|
+
__exportStar(require("./dimensional-model/filters/index.js"), exports);
|
|
127
127
|
var index_js_1 = require("./translation/resources/index.js");
|
|
128
128
|
Object.defineProperty(exports, "translationNamespace", { enumerable: true, get: function () { return index_js_1.PACKAGE_NAMESPACE; } });
|
package/dist/cjs/interfaces.d.ts
CHANGED
|
@@ -134,11 +134,11 @@ export interface CalculatedMeasureColumn {
|
|
|
134
134
|
export declare type DataSourceInfo = {
|
|
135
135
|
/**
|
|
136
136
|
* @internal
|
|
137
|
-
|
|
137
|
+
*/
|
|
138
138
|
id?: string;
|
|
139
139
|
/**
|
|
140
140
|
* @internal
|
|
141
|
-
|
|
141
|
+
*/
|
|
142
142
|
address?: string;
|
|
143
143
|
title: string;
|
|
144
144
|
type: 'live' | 'elasticube';
|