Skip to content

fix(dataset-editor): Calculated columns excluded from Currency Code column dropdown #37620

@richardfogaca

Description

@richardfogaca

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

  1. Open a dataset in the Dataset Editor
  2. Go to the Calculated Columns tab and add a column (e.g., CASE WHEN country = 'US' THEN 'USD' ELSE 'EUR' END)
  3. Go back to the Settings tab and open the Currency code column dropdown
  4. 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 allColumns array at line 1084 correctly includes calculated columns (spread from databaseColumns and calculatedColumns)
  • Calculated columns are identified by having a truthy expression property (line 627–630 of the same file)
  • The downstream currency formatting already guards against invalid codes, so this change is safe

Metadata

Metadata

Assignees

No one assigned

    Labels

    #bugBug reportchange:frontendRequires changing the frontenddata:datasetRelated to dataset configurations

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions