You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by kg...@apache.org on 2023/03/14 14:50:27 UTC

[superset] branch master updated: fix(chart-controls): Error if x_axis_sort and timeseries_limit_metric are included in main metrics (#23365)

This is an automated email from the ASF dual-hosted git repository.

kgabryje pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 63513a5873 fix(chart-controls): Error if x_axis_sort and timeseries_limit_metric are included in main metrics (#23365)
63513a5873 is described below

commit 63513a5873460ee508c71b504d5e1cfb5f42bbb8
Author: Kamil Gabryjelski <ka...@gmail.com>
AuthorDate: Tue Mar 14 15:50:03 2023 +0100

    fix(chart-controls): Error if x_axis_sort and timeseries_limit_metric are included in main metrics (#23365)
---
 .../src/operators/utils/extractExtraMetrics.ts     |  5 ++--
 .../src/shared-controls/customControls.tsx         | 12 ++++----
 .../operators/utils/extractExtraMetrics.test.ts    | 32 ++++++++++++++++++++++
 3 files changed, 40 insertions(+), 9 deletions(-)

diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/operators/utils/extractExtraMetrics.ts b/superset-frontend/packages/superset-ui-chart-controls/src/operators/utils/extractExtraMetrics.ts
index 74928f836f..28d9ec40ad 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/src/operators/utils/extractExtraMetrics.ts
+++ b/superset-frontend/packages/superset-ui-chart-controls/src/operators/utils/extractExtraMetrics.ts
@@ -25,12 +25,13 @@ import {
 export function extractExtraMetrics(
   formData: QueryFormData,
 ): QueryFormMetric[] {
-  const { groupby, timeseries_limit_metric, x_axis_sort } = formData;
+  const { groupby, timeseries_limit_metric, x_axis_sort, metrics } = formData;
   const extra_metrics: QueryFormMetric[] = [];
   if (
     !(groupby || []).length &&
     timeseries_limit_metric &&
-    getMetricLabel(timeseries_limit_metric) === x_axis_sort
+    getMetricLabel(timeseries_limit_metric) === x_axis_sort &&
+    !metrics?.some(metric => getMetricLabel(metric) === x_axis_sort)
   ) {
     extra_metrics.push(timeseries_limit_metric);
   }
diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/customControls.tsx b/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/customControls.tsx
index 8e8f4d8400..5ac303f54d 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/customControls.tsx
+++ b/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/customControls.tsx
@@ -79,6 +79,7 @@ export const xAxisSortControl = {
         ...ensureIsArray(controls?.metrics?.value as QueryFormMetric),
         controls?.timeseries_limit_metric?.value as QueryFormMetric,
       ].filter(Boolean);
+      const metricLabels = [...new Set(metrics.map(getMetricLabel))];
       const options = [
         ...columns.map(column => {
           const value = getColumnLabel(column);
@@ -87,13 +88,10 @@ export const xAxisSortControl = {
             label: dataset?.verbose_map?.[value] || value,
           };
         }),
-        ...metrics.map(metric => {
-          const value = getMetricLabel(metric);
-          return {
-            value,
-            label: dataset?.verbose_map?.[value] || value,
-          };
-        }),
+        ...metricLabels.map(value => ({
+          value,
+          label: dataset?.verbose_map?.[value] || value,
+        })),
       ];
 
       const shouldReset = !(
diff --git a/superset-frontend/packages/superset-ui-chart-controls/test/operators/utils/extractExtraMetrics.test.ts b/superset-frontend/packages/superset-ui-chart-controls/test/operators/utils/extractExtraMetrics.test.ts
index 89f4c11181..b7c1bf0475 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/test/operators/utils/extractExtraMetrics.test.ts
+++ b/superset-frontend/packages/superset-ui-chart-controls/test/operators/utils/extractExtraMetrics.test.ts
@@ -92,3 +92,35 @@ test('returns empty array if groupby populated', () => {
     }),
   ).toEqual([]);
 });
+
+test('returns empty array if timeseries_limit_metric and x_axis_sort are included in main metrics array', () => {
+  expect(
+    extractExtraMetrics({
+      ...baseFormData,
+      timeseries_limit_metric: 'a',
+      x_axis_sort: 'a',
+    }),
+  ).toEqual([]);
+});
+
+test('returns empty array if timeseries_limit_metric and x_axis_sort are included in main metrics array with adhoc metrics', () => {
+  expect(
+    extractExtraMetrics({
+      ...baseFormData,
+      metrics: [
+        'a',
+        {
+          expressionType: 'SIMPLE',
+          aggregate: 'SUM',
+          column: { column_name: 'num' },
+        },
+      ],
+      timeseries_limit_metric: {
+        expressionType: 'SIMPLE',
+        aggregate: 'SUM',
+        column: { column_name: 'num' },
+      },
+      x_axis_sort: 'SUM(num)',
+    }),
+  ).toEqual([]);
+});