From 7b823c962ff5cc9c90ce3642f3a79aeecc399fa7 Mon Sep 17 00:00:00 2001 From: NAGULAN S Date: Sun, 20 Oct 2024 18:57:17 +0530 Subject: [PATCH 1/5] feat(cubejs-client-core): fill missing dates with custom measure value --- packages/cubejs-client-core/index.d.ts | 6 +++++- packages/cubejs-client-core/src/ResultSet.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/cubejs-client-core/index.d.ts b/packages/cubejs-client-core/index.d.ts index 76af406b6bb93..6da2c93e43b2d 100644 --- a/packages/cubejs-client-core/index.d.ts +++ b/packages/cubejs-client-core/index.d.ts @@ -252,9 +252,13 @@ declare module '@cubejs-client/core' { */ y?: string[]; /** - * If `true` missing dates on the time dimensions will be filled with `0` for all measures.Note: the `fillMissingDates` option set to `true` will override any **order** applied to the query + * If `true` missing dates on the time dimensions will be filled with fillWithValue or `0` by default for all measures.Note: the `fillMissingDates` option set to `true` will override any **order** applied to the query */ fillMissingDates?: boolean | null; + /** + * Value to autofill all the missing date's measure. + */ + fillWithValue?: string | null; /** * Give each series a prefix alias. Should have one entry for each query:measure. See [chartPivot](#result-set-chart-pivot) */ diff --git a/packages/cubejs-client-core/src/ResultSet.js b/packages/cubejs-client-core/src/ResultSet.js index 3ec2e184ae40d..02777216fa126 100644 --- a/packages/cubejs-client-core/src/ResultSet.js +++ b/packages/cubejs-client-core/src/ResultSet.js @@ -341,7 +341,7 @@ class ResultSet { const pivotImpl = (resultIndex = 0) => { let groupByXAxis = groupByToPairs(({ xValues }) => this.axisValuesString(xValues)); - const measureValue = (row, measure) => row[measure] || 0; + const measureValue = (row, measure) => row[measure] || pivotConfig.fillWithValue || 0; if ( pivotConfig.fillMissingDates && From aa7d6dbc1f79936bd04faa80df22fe61e90308a7 Mon Sep 17 00:00:00 2001 From: NAGULAN S Date: Sun, 20 Oct 2024 19:04:08 +0530 Subject: [PATCH 2/5] test: fill missing dates with custom value --- .../src/tests/ResultSet.test.js | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/packages/cubejs-client-core/src/tests/ResultSet.test.js b/packages/cubejs-client-core/src/tests/ResultSet.test.js index 229acf0c82fc0..965a13bbd6233 100644 --- a/packages/cubejs-client-core/src/tests/ResultSet.test.js +++ b/packages/cubejs-client-core/src/tests/ResultSet.test.js @@ -1418,6 +1418,66 @@ describe('ResultSet', () => { ]); }); + test('fill missing dates with custom value', () => { + const resultSet = new ResultSet({ + query: { + measures: ['Orders.total'], + timeDimensions: [ + { + dimension: 'Orders.createdAt', + granularity: 'day', + dateRange: ['2020-01-08T00:00:00.000', '2020-01-11T23:59:59.999'] + } + ], + filters: [], + timezone: 'UTC' + }, + data: [ + { + 'Orders.createdAt': '2020-01-08T00:00:00.000', + 'Orders.total': 1 + }, + { + 'Orders.createdAt': '2020-01-10T00:00:00.000', + 'Orders.total': 10 + } + ], + annotation: { + measures: {}, + dimensions: {}, + segments: {}, + timeDimensions: { + 'Orders.createdAt': { + title: 'Orders Created at', + shortTitle: 'Created at', + type: 'time' + } + } + } + }); + + expect(resultSet.tablePivot({ + 'fillWithValue': 5 + })).toEqual([ + { + 'Orders.createdAt.day': '2020-01-08T00:00:00.000', + 'Orders.total': 1 + }, + { + 'Orders.createdAt.day': '2020-01-09T00:00:00.000', + 'Orders.total': 5 + }, + { + 'Orders.createdAt.day': '2020-01-10T00:00:00.000', + 'Orders.total': 10 + }, + { + 'Orders.createdAt.day': '2020-01-11T00:00:00.000', + 'Orders.total': 5 + } + ]); + }); + test('same dimension and time dimension without granularity', () => { const resultSet = new ResultSet({ query: { From 2d427c3c835ac2dd0916ba9cf5d767a481d971f1 Mon Sep 17 00:00:00 2001 From: NAGULAN S Date: Fri, 22 Nov 2024 20:59:29 +0530 Subject: [PATCH 3/5] feat(cubejs-client-core): modify cubejs-client-core doc --- docs/pages/reference/frontend/cubejs-client-core.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/pages/reference/frontend/cubejs-client-core.mdx b/docs/pages/reference/frontend/cubejs-client-core.mdx index 4e871b09f9358..86b1ed068e191 100644 --- a/docs/pages/reference/frontend/cubejs-client-core.mdx +++ b/docs/pages/reference/frontend/cubejs-client-core.mdx @@ -838,7 +838,8 @@ resultSet.tablePivot({ Name | Type | Description | ------ | ------ | ------ | aliasSeries? | string[] | Give each series a prefix alias. Should have one entry for each query:measure. See [chartPivot](#result-set-chart-pivot) | -fillMissingDates? | boolean | null | **`true` by default.** If set to `true`, missing dates on the time dimensions will be filled with `0` for all measures. Note: setting this option to `true` will override any `order` applied to the query. | +fillMissingDates? | boolean | null | **`true` by default.** If set to `true`, missing dates on the time dimensions will be filled with `fillWithValue` or `0` by default for all measures. Note: setting this option to `true` will override any `order` applied to the query. | +fillWithValue? | string | null | Value to autofill all the missing date's measure. | x? | string[] | Dimensions to put on **x** or **rows** axis. | y? | string[] | Dimensions to put on **y** or **columns** axis. | @@ -1055,4 +1056,4 @@ values? | never | [link-mdn-max-safe-integer]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER [ref-query-format]: /product/apis-integrations/rest-api/query-format -[ref-security]: /product/auth \ No newline at end of file +[ref-security]: /product/auth From d777ddb1c6905090a06fafddb576ad600633f465 Mon Sep 17 00:00:00 2001 From: NAGULAN S Date: Sun, 15 Dec 2024 16:37:31 +0530 Subject: [PATCH 4/5] test: fill missing dates with custom string --- .../src/tests/ResultSet.test.js | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/packages/cubejs-client-core/src/tests/ResultSet.test.js b/packages/cubejs-client-core/src/tests/ResultSet.test.js index 965a13bbd6233..f1c997eb68119 100644 --- a/packages/cubejs-client-core/src/tests/ResultSet.test.js +++ b/packages/cubejs-client-core/src/tests/ResultSet.test.js @@ -1478,6 +1478,66 @@ describe('ResultSet', () => { ]); }); + test('fill missing dates with custom string', () => { + const resultSet = new ResultSet({ + query: { + measures: ['Orders.total'], + timeDimensions: [ + { + dimension: 'Orders.createdAt', + granularity: 'day', + dateRange: ['2020-01-08T00:00:00.000', '2020-01-11T23:59:59.999'] + } + ], + filters: [], + timezone: 'UTC' + }, + data: [ + { + 'Orders.createdAt': '2020-01-08T00:00:00.000', + 'Orders.total': 1 + }, + { + 'Orders.createdAt': '2020-01-10T00:00:00.000', + 'Orders.total': 10 + } + ], + annotation: { + measures: {}, + dimensions: {}, + segments: {}, + timeDimensions: { + 'Orders.createdAt': { + title: 'Orders Created at', + shortTitle: 'Created at', + type: 'time' + } + } + } + }); + + expect(resultSet.tablePivot({ + 'fillWithValue': 'N/A' + })).toEqual([ + { + 'Orders.createdAt.day': '2020-01-08T00:00:00.000', + 'Orders.total': 1 + }, + { + 'Orders.createdAt.day': '2020-01-09T00:00:00.000', + 'Orders.total': "N/A" + }, + { + 'Orders.createdAt.day': '2020-01-10T00:00:00.000', + 'Orders.total': 10 + }, + { + 'Orders.createdAt.day': '2020-01-11T00:00:00.000', + 'Orders.total': "N/A" + } + ]); + }); + test('same dimension and time dimension without granularity', () => { const resultSet = new ResultSet({ query: { From 29206f61928a88d6541df8351c053728ed2d5c69 Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Wed, 18 Dec 2024 22:49:13 +0200 Subject: [PATCH 5/5] =?UTF-8?q?fix=20type=20for=C2=A0fillWithValue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/cubejs-client-core/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cubejs-client-core/index.d.ts b/packages/cubejs-client-core/index.d.ts index 6da2c93e43b2d..e15882450f1e7 100644 --- a/packages/cubejs-client-core/index.d.ts +++ b/packages/cubejs-client-core/index.d.ts @@ -258,7 +258,7 @@ declare module '@cubejs-client/core' { /** * Value to autofill all the missing date's measure. */ - fillWithValue?: string | null; + fillWithValue?: string | number | null; /** * Give each series a prefix alias. Should have one entry for each query:measure. See [chartPivot](#result-set-chart-pivot) */