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 b17ea1c875ec71bfe38df3d8de062d37cc824797
Author: Beto Dealmeida <[email protected]>
AuthorDate: Thu Jul 17 16:58:16 2025 -0400

    Checkpoint
---
 .../controls/SemanticLayerVerification.tsx         | 94 +++++++++++++++++++++-
 1 file changed, 91 insertions(+), 3 deletions(-)

diff --git 
a/superset-frontend/src/explore/components/controls/SemanticLayerVerification.tsx
 
b/superset-frontend/src/explore/components/controls/SemanticLayerVerification.tsx
index ed5e24ef18..7b0610f27d 100644
--- 
a/superset-frontend/src/explore/components/controls/SemanticLayerVerification.tsx
+++ 
b/superset-frontend/src/explore/components/controls/SemanticLayerVerification.tsx
@@ -198,19 +198,39 @@ export function createMetricsVerification(controlName?: 
string): AsyncVerify {
     let updatedDatasourceMetrics = dataset.metrics;
     let updatedDatasourceColumns = dataset.columns;
 
+    // Filter valid names to only include those that exist in the original 
datasource
+    const originalDimensionNames = new Set(dataset.columns?.map((col: any) => 
col.column_name) || []);
+    const originalMetricNames = new Set(dataset.metrics?.map((metric: any) => 
metric.metric_name) || []);
+    
+    const filteredValidMetricNames = new Set(
+      validationResult.metrics.filter(metric => 
originalMetricNames.has(metric))
+    );
+    const filteredValidDimensionNames = new Set(
+      validationResult.dimensions.filter(dim => 
originalDimensionNames.has(dim))
+    );
+
+    console.log('Metrics verification filtering:', {
+      controlName,
+      originalMetricCount: originalMetricNames.size,
+      apiValidMetricCount: validationResult.metrics.length,
+      filteredValidMetricCount: filteredValidMetricNames.size,
+      originalDimensionCount: originalDimensionNames.size,
+      apiValidDimensionCount: validationResult.dimensions.length,
+      filteredValidDimensionCount: filteredValidDimensionNames.size,
+    });
+
     if (dataset.metrics) {
       updatedDatasourceMetrics = dataset.metrics.map((metric: any) => ({
         ...metric,
-        isDisabled: !validMetricNames.has(metric.metric_name || metric),
+        isDisabled: !filteredValidMetricNames.has(metric.metric_name || 
metric),
       }));
     }
 
     // Also update columns using the same validation result
-    const validDimensionNames = new Set(validationResult.dimensions);
     if (dataset.columns) {
       updatedDatasourceColumns = dataset.columns.map((column: any) => ({
         ...column,
-        isDisabled: !validDimensionNames.has(column.column_name || column),
+        isDisabled: !filteredValidDimensionNames.has(column.column_name || 
column),
       }));
     }
 
@@ -257,6 +277,11 @@ export function createColumnsVerification(controlName?: 
string): AsyncVerify {
     const queryFields = collectQueryFields(updatedFormData || {});
 
     // Call validation API
+    console.log('Columns verification API call:', {
+      controlName,
+      dimensions: queryFields.dimensions,
+      metrics: queryFields.metrics,
+    });
     
     const validationResult = await callValidationAPI(
       datasource as Dataset,
@@ -268,6 +293,12 @@ export function createColumnsVerification(controlName?: 
string): AsyncVerify {
       return null;
     }
 
+    console.log('Columns verification API response:', {
+      controlName,
+      validDimensions: validationResult.dimensions,
+      validMetrics: validationResult.metrics,
+    });
+
     // Mark dimension options as disabled if invalid
     const validDimensionNames = new Set(validationResult.dimensions);
     const updatedOptions = options.map((option: any) => ({
@@ -296,6 +327,63 @@ export function createColumnsVerification(controlName?: 
string): AsyncVerify {
       }));
     }
 
+    // Debug: Check which dimensions are valid but not in original datasource
+    const originalDimensionNames = new Set(dataset.columns?.map((col: any) => 
col.column_name) || []);
+    const originalMetricNames = new Set(dataset.metrics?.map((metric: any) => 
metric.metric_name) || []);
+    
+    const validDimensionsNotInOriginal = validationResult.dimensions.filter(
+      (dim: string) => !originalDimensionNames.has(dim)
+    );
+    const validMetricsNotInOriginal = validationResult.metrics.filter(
+      (metric: string) => !originalMetricNames.has(metric)
+    );
+
+    console.log('Columns verification datasource update:', {
+      controlName,
+      originalColumns: dataset.columns?.length,
+      updatedColumns: updatedDatasourceColumns?.length,
+      originalMetrics: dataset.metrics?.length,
+      updatedMetrics: updatedDatasourceMetrics?.length,
+      validDimensionCount: validDimensionNames.size,
+      validMetricCount: validMetricNames.size,
+      validDimensionsNotInOriginal,
+      validMetricsNotInOriginal,
+    });
+
+    // Fix: Only mark columns as disabled if they exist in the original 
datasource
+    // This prevents the UI from trying to process valid dimensions that don't 
exist
+    const filteredValidDimensionNames = new Set(
+      validationResult.dimensions.filter(dim => 
originalDimensionNames.has(dim))
+    );
+    const filteredValidMetricNames = new Set(
+      validationResult.metrics.filter(metric => 
originalMetricNames.has(metric))
+    );
+
+    console.log('Columns verification filtering:', {
+      controlName,
+      originalDimensionCount: originalDimensionNames.size,
+      apiValidDimensionCount: validationResult.dimensions.length,
+      filteredValidDimensionCount: filteredValidDimensionNames.size,
+      originalMetricCount: originalMetricNames.size,
+      apiValidMetricCount: validationResult.metrics.length,
+      filteredValidMetricCount: filteredValidMetricNames.size,
+    });
+
+    // Update the disabled state logic to use filtered valid names
+    if (dataset.columns) {
+      updatedDatasourceColumns = dataset.columns.map((column: any) => ({
+        ...column,
+        isDisabled: !filteredValidDimensionNames.has(column.column_name || 
column),
+      }));
+    }
+
+    if (dataset.metrics) {
+      updatedDatasourceMetrics = dataset.metrics.map((metric: any) => ({
+        ...metric,
+        isDisabled: !filteredValidMetricNames.has(metric.metric_name || 
metric),
+      }));
+    }
+
     // Create updated datasource for left panel
     const updatedDatasource = {
       ...dataset,

Reply via email to