diff --git a/e2e/test/scenarios/dashboard-cards/dashboard-drill.cy.spec.js b/e2e/test/scenarios/dashboard-cards/dashboard-drill.cy.spec.js
index 3a1bb938bdcb5271197af09f43012c81ae2a3cad..8081c248be8645e6f0da30b9ba62e81107274132 100644
--- a/e2e/test/scenarios/dashboard-cards/dashboard-drill.cy.spec.js
+++ b/e2e/test/scenarios/dashboard-cards/dashboard-drill.cy.spec.js
@@ -644,6 +644,42 @@ describe("scenarios > dashboard > dashboard drill", () => {
     });
   });
 
+  it("should keep card's display when doing zoom drill-through from dashboard (metabase#38307)", () => {
+    cy.intercept("POST", "/api/dataset").as("dataset");
+    cy.intercept("/api/dashboard/*/dashcard/*/card/*/query").as(
+      "dashcardQuery",
+    );
+
+    const questionDetails = {
+      name: "38307",
+      query: {
+        "source-table": REVIEWS_ID,
+        aggregation: [["count"]],
+        breakout: [["field", REVIEWS.CREATED_AT, { "temporal-unit": "month" }]],
+      },
+      display: "bar",
+    };
+
+    const dashboardDetails = {
+      name: "38307",
+    };
+
+    cy.createQuestionAndDashboard({ questionDetails, dashboardDetails }).then(
+      ({ body: { dashboard_id } }) => {
+        visitDashboard(dashboard_id);
+
+        // click the first bar on the card's graph and do a zoom drill-through
+        cy.get(".bar").eq(0).click({ force: true });
+        cy.findByText("See this month by week").click();
+
+        cy.wait("@dataset");
+
+        // check that the display is still a bar chart by checking that a .bar element exists
+        cy.get(".bar").should("exist");
+      },
+    );
+  });
+
   it("should not hide custom formatting when click behavior is enabled (metabase#14597)", () => {
     const columnKey = JSON.stringify(["name", "MY_NUMBER"]);
     const questionSettings = {
diff --git a/frontend/src/metabase/querying/utils/drills/zoom-in-binning-drill/zoom-in-binning-drill.ts b/frontend/src/metabase/querying/utils/drills/zoom-in-binning-drill/zoom-in-binning-drill.ts
index da753280b6bdba80dfee45320994596fa454b955..8764246631c45ce19b47fa640b9dbcc43c2b44be 100644
--- a/frontend/src/metabase/querying/utils/drills/zoom-in-binning-drill/zoom-in-binning-drill.ts
+++ b/frontend/src/metabase/querying/utils/drills/zoom-in-binning-drill/zoom-in-binning-drill.ts
@@ -5,8 +5,10 @@ import type * as Lib from "metabase-lib";
 
 export const zoomInBinningDrill: Drill<Lib.ZoomDrillThruInfo> = ({
   drill,
+  clicked,
   applyDrill,
 }) => {
+  const isDashboard = clicked?.extraData?.dashboard != null;
   return [
     {
       name: "zoom-in.binning",
@@ -14,7 +16,12 @@ export const zoomInBinningDrill: Drill<Lib.ZoomDrillThruInfo> = ({
       section: "zoom",
       icon: "zoom_in",
       buttonType: "horizontal",
-      question: () => applyDrill(drill).setDefaultDisplay(),
+      question: () => {
+        const question = applyDrill(drill);
+        return isDashboard
+          ? question.lockDisplay()
+          : question.setDefaultDisplay();
+      },
     },
   ];
 };
diff --git a/frontend/src/metabase/querying/utils/drills/zoom-in-timeseries-drill/zoom-in-timeseries-drill.ts b/frontend/src/metabase/querying/utils/drills/zoom-in-timeseries-drill/zoom-in-timeseries-drill.ts
index 6734cf69b1feb373b5afbd059dae359d3ae92c88..1b673f59f994f86f5afd9d35f280c795f2581b88 100644
--- a/frontend/src/metabase/querying/utils/drills/zoom-in-timeseries-drill/zoom-in-timeseries-drill.ts
+++ b/frontend/src/metabase/querying/utils/drills/zoom-in-timeseries-drill/zoom-in-timeseries-drill.ts
@@ -4,18 +4,23 @@ import type * as Lib from "metabase-lib";
 export const zoomInTimeseriesDrill: Drill<Lib.ZoomTimeseriesDrillThruInfo> = ({
   drill,
   drillInfo,
+  clicked,
   applyDrill,
 }) => {
-  const { displayName } = drillInfo;
-
+  const isDashboard = clicked?.extraData?.dashboard != null;
   return [
     {
       name: "zoom-in.timeseries",
-      title: displayName,
+      title: drillInfo.displayName,
       section: "zoom",
       icon: "zoom_in",
       buttonType: "horizontal",
-      question: () => applyDrill(drill).setDefaultDisplay(),
+      question: () => {
+        const question = applyDrill(drill);
+        return isDashboard
+          ? question.lockDisplay()
+          : question.setDefaultDisplay();
+      },
     },
   ];
 };