-
Notifications
You must be signed in to change notification settings - Fork 16.7k
Description
Bug description
Calculated columns (e.g., a CASE statement mapping countries to currency codes) do not appear in the Currency code column dropdown in the Dataset Editor, even though the dropdown is built from allColumns which includes both physical and calculated columns.
Root cause
In DatasourceEditor.jsx (line 1095–1096), the dropdown options are filtered to only include columns where type_generic === GenericDataType.String:
const stringColumns = allColumns
.filter(col => col.type_generic === GenericDataType.String)
.map(col => ({
value: col.column_name,
label: col.verbose_name || col.column_name,
}));Calculated columns have type_generic set to null because the backend's fetch_metadata() only resolves type information for physical columns — calculated columns are added back to the dataset without type resolution. This causes the strict equality check to exclude every calculated column from the dropdown.
Note: calculated columns that have their Data Type dropdown explicitly set (e.g. to STRING) do get type_generic resolved and already pass the filter. The bug only affects calculated columns where the user hasn't set a data type.
Expected behavior
Untyped calculated columns should appear in the Currency code column dropdown. Calculated columns explicitly typed as NUMERIC, BOOLEAN, or DATETIME should remain excluded.
Proposed fix
Include calculated columns whose type_generic is null (untyped), while excluding those the user explicitly typed as non-string:
const stringColumns = allColumns
.filter(
col =>
col.type_generic === GenericDataType.String ||
(col.expression && col.type_generic == null),
)
.map(col => ({
value: col.column_name,
label: col.verbose_name || col.column_name,
}));No backend changes are needed.
How to reproduce the bug
- Open a dataset in the Dataset Editor
- Go to the Calculated Columns tab and add a column (e.g.,
CASE WHEN country = 'US' THEN 'USD' ELSE 'EUR' END) without setting a Data Type - Go back to the Settings tab and open the Currency code column dropdown
- Observe that the calculated column does not appear in the dropdown
Screenshots/recordings
No response
Superset version
master
Python version
Not applicable (frontend-only bug)
Node version
Not applicable
Browser
All
Additional context
- The
allColumnsarray at line 1084 correctly includes calculated columns (spread fromdatabaseColumnsandcalculatedColumns) - Calculated columns are identified by having a truthy
expressionproperty (line 627–630 of the same file) - The downstream currency formatting already guards against invalid codes, so this change is safe