@sisense/sdk-data 0.16.0 → 1.1.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/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import './translation/initialize-i18n.js';
2
2
  /**
3
3
  * @packageDocumentation
4
- * @beta
5
4
  */
6
5
  export * from './interfaces.js';
7
6
  export * from './dimensional-model/types.js';
@@ -13,40 +12,41 @@ export * from './dimensional-model/dimensions.js';
13
12
  export * from './dimensional-model/factory.js';
14
13
  export * from './dimensional-model/filters/filters.js';
15
14
  /**
16
- * Functions to create date, text, or numeric filters on certain data columns
15
+ * Functions to create date, text, or numeric filters on specified data.
17
16
  *
18
- * They are similar to [Dashboard and Widget Filters](https://docs.sisense.com/main/SisenseLinux/build-formulas.htm) in Sisense.
17
+ * Filters created with these functions can be used to:
19
18
  *
20
- * Filters created with these functions can be used in the data options of UI components such as
21
- * {@link @sisense/sdk-ui!ChartProps | Chart}, {@link @sisense/sdk-ui!ChartWidgetProps | ChartWidget},
22
- * and {@link @sisense/sdk-ui!ExecuteQueryProps | ExecuteQuery}.
19
+ * + Filter explicit queries by query components or query functions
20
+ * + Filter or highlight queries used by UI components, such as charts
21
+ * + Set the filters of filter components
23
22
  *
24
23
  * @example
25
- * Example of using the component to query the `Sample ECommerce` data source.
26
- * Function `filters.greaterThan` is used to create a filter on `Revenue` to get values
24
+ * Example of using React hook `useExecuteQuery` to query the `Sample ECommerce` data source.
25
+ * Factory function `filterFactory.greaterThan()` is used to create a filter on `Revenue` to get values
27
26
  * greater than 1000.
28
27
  * ```tsx
29
- * <ExecuteQuery
30
- * dataSource={DM.DataSource}
31
- * dimensions={[DM.Commerce.AgeRange]}
32
- * measures={[measures.sum(DM.Commerce.Revenue)]}
33
- * filters={[filters.greaterThan(DM.Commerce.Revenue, 1000)]}
34
- * >
35
- * {
36
- * (data) => {
37
- * if (data) {
38
- * console.log(data);
39
- * return <div>{`Total Rows: ${data.rows.length}`}</div>;
40
- * }
28
+ * const { data, isLoading, isError } = useExecuteQuery({
29
+ * dataSource: DM.DataSource,
30
+ * dimensions: [DM.Commerce.AgeRange],
31
+ * measures: [measureFactory.sum(DM.Commerce.Revenue)],
32
+ * filters: [filterFactory.greaterThan(DM.Commerce.Revenue, 1000)],
33
+ * });
34
+ * if (isLoading) {
35
+ * return <div>Loading...</div>;
36
+ * }
37
+ * if (isError) {
38
+ * return <div>Error</div>;
39
+ * }
40
+ * if (data) {
41
+ * return <div>{`Total Rows: ${data.rows.length}`}</div>;
41
42
  * }
42
- * }
43
- * </ExecuteQuery>
43
+ * return null;
44
44
  * ```
45
45
  */
46
- export * as filters from './dimensional-model/filters/factory.js';
46
+ export * as filterFactory from './dimensional-model/filters/factory.js';
47
47
  export * from './dimensional-model/measures/measures.js';
48
48
  /**
49
- * Functions to build formulas that aggregate, summarize, and accumulate data,
49
+ * Functions to create measures that aggregate, summarize, and accumulate data,
50
50
  * plus show changes in data over time.
51
51
  *
52
52
  * They are similar to [Formulas](https://docs.sisense.com/main/SisenseLinux/build-formulas.htm) in Sisense.
@@ -56,25 +56,31 @@ export * from './dimensional-model/measures/measures.js';
56
56
  * and {@link @sisense/sdk-ui!ExecuteQueryProps | ExecuteQuery}.
57
57
  *
58
58
  * @example
59
- * Example of using the component to query the `Sample ECommerce` data source.
60
- * Function `measures.sum` is used to create a measure that sums the `Revenue` column.
59
+ * Example of using React hook useExecuteQuery to query the `Sample ECommerce` data source.
60
+ * Factory function `measureFactory.sum()` is used to create a measure that sums the `Revenue` column.
61
61
  * ```tsx
62
- * <ExecuteQuery
63
- * dataSource={DM.DataSource}
64
- * dimensions={[DM.Commerce.AgeRange]}
65
- * measures={[measures.sum(DM.Commerce.Revenue)]}
66
- * filters={[filters.greaterThan(DM.Commerce.Revenue, 1000)]}
67
- * >
68
- * {
69
- * (data) => {
70
- * if (data) {
71
- * console.log(data);
72
- * return <div>{`Total Rows: ${data.rows.length}`}</div>;
73
- * }
62
+ * const { data, isLoading, isError } = useExecuteQuery({
63
+ * dataSource: DM.DataSource,
64
+ * dimensions: [DM.Commerce.AgeRange],
65
+ * measures: [measureFactory.sum(DM.Commerce.Revenue)],
66
+ * filters: [filterFactory.greaterThan(DM.Commerce.Revenue, 1000)],
67
+ * });
68
+ * if (isLoading) {
69
+ * return <div>Loading...</div>;
74
70
  * }
75
- * }
76
- * </ExecuteQuery>
71
+ * if (isError) {
72
+ * return <div>Error</div>;
73
+ * }
74
+ * if (data) {
75
+ * return <div>{`Total Rows: ${data.rows.length}`}</div>;
76
+ * }
77
+ * return null;
77
78
  * ```
78
79
  */
79
- export * as measures from './dimensional-model/measures/factory.js';
80
+ export * as measureFactory from './dimensional-model/measures/factory.js';
80
81
  export * from './dimensional-model/simple-column-types.js';
82
+ /**
83
+ * Functions to create elements for advanced analytics – for example, attributes and measures for constructing a custom Boxplot chart
84
+ */
85
+ export * as analyticsFactory from './dimensional-model/analytics/factory.js';
86
+ export * from './utils.js';
package/dist/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import './translation/initialize-i18n.js';
2
2
  /**
3
3
  * @packageDocumentation
4
- * @beta
5
4
  */
6
5
  export * from './interfaces.js';
7
6
  export * from './dimensional-model/types.js';
@@ -13,40 +12,41 @@ export * from './dimensional-model/dimensions.js';
13
12
  export * from './dimensional-model/factory.js';
14
13
  export * from './dimensional-model/filters/filters.js';
15
14
  /**
16
- * Functions to create date, text, or numeric filters on certain data columns
15
+ * Functions to create date, text, or numeric filters on specified data.
17
16
  *
18
- * They are similar to [Dashboard and Widget Filters](https://docs.sisense.com/main/SisenseLinux/build-formulas.htm) in Sisense.
17
+ * Filters created with these functions can be used to:
19
18
  *
20
- * Filters created with these functions can be used in the data options of UI components such as
21
- * {@link @sisense/sdk-ui!ChartProps | Chart}, {@link @sisense/sdk-ui!ChartWidgetProps | ChartWidget},
22
- * and {@link @sisense/sdk-ui!ExecuteQueryProps | ExecuteQuery}.
19
+ * + Filter explicit queries by query components or query functions
20
+ * + Filter or highlight queries used by UI components, such as charts
21
+ * + Set the filters of filter components
23
22
  *
24
23
  * @example
25
- * Example of using the component to query the `Sample ECommerce` data source.
26
- * Function `filters.greaterThan` is used to create a filter on `Revenue` to get values
24
+ * Example of using React hook `useExecuteQuery` to query the `Sample ECommerce` data source.
25
+ * Factory function `filterFactory.greaterThan()` is used to create a filter on `Revenue` to get values
27
26
  * greater than 1000.
28
27
  * ```tsx
29
- * <ExecuteQuery
30
- * dataSource={DM.DataSource}
31
- * dimensions={[DM.Commerce.AgeRange]}
32
- * measures={[measures.sum(DM.Commerce.Revenue)]}
33
- * filters={[filters.greaterThan(DM.Commerce.Revenue, 1000)]}
34
- * >
35
- * {
36
- * (data) => {
37
- * if (data) {
38
- * console.log(data);
39
- * return <div>{`Total Rows: ${data.rows.length}`}</div>;
40
- * }
28
+ * const { data, isLoading, isError } = useExecuteQuery({
29
+ * dataSource: DM.DataSource,
30
+ * dimensions: [DM.Commerce.AgeRange],
31
+ * measures: [measureFactory.sum(DM.Commerce.Revenue)],
32
+ * filters: [filterFactory.greaterThan(DM.Commerce.Revenue, 1000)],
33
+ * });
34
+ * if (isLoading) {
35
+ * return <div>Loading...</div>;
36
+ * }
37
+ * if (isError) {
38
+ * return <div>Error</div>;
39
+ * }
40
+ * if (data) {
41
+ * return <div>{`Total Rows: ${data.rows.length}`}</div>;
41
42
  * }
42
- * }
43
- * </ExecuteQuery>
43
+ * return null;
44
44
  * ```
45
45
  */
46
- export * as filters from './dimensional-model/filters/factory.js';
46
+ export * as filterFactory from './dimensional-model/filters/factory.js';
47
47
  export * from './dimensional-model/measures/measures.js';
48
48
  /**
49
- * Functions to build formulas that aggregate, summarize, and accumulate data,
49
+ * Functions to create measures that aggregate, summarize, and accumulate data,
50
50
  * plus show changes in data over time.
51
51
  *
52
52
  * They are similar to [Formulas](https://docs.sisense.com/main/SisenseLinux/build-formulas.htm) in Sisense.
@@ -56,25 +56,31 @@ export * from './dimensional-model/measures/measures.js';
56
56
  * and {@link @sisense/sdk-ui!ExecuteQueryProps | ExecuteQuery}.
57
57
  *
58
58
  * @example
59
- * Example of using the component to query the `Sample ECommerce` data source.
60
- * Function `measures.sum` is used to create a measure that sums the `Revenue` column.
59
+ * Example of using React hook useExecuteQuery to query the `Sample ECommerce` data source.
60
+ * Factory function `measureFactory.sum()` is used to create a measure that sums the `Revenue` column.
61
61
  * ```tsx
62
- * <ExecuteQuery
63
- * dataSource={DM.DataSource}
64
- * dimensions={[DM.Commerce.AgeRange]}
65
- * measures={[measures.sum(DM.Commerce.Revenue)]}
66
- * filters={[filters.greaterThan(DM.Commerce.Revenue, 1000)]}
67
- * >
68
- * {
69
- * (data) => {
70
- * if (data) {
71
- * console.log(data);
72
- * return <div>{`Total Rows: ${data.rows.length}`}</div>;
73
- * }
62
+ * const { data, isLoading, isError } = useExecuteQuery({
63
+ * dataSource: DM.DataSource,
64
+ * dimensions: [DM.Commerce.AgeRange],
65
+ * measures: [measureFactory.sum(DM.Commerce.Revenue)],
66
+ * filters: [filterFactory.greaterThan(DM.Commerce.Revenue, 1000)],
67
+ * });
68
+ * if (isLoading) {
69
+ * return <div>Loading...</div>;
74
70
  * }
75
- * }
76
- * </ExecuteQuery>
71
+ * if (isError) {
72
+ * return <div>Error</div>;
73
+ * }
74
+ * if (data) {
75
+ * return <div>{`Total Rows: ${data.rows.length}`}</div>;
76
+ * }
77
+ * return null;
77
78
  * ```
78
79
  */
79
- export * as measures from './dimensional-model/measures/factory.js';
80
+ export * as measureFactory from './dimensional-model/measures/factory.js';
80
81
  export * from './dimensional-model/simple-column-types.js';
82
+ /**
83
+ * Functions to create elements for advanced analytics – for example, attributes and measures for constructing a custom Boxplot chart
84
+ */
85
+ export * as analyticsFactory from './dimensional-model/analytics/factory.js';
86
+ export * from './utils.js';
@@ -22,7 +22,7 @@ export declare const translation: {
22
22
  unsupportedDatetimeLevel: string;
23
23
  membersFilterNullMember: string;
24
24
  };
25
- unsupportedDimesionalElement: string;
25
+ unsupportedDimensionalElement: string;
26
26
  };
27
27
  };
28
28
  export declare type TranslationDictionary = typeof translation;
@@ -22,6 +22,6 @@ export const translation = {
22
22
  unsupportedDatetimeLevel: 'Filters do not support the next "datetime" levels: Hours, MinutesRoundTo30, MinutesRoundTo15',
23
23
  membersFilterNullMember: 'MembersFilter of {{attributeId}} - member cannot be null',
24
24
  },
25
- unsupportedDimesionalElement: 'Unsupported dimensional element type',
25
+ unsupportedDimensionalElement: 'Unsupported dimensional element type',
26
26
  },
27
27
  };
@@ -23,7 +23,7 @@ export declare const resources: {
23
23
  unsupportedDatetimeLevel: string;
24
24
  membersFilterNullMember: string;
25
25
  };
26
- unsupportedDimesionalElement: string;
26
+ unsupportedDimensionalElement: string;
27
27
  };
28
28
  };
29
29
  uk: {
@@ -47,7 +47,7 @@ export declare const resources: {
47
47
  unsupportedDatetimeLevel: string;
48
48
  membersFilterNullMember: string;
49
49
  };
50
- unsupportedDimesionalElement: string;
50
+ unsupportedDimensionalElement: string;
51
51
  };
52
52
  };
53
53
  };
@@ -22,6 +22,6 @@ export const translation = {
22
22
  unsupportedDatetimeLevel: 'Фільтри не підтримують наступні рівні "datetime": Hours, MinutesRoundTo30, MinutesRoundTo15',
23
23
  membersFilterNullMember: 'MembersFilter у {{attributeId}} - member не може бути нульовим',
24
24
  },
25
- unsupportedDimesionalElement: 'Непідтримуваний тип елемента',
25
+ unsupportedDimensionalElement: 'Непідтримуваний тип елемента',
26
26
  },
27
27
  };
@@ -0,0 +1,16 @@
1
+ import { Filter, FilterRelation } from './index.js';
2
+ /**
3
+ * A more performant, but slightly bulkier, RFC4122v4 implementation. Performance is improved by minimizing calls to random()
4
+ *
5
+ * @internal
6
+ */
7
+ export declare const guidFast: (len?: number) => string;
8
+ /**
9
+ * Function to separate list of filters from the provided relation and get logical relations for jaql
10
+ *
11
+ * @internal
12
+ */
13
+ export declare const getFilterListAndRelations: (filterRelations: FilterRelation | Filter[] | undefined) => {
14
+ filters: Filter[] | undefined;
15
+ relations: FilterRelation | undefined;
16
+ };
package/dist/utils.js ADDED
@@ -0,0 +1,63 @@
1
+ import cloneDeep from 'lodash/cloneDeep.js';
2
+ /**
3
+ * A more performant, but slightly bulkier, RFC4122v4 implementation. Performance is improved by minimizing calls to random()
4
+ *
5
+ * @internal
6
+ */
7
+ export const guidFast = function (len) {
8
+ if (!len) {
9
+ len = 20;
10
+ }
11
+ const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
12
+ const uuid = new Array(len);
13
+ let rnd = 0;
14
+ let r;
15
+ for (let i = 0; i < len; i += 1) {
16
+ if (i > 0 && i % 5 == 0) {
17
+ uuid[i] = '-';
18
+ continue;
19
+ }
20
+ if (rnd <= 0x02) {
21
+ rnd = (0x2000000 + Math.random() * 0x1000000) | 0;
22
+ }
23
+ r = rnd & 0xf;
24
+ rnd = rnd >> 4;
25
+ uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r];
26
+ }
27
+ return uuid.join('');
28
+ };
29
+ /**
30
+ * Function to separate list of filters from the provided relation and get logical relations for jaql
31
+ *
32
+ * @internal
33
+ */
34
+ export const getFilterListAndRelations = (filterRelations) => {
35
+ if (!filterRelations) {
36
+ return { filters: undefined, relations: undefined };
37
+ }
38
+ if (Array.isArray(filterRelations)) {
39
+ return { filters: filterRelations, relations: undefined };
40
+ }
41
+ const filters = new Set();
42
+ function traverse(node) {
43
+ if (!node)
44
+ return node;
45
+ if ('guid' in node) {
46
+ filters.add(node);
47
+ return { instanceid: node.guid };
48
+ }
49
+ else {
50
+ if ('left' in node) {
51
+ node.left = traverse(node.left);
52
+ }
53
+ if ('right' in node) {
54
+ node.right = traverse(node.right);
55
+ }
56
+ return node;
57
+ }
58
+ }
59
+ // Create a deep copy of filterRelations to avoid mutation
60
+ const copiedFilterRelations = cloneDeep(filterRelations);
61
+ const relations = traverse(copiedFilterRelations);
62
+ return { filters: Array.from(filters), relations };
63
+ };
package/package.json CHANGED
@@ -1,6 +1,17 @@
1
1
  {
2
2
  "name": "@sisense/sdk-data",
3
- "version": "0.16.0",
3
+ "homepage": "https://sisense.dev/guides/sdk/",
4
+ "description": "Compose SDK package for implementing the elements of dimensional modeling",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/sisense/compose-sdk-monorepo",
8
+ "directory": "packages/sdk-data"
9
+ },
10
+ "keywords": [
11
+ "Sisense",
12
+ "Compose SDK"
13
+ ],
14
+ "version": "1.1.0",
4
15
  "type": "module",
5
16
  "exports": {
6
17
  ".": "./dist/index.js",
@@ -12,8 +23,8 @@
12
23
  "author": "Sisense ",
13
24
  "license": "SEE LICENSE IN LICENSE.md",
14
25
  "dependencies": {
15
- "@sisense/sdk-common": "^0.16.0",
16
- "@sisense/sdk-rest-client": "^0.16.0",
26
+ "@sisense/sdk-common": "^1.1.0",
27
+ "@sisense/sdk-rest-client": "^1.1.0",
17
28
  "guid-typescript": "^1.0.9",
18
29
  "lodash": "^4.17.21",
19
30
  "numeral": "^2.0.6",