-
Notifications
You must be signed in to change notification settings - Fork 16.6k
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.
Expected behavior
Calculated columns should appear in the Currency code column dropdown. The currency formatting logic already handles invalid currency codes gracefully, so there is no risk in including columns whose type_generic is unresolved.
Proposed fix
Loosen the filter to include columns that either have type_generic === GenericDataType.String or have an expression (i.e., are calculated columns):
const stringColumns = allColumns
.filter(col => col.type_generic === GenericDataType.String || col.expression)
.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) - 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