diff --git a/superset/viz.py b/superset/viz.py index 26c77c115a408..3a519bb1f9e83 100644 --- a/superset/viz.py +++ b/superset/viz.py @@ -854,6 +854,11 @@ def query_obj(self) -> QueryObjectDict: raise QueryObjectValidationError( _("When using 'Group By' you are limited to use a single metric") ) + + sort_by = utils.get_first_metric_name(query_obj["metrics"]) + is_asc = not query_obj.get("order_desc") + query_obj["orderby"] = [(sort_by, is_asc)] + return query_obj def get_data(self, df: pd.DataFrame) -> VizData: diff --git a/tests/integration_tests/viz_tests.py b/tests/integration_tests/viz_tests.py index b9055afd27fd1..465fdb26ef581 100644 --- a/tests/integration_tests/viz_tests.py +++ b/tests/integration_tests/viz_tests.py @@ -1067,6 +1067,13 @@ def test_query_obj_throws_metrics_and_groupby(self, super_query_obj): with self.assertRaises(Exception): test_viz.query_obj() + def test_query_obj_order_by(self): + test_viz = viz.TimeTableViz( + self.get_datasource_mock(), {"metrics": ["sum__A", "count"], "groupby": []} + ) + query_obj = test_viz.query_obj() + self.assertEqual(query_obj["orderby"], [("sum__A", False)]) + class TestBaseDeckGLViz(SupersetTestCase): def test_get_metrics(self):