mirror of
https://github.com/apache/superset.git
synced 2026-04-19 16:14:52 +00:00
feat: add support for generic series limit (#16660)
* feat: add support for generic series limit * refine series_columns logic * update docs * bump superset-ui * add note to UPDATING.md * remove default value for timeseries_limit
This commit is contained in:
@@ -35,7 +35,7 @@ import humanize
|
||||
import prison
|
||||
import pytest
|
||||
import yaml
|
||||
from sqlalchemy import and_, or_
|
||||
from sqlalchemy import and_
|
||||
from sqlalchemy.sql import func
|
||||
|
||||
from tests.integration_tests.fixtures.world_bank_dashboard import (
|
||||
@@ -1956,3 +1956,24 @@ class TestChartApi(SupersetTestCase, ApiOwnersTestCaseMixin, InsertChartMixin):
|
||||
"verbose_name",
|
||||
"dtype",
|
||||
]
|
||||
|
||||
@pytest.mark.usefixtures("load_birth_names_dashboard_with_slices")
|
||||
def test_chart_data_series_limit(self):
|
||||
"""
|
||||
Chart data API: Query total rows
|
||||
"""
|
||||
SERIES_LIMIT = 5
|
||||
self.login(username="admin")
|
||||
request_payload = get_query_context("birth_names")
|
||||
request_payload["queries"][0]["columns"] = ["state", "name"]
|
||||
request_payload["queries"][0]["series_columns"] = ["name"]
|
||||
request_payload["queries"][0]["series_limit"] = SERIES_LIMIT
|
||||
rv = self.post_assert_metric(CHART_DATA_URI, request_payload, "data")
|
||||
response_payload = json.loads(rv.data.decode("utf-8"))
|
||||
data = response_payload["result"][0]["data"]
|
||||
unique_names = set(row["name"] for row in data)
|
||||
self.maxDiff = None
|
||||
self.assertEqual(len(unique_names), SERIES_LIMIT)
|
||||
self.assertEqual(
|
||||
set(column for column in data[0].keys()), {"state", "name", "sum__num"}
|
||||
)
|
||||
|
||||
@@ -29,7 +29,7 @@ query_birth_names = {
|
||||
),
|
||||
"time_grain_sqla": "P1D",
|
||||
},
|
||||
"groupby": ["name"],
|
||||
"columns": ["name"],
|
||||
"metrics": [{"label": "sum__num"}],
|
||||
"orderby": [("sum__num", False)],
|
||||
"row_limit": 100,
|
||||
|
||||
@@ -432,6 +432,7 @@ class TestSqlaTableModel(SupersetTestCase):
|
||||
from_dttm=None,
|
||||
to_dttm=None,
|
||||
extras=dict(time_grain_sqla="P1Y"),
|
||||
series_limit=15 if inner_join and is_timeseries else None,
|
||||
)
|
||||
qr = tbl.query(query_obj)
|
||||
self.assertEqual(qr.status, QueryStatus.SUCCESS)
|
||||
|
||||
@@ -69,7 +69,7 @@ class TestQueryContext(SupersetTestCase):
|
||||
# check basic properies
|
||||
self.assertEqual(query.extras, payload_query["extras"])
|
||||
self.assertEqual(query.filter, payload_query["filters"])
|
||||
self.assertEqual(query.groupby, payload_query["groupby"])
|
||||
self.assertEqual(query.columns, payload_query["columns"])
|
||||
|
||||
# metrics are mutated during creation
|
||||
for metric_idx, metric in enumerate(query.metrics):
|
||||
@@ -277,12 +277,20 @@ class TestQueryContext(SupersetTestCase):
|
||||
"""
|
||||
self.login(username="admin")
|
||||
payload = get_query_context("birth_names")
|
||||
columns = payload["queries"][0]["columns"]
|
||||
payload["queries"][0]["groupby"] = columns
|
||||
payload["queries"][0]["timeseries_limit"] = 99
|
||||
payload["queries"][0]["timeseries_limit_metric"] = "sum__num"
|
||||
del payload["queries"][0]["columns"]
|
||||
payload["queries"][0]["granularity_sqla"] = "timecol"
|
||||
payload["queries"][0]["having_filters"] = [{"col": "a", "op": "==", "val": "b"}]
|
||||
query_context = ChartDataQueryContextSchema().load(payload)
|
||||
self.assertEqual(len(query_context.queries), 1)
|
||||
query_object = query_context.queries[0]
|
||||
self.assertEqual(query_object.granularity, "timecol")
|
||||
self.assertEqual(query_object.columns, columns)
|
||||
self.assertEqual(query_object.series_limit, 99)
|
||||
self.assertEqual(query_object.series_limit_metric, "sum__num")
|
||||
self.assertIn("having_druid", query_object.extras)
|
||||
|
||||
@pytest.mark.usefixtures("load_birth_names_dashboard_with_slices")
|
||||
|
||||
Reference in New Issue
Block a user