diff --git a/frontend/src/metabase/lib/schema_metadata.js b/frontend/src/metabase/lib/schema_metadata.js
index c89ee5b0cdd9026c6d2577cec28c4fd0747b434c..2a9c82b7608fbc98e20599a2dbfd942f4994e188 100644
--- a/frontend/src/metabase/lib/schema_metadata.js
+++ b/frontend/src/metabase/lib/schema_metadata.js
@@ -73,8 +73,8 @@ const TYPES = {
     exclude: [ENTITY, LOCATION, TEMPORAL],
   },
   [SCOPE]: {
-    include: [NUMBER, TEMPORAL],
-    exclude: [ENTITY, LOCATION],
+    include: [NUMBER, TEMPORAL, CATEGORY, ENTITY],
+    exclude: [LOCATION],
   },
   [CATEGORY]: {
     base: [TYPE.Boolean],
diff --git a/frontend/test/metabase/scenarios/question/reproductions/18207-string-min-max.cy.spec.js b/frontend/test/metabase/scenarios/question/reproductions/18207-string-min-max.cy.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..65e7b9b52753b6977db1bf04cd8f8e47993df2e1
--- /dev/null
+++ b/frontend/test/metabase/scenarios/question/reproductions/18207-string-min-max.cy.spec.js
@@ -0,0 +1,97 @@
+import {
+  enterCustomColumnDetails,
+  popover,
+  restore,
+  visualize,
+} from "__support__/e2e/cypress";
+
+describe("issue 18207", () => {
+  beforeEach(() => {
+    cy.intercept("POST", "/api/dataset").as("dataset");
+
+    restore();
+    cy.signInAsAdmin();
+  });
+
+  it("should be possible to use MIN on a string column (metabase#18207)", () => {
+    cy.visit("/question/new");
+    cy.contains("Custom question").click();
+    cy.contains("Sample Dataset").click();
+    cy.contains("Products").click();
+
+    cy.contains("Pick the metric").click();
+
+    cy.contains("Minimum of").click();
+    cy.findByText("Price");
+    cy.findByText("Rating");
+    cy.contains("Category").click();
+
+    visualize();
+
+    cy.findByText("Doohickey");
+  });
+
+  it("should be possible to use MAX on a string column (metabase#18207)", () => {
+    cy.visit("/question/new");
+    cy.contains("Custom question").click();
+    cy.contains("Sample Dataset").click();
+    cy.contains("Products").click();
+
+    cy.contains("Pick the metric").click();
+
+    cy.contains("Maximum of").click();
+    cy.findByText("Price");
+    cy.findByText("Rating");
+    cy.contains("Category").click();
+
+    visualize();
+
+    cy.findByText("Widget");
+  });
+
+  it("should be not possible to use AVERAGE on a string column (metabase#18207)", () => {
+    cy.visit("/question/new");
+    cy.contains("Custom question").click();
+    cy.contains("Sample Dataset").click();
+    cy.contains("Products").click();
+
+    cy.contains("Pick the metric").click();
+
+    cy.contains("Average of").click();
+    cy.findByText("Price");
+    cy.findByText("Rating");
+    cy.findByText("Category").should("not.exist");
+  });
+
+  it("should be possible to group by a string expression (metabase#18207)", () => {
+    cy.visit("/question/new");
+    cy.contains("Custom question").click();
+    cy.contains("Sample Dataset").click();
+    cy.contains("Products").click();
+
+    cy.contains("Pick the metric").click();
+    popover()
+      .contains("Custom Expression")
+      .click();
+    popover().within(() => {
+      enterCustomColumnDetails({ formula: "Max([Vendor])" });
+      cy.findByPlaceholderText("Name (required)").type("LastVendor");
+      cy.findByText("Done").click();
+    });
+
+    cy.contains("Pick a column to group by").click();
+    popover()
+      .contains("Category")
+      .click();
+
+    visualize();
+
+    // Why is it not a table?
+    cy.contains("Settings").click();
+    cy.contains("Bar options").click();
+    cy.get("[data-testid=Table-button]").click();
+    cy.contains("Done").click();
+
+    cy.findByText("Zemlak-Wiegand");
+  });
+});