Skip to content
Snippets Groups Projects
Unverified Commit c1241751 authored by Ariya Hidayat's avatar Ariya Hidayat Committed by GitHub
Browse files

Only allow the dimensions suitable for aggregation (#18260)


* Move #18069 to custom column reproductions

Co-authored-by: default avatarNemanja <31325167+nemanjaglumac@users.noreply.github.com>
parent 1ba00d95
No related branches found
No related tags found
No related merge requests found
......@@ -8,6 +8,7 @@ import {
format as formatExpression,
DISPLAY_QUOTES,
} from "metabase/lib/expressions/format";
import { isCompatibleAggregationOperatorForField } from "metabase/lib/schema_metadata";
import _ from "underscore";
import { chain, updateIn } from "icepick";
......@@ -635,10 +636,13 @@ export default class StructuredQuery extends AtomicQuery {
//
// A real solution would have a `dimensionOptions` method instead of `fieldOptions` which would
// enable filtering based on dimension properties.
const compatibleDimensions = this.expressionDimensions().filter(d =>
isCompatibleAggregationOperatorForField(aggregation, d.field()),
);
return new DimensionOptions({
...fieldOptions,
dimensions: _.uniq([
...this.expressionDimensions(),
...compatibleDimensions,
...fieldOptions.dimensions.filter(
d => !(d instanceof ExpressionDimension),
),
......
import { restore, popover } from "__support__/e2e/cypress";
import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
const { PRODUCTS, PRODUCTS_ID } = SAMPLE_DATASET;
const questionDetails = {
name: "18069",
query: {
"source-table": PRODUCTS_ID,
expressions: {
["CC_Category"]: ["field", PRODUCTS.CATEGORY, null],
["CC_LowerVendor"]: ["lower", ["field", PRODUCTS.VENDOR, null]],
["CC_UpperTitle"]: ["upper", ["field", PRODUCTS.TITLE, null]],
["CC_HalfPrice"]: ["/", ["field", PRODUCTS.PRICE, null], 2],
["CC_ScaledRating"]: ["*", 1.5, ["field", PRODUCTS.RATING, null]],
},
},
};
describe("issue 18069", () => {
beforeEach(() => {
cy.intercept("POST", "/api/dataset").as("dataset");
restore();
cy.signInAsAdmin();
cy.createQuestion(questionDetails).then(({ body: { id: QUESTION_ID } }) => {
cy.visit(`/question/${QUESTION_ID}/notebook`);
});
});
it("should not allow choosing text fields for SUM (metabase#18069)", () => {
cy.findByText("Summarize").click();
cy.findByText("Sum of ...").click();
popover().within(() => {
// regular fields
cy.findByText("Price");
cy.findByText("Rating");
// custom columns not suitable for SUM
cy.findByText("CC_Category").should("not.exist");
cy.findByText("CC_LowerVendor").should("not.exist");
cy.findByText("CC_UpperTitle").should("not.exist");
// custom columns suitable for SUM
cy.findByText("CC_HalfPrice");
cy.findByText("CC_ScaledRating").click();
});
cy.button("Visualize").click();
cy.wait("@dataset");
cy.findByText("1,041.45");
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment