diff --git a/frontend/src/metabase/lib/dataset.js b/frontend/src/metabase/lib/dataset.js index d443daeb937303ad3d8f39fa3f22355944ef2085..9859909ad84c00256a805c11965a609193901c07 100644 --- a/frontend/src/metabase/lib/dataset.js +++ b/frontend/src/metabase/lib/dataset.js @@ -20,9 +20,8 @@ type ColumnSetting = { enabled: boolean, }; -// Many aggregations result in [[null]] if there are no rows to aggregate after filters export const datasetContainsNoResults = (data: DatasetData): boolean => - data.rows.length === 0 || _.isEqual(data.rows, [[null]]); + data.rows == null || data.rows.length === 0; /** * @returns min and max for a value in a column diff --git a/frontend/test/metabase/scenarios/question/nulls.cy.spec.js b/frontend/test/metabase/scenarios/question/nulls.cy.spec.js index 848a44bd6699ca3ef394eef90e51c09c11701d90..66fb337a856c88789970bee73f13209beac1e874 100644 --- a/frontend/test/metabase/scenarios/question/nulls.cy.spec.js +++ b/frontend/test/metabase/scenarios/question/nulls.cy.spec.js @@ -3,12 +3,39 @@ import { signInAsAdmin, openOrdersTable, popover, + withSampleDataset, } from "__support__/cypress"; describe("scenarios > question > null", () => { before(restore); beforeEach(signInAsAdmin); + it("should display rows whose value is `null` (metabase#13571)", () => { + withSampleDataset(({ ORDERS }) => { + cy.request("POST", "/api/card", { + name: "13571", + dataset_query: { + database: 1, + query: { + "source-table": 2, + fields: [ORDERS.DISCOUNT], + filter: ["=", ORDERS.ID, 1], + }, + type: "query", + }, + display: "table", + visualization_settings: {}, + }); + + // find and open previously created question + cy.visit("/collection/root"); + cy.findByText("13571").click(); + + cy.log("**'No Results since at least v0.34.3**"); + cy.findByText("No results!").should("not.exist"); + }); + }); + describe("aggregations with null values", () => { beforeEach(() => { cy.server();