diff --git a/superset/datasource/api.py b/superset/datasource/api.py index 213298d30b4b..9a278c70329e 100644 --- a/superset/datasource/api.py +++ b/superset/datasource/api.py @@ -115,9 +115,12 @@ def get_column_values( return self.response(403, message=ex.message) row_limit = apply_max_row_limit(app.config["FILTER_SELECT_ROW_LIMIT"]) + denormalize_column = not datasource.normalize_columns try: payload = datasource.values_for_column( - column_name=column_name, limit=row_limit + column_name=column_name, + limit=row_limit, + denormalize_column=denormalize_column, ) return self.response(200, result=payload) except KeyError: diff --git a/superset/models/helpers.py b/superset/models/helpers.py index 13b4edb3bc88..b22768bfd679 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -1331,14 +1331,19 @@ def get_time_filter( # pylint: disable=too-many-arguments ) return and_(*l) - def values_for_column(self, column_name: str, limit: int = 10000) -> list[Any]: - # always denormalize column name before querying for values + def values_for_column( + self, column_name: str, limit: int = 10000, denormalize_column: bool = False + ) -> list[Any]: + # denormalize column name before querying for values + # unless disabled in the dataset configuration db_dialect = self.database.get_dialect() - denormalized_col_name = self.database.db_engine_spec.denormalize_name( - db_dialect, column_name + column_name_ = ( + self.database.db_engine_spec.denormalize_name(db_dialect, column_name) + if denormalize_column + else column_name ) cols = {col.column_name: col for col in self.columns} - target_col = cols[denormalized_col_name] + target_col = cols[column_name_] tp = self.get_template_processor() tbl, cte = self.get_from_clause(tp)