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

beto pushed a commit to branch dbt-metricflow
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 1d82e85a557d4cc19fa2906bc021b64285315acf
Author: Beto Dealmeida <[email protected]>
AuthorDate: Thu Jul 17 18:31:03 2025 -0400

    More charts
---
 .../src/shared-controls/dndControls.tsx            | 70 +++++++++++++++++-----
 .../controls/SemanticLayerVerification.tsx         | 56 +++++++++++++++++
 2 files changed, 112 insertions(+), 14 deletions(-)

diff --git 
a/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/dndControls.tsx
 
b/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/dndControls.tsx
index 10001a954c..4604d49d4c 100644
--- 
a/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/dndControls.tsx
+++ 
b/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/dndControls.tsx
@@ -270,8 +270,8 @@ export const dndColumnsControl = 
enhanceControlWithSemanticLayer(
   'columns',
 );
 
-export const dndSeriesControl: typeof dndGroupByControl = {
-  ...dndGroupByControl,
+const baseDndSeriesControl: typeof baseDndGroupByControl = {
+  ...baseDndGroupByControl,
   label: t('Dimension'),
   multi: false,
   default: null,
@@ -281,8 +281,14 @@ export const dndSeriesControl: typeof dndGroupByControl = {
   ),
 };
 
-export const dndEntityControl: typeof dndGroupByControl = {
-  ...dndGroupByControl,
+export const dndSeriesControl = enhanceControlWithSemanticLayer(
+  baseDndSeriesControl,
+  'series',
+  'columns',
+);
+
+const baseDndEntityControl: typeof baseDndGroupByControl = {
+  ...baseDndGroupByControl,
   label: t('Entity'),
   default: null,
   multi: false,
@@ -290,6 +296,12 @@ export const dndEntityControl: typeof dndGroupByControl = {
   description: t('This defines the element to be plotted on the chart'),
 };
 
+export const dndEntityControl = enhanceControlWithSemanticLayer(
+  baseDndEntityControl,
+  'entity',
+  'columns',
+);
+
 export const dndAdhocFilterControl: SharedControlConfig<
   'DndFilterSelect' | 'AdhocFilterControl'
 > = {
@@ -399,15 +411,21 @@ export const dndSortByControl: SharedControlConfig<
   }),
 };
 
-export const dndSizeControl: typeof dndAdhocMetricControl = {
-  ...dndAdhocMetricControl,
+const baseDndSizeControl: typeof baseDndAdhocMetricControl = {
+  ...baseDndAdhocMetricControl,
   label: t('Bubble Size'),
   description: t('Metric used to calculate bubble size'),
   default: null,
 };
 
-export const dndXControl: typeof dndAdhocMetricControl = {
-  ...dndAdhocMetricControl,
+export const dndSizeControl = enhanceControlWithSemanticLayer(
+  baseDndSizeControl,
+  'size',
+  'metrics',
+);
+
+const baseDndXControl: typeof baseDndAdhocMetricControl = {
+  ...baseDndAdhocMetricControl,
   label: t('X Axis'),
   description: t(
     "The dataset column/metric that returns the values on your chart's 
x-axis.",
@@ -415,8 +433,14 @@ export const dndXControl: typeof dndAdhocMetricControl = {
   default: null,
 };
 
-export const dndYControl: typeof dndAdhocMetricControl = {
-  ...dndAdhocMetricControl,
+export const dndXControl = enhanceControlWithSemanticLayer(
+  baseDndXControl,
+  'x',
+  'metrics',
+);
+
+const baseDndYControl: typeof baseDndAdhocMetricControl = {
+  ...baseDndAdhocMetricControl,
   label: t('Y Axis'),
   description: t(
     "The dataset column/metric that returns the values on your chart's 
y-axis.",
@@ -424,14 +448,26 @@ export const dndYControl: typeof dndAdhocMetricControl = {
   default: null,
 };
 
-export const dndSecondaryMetricControl: typeof dndAdhocMetricControl = {
-  ...dndAdhocMetricControl,
+export const dndYControl = enhanceControlWithSemanticLayer(
+  baseDndYControl,
+  'y',
+  'metrics',
+);
+
+const baseDndSecondaryMetricControl: typeof baseDndAdhocMetricControl = {
+  ...baseDndAdhocMetricControl,
   label: t('Color Metric'),
   default: null,
   validators: [],
   description: t('A metric to use for color'),
 };
 
+export const dndSecondaryMetricControl = enhanceControlWithSemanticLayer(
+  baseDndSecondaryMetricControl,
+  'secondary_metric',
+  'metrics',
+);
+
 export const dndGranularitySqlaControl: typeof dndSeriesControl = {
   ...dndSeriesControl,
   ...temporalColumnMixin,
@@ -452,7 +488,13 @@ export const dndGranularitySqlaControl: typeof 
dndSeriesControl = {
   valueKey: 'column_name',
 };
 
-export const dndXAxisControl: typeof dndGroupByControl = {
-  ...dndGroupByControl,
+const baseDndXAxisControl: typeof baseDndGroupByControl = {
+  ...baseDndGroupByControl,
   ...xAxisMixin,
 };
+
+export const dndXAxisControl = enhanceControlWithSemanticLayer(
+  baseDndXAxisControl,
+  'x_axis',
+  'columns',
+);
diff --git 
a/superset-frontend/src/explore/components/controls/SemanticLayerVerification.tsx
 
b/superset-frontend/src/explore/components/controls/SemanticLayerVerification.tsx
index 303d22af3f..3ef71373dd 100644
--- 
a/superset-frontend/src/explore/components/controls/SemanticLayerVerification.tsx
+++ 
b/superset-frontend/src/explore/components/controls/SemanticLayerVerification.tsx
@@ -47,6 +47,34 @@ export function collectQueryFields(formData: any): {
         : [formData.columns]),
     );
   }
+  if (formData.series_columns) {
+    dimensions.push(
+      ...(Array.isArray(formData.series_columns)
+        ? formData.series_columns
+        : [formData.series_columns]),
+    );
+  }
+  if (formData.series) {
+    dimensions.push(
+      ...(Array.isArray(formData.series)
+        ? formData.series
+        : [formData.series]),
+    );
+  }
+  if (formData.entity) {
+    dimensions.push(
+      ...(Array.isArray(formData.entity)
+        ? formData.entity
+        : [formData.entity]),
+    );
+  }
+  if (formData.x_axis) {
+    dimensions.push(
+      ...(Array.isArray(formData.x_axis)
+        ? formData.x_axis
+        : [formData.x_axis]),
+    );
+  }
 
   // Extract metrics from various field types
   if (formData.metrics) {
@@ -59,6 +87,9 @@ export function collectQueryFields(formData: any): {
   if (formData.metric) {
     metrics.push(formData.metric);
   }
+  if (formData.metric_2) {
+    metrics.push(formData.metric_2);
+  }
   if (formData.percent_metrics) {
     metrics.push(
       ...(Array.isArray(formData.percent_metrics)
@@ -66,6 +97,21 @@ export function collectQueryFields(formData: any): {
         : [formData.percent_metrics]),
     );
   }
+  if (formData.timeseries_limit_metric) {
+    metrics.push(formData.timeseries_limit_metric);
+  }
+  if (formData.x) {
+    metrics.push(formData.x);
+  }
+  if (formData.y) {
+    metrics.push(formData.y);
+  }
+  if (formData.size) {
+    metrics.push(formData.size);
+  }
+  if (formData.secondary_metric) {
+    metrics.push(formData.secondary_metric);
+  }
 
   // Filter out null/undefined values and convert objects to strings if needed
   const cleanDimensions = dimensions
@@ -456,12 +502,22 @@ export function createSemanticLayerOnChange(
  * Get list of control fields that should trigger re-rendering
  */
 export const SEMANTIC_LAYER_CONTROL_FIELDS = [
+  // Metric controls
   'metrics',
   'metric',
   'metric_2',
   'percent_metrics',
   'timeseries_limit_metric',
+  'x',
+  'y',
+  'size',
+  'secondary_metric',
+  
+  // Dimension controls
   'groupby',
   'columns',
   'series_columns',
+  'series',
+  'entity',
+  'x_axis',
 ];

Reply via email to