diff --git a/frontend/src/metabase-types/api/dataset.ts b/frontend/src/metabase-types/api/dataset.ts
index 22ae14e5d6a91b2ce242a0f2ecfb5b45877d4905..0051890d155c84b10d7ad1470616c6c03a0e54cd 100644
--- a/frontend/src/metabase-types/api/dataset.ts
+++ b/frontend/src/metabase-types/api/dataset.ts
@@ -21,6 +21,7 @@ export interface DatasetColumn {
   semantic_type?: string;
   remapped_from?: string;
   remapped_to?: string;
+  effective_type?: string;
   binning_info?: {
     bin_width?: number;
   };
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/ChartTooltip.tsx b/frontend/src/metabase/visualizations/components/ChartTooltip/ChartTooltip.tsx
index c49546c049b1fb7886dedd4b4e0ad8895f4e8888..26c9592bdca962270e25f41bc1ab493fc515c497 100644
--- a/frontend/src/metabase/visualizations/components/ChartTooltip/ChartTooltip.tsx
+++ b/frontend/src/metabase/visualizations/components/ChartTooltip/ChartTooltip.tsx
@@ -2,8 +2,8 @@ import React, { MouseEvent, useMemo } from "react";
 import _ from "underscore";
 import { getEventTarget } from "metabase/lib/dom";
 import Tooltip from "metabase/core/components/Tooltip";
-import DataPointTooltip from "./DataPointTooltip";
-import DataPointTooltipOld from "./DataPointTooltipOld";
+import StackedDataTooltip from "./StackedDataTooltip";
+import KeyValuePairChartTooltip from "./KeyValuePairChartTooltip";
 import TimelineEventTooltip from "./TimelineEventTooltip";
 import {
   HoveredObject,
@@ -25,11 +25,11 @@ const ChartTooltip = ({ hovered, settings }: ChartTooltipProps) => {
       return <TimelineEventTooltip hovered={hovered as HoveredTimelineEvent} />;
     }
 
-    if (hovered.dataTooltip) {
-      return <DataPointTooltip {...hovered.dataTooltip} />;
+    if (hovered.stackedTooltipModel) {
+      return <StackedDataTooltip {...hovered.stackedTooltipModel} />;
     }
 
-    return <DataPointTooltipOld hovered={hovered} settings={settings} />;
+    return <KeyValuePairChartTooltip hovered={hovered} settings={settings} />;
   }, [hovered, settings]);
 
   const isNotEmpty = useMemo(() => {
@@ -39,7 +39,7 @@ const ChartTooltip = ({ hovered, settings }: ChartTooltipProps) => {
     return (
       hovered.value !== undefined ||
       !_.isEmpty(hovered.timelineEvents) ||
-      !_.isEmpty(hovered.dataTooltip) ||
+      !_.isEmpty(hovered.stackedTooltipModel) ||
       !_.isEmpty(hovered.data) ||
       !_.isEmpty(hovered.dimensions)
     );
@@ -49,6 +49,7 @@ const ChartTooltip = ({ hovered, settings }: ChartTooltipProps) => {
   const hasTargetElement =
     hovered?.element != null && document.body.contains(hovered.element);
   const isOpen = isNotEmpty && (hasTargetElement || hasTargetEvent);
+  const isPadded = hovered?.stackedTooltipModel == null;
 
   const target = hasTargetElement
     ? hovered?.element
@@ -61,7 +62,7 @@ const ChartTooltip = ({ hovered, settings }: ChartTooltipProps) => {
       preventOverflow
       reference={target}
       isOpen={isOpen}
-      isPadded={false}
+      isPadded={isPadded}
       tooltip={tooltip}
       maxWidth="unset"
     />
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/index.ts b/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/index.ts
deleted file mode 100644
index 2abb9411f2849d1f06663b48d5cf7efbb8cd3b76..0000000000000000000000000000000000000000
--- a/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from "./DataPointTooltip";
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltipOld.tsx b/frontend/src/metabase/visualizations/components/ChartTooltip/KeyValuePairChartTooltip.tsx
similarity index 86%
rename from frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltipOld.tsx
rename to frontend/src/metabase/visualizations/components/ChartTooltip/KeyValuePairChartTooltip.tsx
index c5e54b0f8cd0bd964b1276a239a3f431090a7fa5..66a83479a22f944eb08412e1f62352a8ddf48902 100644
--- a/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltipOld.tsx
+++ b/frontend/src/metabase/visualizations/components/ChartTooltip/KeyValuePairChartTooltip.tsx
@@ -1,6 +1,6 @@
 import React, { useMemo } from "react";
-import { Column } from "metabase-types/types/Dataset";
 import { getFriendlyName } from "metabase/visualizations/lib/utils";
+import { RemappingHydratedDatasetColumn } from "metabase/visualizations/shared/types/data";
 import {
   DataPoint,
   HoveredDimension,
@@ -9,12 +9,15 @@ import {
 } from "./types";
 import { formatValueForTooltip } from "./utils";
 
-export interface DataPointTooltipProps {
+export interface StackedDataTooltipProps {
   hovered: HoveredObject;
   settings: VisualizationSettings;
 }
 
-const DataPointTooltipOld = ({ hovered, settings }: DataPointTooltipProps) => {
+const KeyValuePairChartTooltip = ({
+  hovered,
+  settings,
+}: StackedDataTooltipProps) => {
   const rows = useMemo(() => getRows(hovered), [hovered]);
 
   return (
@@ -37,7 +40,7 @@ const DataPointTooltipOld = ({ hovered, settings }: DataPointTooltipProps) => {
 export interface TooltipRowProps {
   name?: string;
   value?: any;
-  column?: Column;
+  column?: RemappingHydratedDatasetColumn;
   settings: VisualizationSettings;
 }
 
@@ -85,4 +88,4 @@ const getRowFromDimension = ({ column, value }: HoveredDimension) => ({
   col: column,
 });
 
-export default DataPointTooltipOld;
+export default KeyValuePairChartTooltip;
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/DataPointTooltip.styled.tsx b/frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/StackedDataTooltip.styled.tsx
similarity index 100%
rename from frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/DataPointTooltip.styled.tsx
rename to frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/StackedDataTooltip.styled.tsx
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/DataPointTooltip.tsx b/frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/StackedDataTooltip.tsx
similarity index 88%
rename from frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/DataPointTooltip.tsx
rename to frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/StackedDataTooltip.tsx
index e781388a8f750446be8f673dc5cdbef7e734e8ff..f21df1a971ae0f54f462502edcc89519e39b52bd 100644
--- a/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/DataPointTooltip.tsx
+++ b/frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/StackedDataTooltip.tsx
@@ -1,6 +1,6 @@
 import React from "react";
 import { TooltipRow, TooltipTotalRow } from "../TooltipRow";
-import { TooltipModel } from "../types";
+import type { StackedTooltipModel } from "../types";
 import {
   DataPointHeader,
   DataPointTableHeader,
@@ -8,19 +8,19 @@ import {
   DataPointTableBody,
   DataPointTable,
   DataPointTableFooter,
-} from "./DataPointTooltip.styled";
+} from "./StackedDataTooltip.styled";
 import { getPercent, getTotalValue } from "./utils";
 
-type DataPointTooltipProps = TooltipModel;
+type StackedDataTooltipProps = StackedTooltipModel;
 
-const DataPointTooltip = ({
+const StackedDataTooltip = ({
   headerTitle,
   headerRows,
   bodyRows = [],
   showTotal,
   showPercentages,
   totalFormatter = (value: unknown) => String(value),
-}: DataPointTooltipProps) => {
+}: StackedDataTooltipProps) => {
   const total = getTotalValue(headerRows, bodyRows);
   const isShowingTotalSensible = headerRows.length + bodyRows.length > 1;
 
@@ -72,4 +72,4 @@ const DataPointTooltip = ({
   );
 };
 
-export default DataPointTooltip;
+export default StackedDataTooltip;
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/DataPointTooltip.unit.spec.tsx b/frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/StackedDataTooltip.unit.spec.tsx
similarity index 90%
rename from frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/DataPointTooltip.unit.spec.tsx
rename to frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/StackedDataTooltip.unit.spec.tsx
index d3676648f2f540a748918ae39414c20ee56ad00b..49138354926fa2b4f01a3f4bd108989a7f41e704 100644
--- a/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/DataPointTooltip.unit.spec.tsx
+++ b/frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/StackedDataTooltip.unit.spec.tsx
@@ -1,8 +1,8 @@
 import React from "react";
 import { render, screen } from "@testing-library/react";
 
-import { TooltipModel } from "../types";
-import DataPointTooltip from "./DataPointTooltip";
+import type { StackedTooltipModel } from "../types";
+import StackedDataTooltip from "./StackedDataTooltip";
 
 const defaultHeaderRows = [
   {
@@ -33,9 +33,9 @@ const setup = ({
   headerRows = defaultHeaderRows,
   bodyRows = defaultBodyRows,
   ...rest
-}: Partial<TooltipModel> = {}) => {
+}: Partial<StackedTooltipModel> = {}) => {
   render(
-    <DataPointTooltip
+    <StackedDataTooltip
       headerTitle={headerTitle}
       headerRows={headerRows}
       bodyRows={bodyRows}
@@ -60,7 +60,7 @@ const setup = ({
   };
 };
 
-describe("DataPointTooltip", () => {
+describe("StackedDataTooltip", () => {
   it("renders the header with formatted name—value pairs", () => {
     const { rowNames, rowValues, header } = setup();
     expect(header).toHaveTextContent("header-title");
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/index.ts b/frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1352cf6d9ea183196e8282a2ef2ef892d58f5327
--- /dev/null
+++ b/frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/index.ts
@@ -0,0 +1 @@
+export { default } from "./StackedDataTooltip";
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/utils.ts b/frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/utils.ts
similarity index 100%
rename from frontend/src/metabase/visualizations/components/ChartTooltip/DataPointTooltip/utils.ts
rename to frontend/src/metabase/visualizations/components/ChartTooltip/StackedDataTooltip/utils.ts
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/types.ts b/frontend/src/metabase/visualizations/components/ChartTooltip/types.ts
index 9e5057c26ac78259e0b3f0ecd02657a8773801b3..ed55a7987ec47c803051e1d49ad50ca36d0dd572 100644
--- a/frontend/src/metabase/visualizations/components/ChartTooltip/types.ts
+++ b/frontend/src/metabase/visualizations/components/ChartTooltip/types.ts
@@ -1,20 +1,22 @@
 import { MouseEvent } from "react";
-import { Column } from "metabase-types/types/Dataset";
 import { TimelineEvent } from "metabase-types/api/timeline";
+import { RemappingHydratedDatasetColumn } from "metabase/visualizations/shared/types/data";
 
 export type VisualizationSettings = Record<string, unknown> & {
-  column?: (col: Column) => Column;
+  column?: (
+    col: RemappingHydratedDatasetColumn,
+  ) => RemappingHydratedDatasetColumn;
 };
 
 export interface DataPoint {
   key: string;
-  col?: Column;
+  col?: RemappingHydratedDatasetColumn;
   value?: unknown;
 }
 
 export interface HoveredDimension {
   value: string;
-  column: Column;
+  column: RemappingHydratedDatasetColumn;
 }
 
 export interface HoveredTimelineEvent {
@@ -29,7 +31,7 @@ export interface TooltipRowModel {
   formatter?: (value: unknown) => string;
 }
 
-export interface TooltipModel {
+export interface StackedTooltipModel {
   headerTitle?: string;
   headerRows: TooltipRowModel[];
   bodyRows?: TooltipRowModel[];
@@ -43,12 +45,12 @@ export interface HoveredObject {
   axisIndex?: number;
   seriesIndex?: number;
   value?: unknown;
-  column?: Column;
+  column?: RemappingHydratedDatasetColumn;
   timelineEvents?: TimelineEvent[];
   data?: DataPoint[];
   dimensions?: HoveredDimension[];
   settings?: VisualizationSettings;
   element?: HTMLElement;
   event?: MouseEvent;
-  dataTooltip?: TooltipModel;
+  stackedTooltipModel?: StackedTooltipModel;
 }
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/utils.ts b/frontend/src/metabase/visualizations/components/ChartTooltip/utils.ts
index a5e34a5bba0b1823448ade47ebf141f3a6545e84..d9fc9ae2aa21c3e5a45aefef564c8a329fad8a0e 100644
--- a/frontend/src/metabase/visualizations/components/ChartTooltip/utils.ts
+++ b/frontend/src/metabase/visualizations/components/ChartTooltip/utils.ts
@@ -1,6 +1,5 @@
-import { MouseEvent } from "react";
-import { Column } from "metabase-types/types/Dataset";
 import { formatValue } from "metabase/lib/formatting";
+import { RemappingHydratedDatasetColumn } from "metabase/visualizations/shared/types/data";
 import { VisualizationSettings } from "./types";
 
 export const formatValueForTooltip = ({
@@ -9,7 +8,7 @@ export const formatValueForTooltip = ({
   settings,
 }: {
   value?: unknown;
-  column?: Column;
+  column?: RemappingHydratedDatasetColumn;
   settings?: VisualizationSettings;
 }) =>
   formatValue(value, {
diff --git a/frontend/src/metabase/visualizations/shared/types/data.ts b/frontend/src/metabase/visualizations/shared/types/data.ts
index f81a7aba6e72ec788ec6d5198ece49c13b7befb5..4d8fdd537eb87935ba70050a856ad717d26c081c 100644
--- a/frontend/src/metabase/visualizations/shared/types/data.ts
+++ b/frontend/src/metabase/visualizations/shared/types/data.ts
@@ -32,7 +32,7 @@ export type MetricDatum = { [key: MetricName]: MetricValue };
 export type GroupedDatum = {
   dimensionValue: RowValue;
   metrics: MetricDatum;
-  isClickable: boolean;
+  isClickable?: boolean;
   breakout?: {
     [key: BreakoutName]: {
       metrics: MetricDatum;
diff --git a/frontend/src/metabase/visualizations/visualizations/RowChart/RowChart.tsx b/frontend/src/metabase/visualizations/visualizations/RowChart/RowChart.tsx
index 84f871f95ac42110138c4a289149d12255906415..305eecdb7154ee950692ab681ed6c1f8bfc118c8 100644
--- a/frontend/src/metabase/visualizations/visualizations/RowChart/RowChart.tsx
+++ b/frontend/src/metabase/visualizations/visualizations/RowChart/RowChart.tsx
@@ -192,6 +192,7 @@ const RowChartVisualization = ({
       bar,
       settings,
       chartColumns,
+      data.cols,
       series,
       seriesColors,
     );
diff --git a/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.ts b/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.ts
index 8e25e2895bae31d0fdce162a5fcdcc277b200930..14574c8fb6de10866fb9e29659985e34fd2d6674 100644
--- a/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.ts
+++ b/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.ts
@@ -22,7 +22,12 @@ import {
 } from "metabase/visualizations/shared/types/data";
 import { sumMetric } from "metabase/visualizations/shared/utils/data";
 import { formatValueForTooltip } from "metabase/visualizations/lib/tooltip";
-import { TooltipRowModel } from "metabase/visualizations/components/ChartTooltip/types";
+import {
+  DataPoint,
+  StackedTooltipModel,
+  TooltipRowModel,
+} from "metabase/visualizations/components/ChartTooltip/types";
+import { getStackOffset } from "metabase/visualizations/lib/settings/stacking";
 import { isMetric } from "metabase-lib/types/utils/isa";
 
 const getMetricColumnData = (
@@ -193,31 +198,7 @@ const getBreakoutsTooltipRows = <TDatum>(
     };
   });
 
-const getMultipleMetricsTooltipRows = <TDatum>(
-  bar: BarData<TDatum>,
-  settings: VisualizationSettings,
-  multipleSeries: Series<TDatum, SeriesInfo>[],
-  seriesColors: Record<string, string>,
-): TooltipRowModel[] =>
-  multipleSeries.map(series => {
-    const value = series.xAccessor(bar.datum);
-
-    return {
-      name: series.seriesName,
-      color: seriesColors[series.seriesKey],
-      value,
-      formatter: value =>
-        String(
-          formatValueForTooltip({
-            value,
-            settings,
-            column: series.seriesInfo?.metricColumn,
-          }),
-        ),
-    };
-  });
-
-const getTooltipModel = <TDatum>(
+export const getTooltipModel = <TDatum>(
   bar: BarData<TDatum>,
   settings: VisualizationSettings,
   chartColumns: ChartColumns,
@@ -236,54 +217,79 @@ const getTooltipModel = <TDatum>(
   );
 
   const hasBreakout = "breakout" in chartColumns;
-
-  const rows = hasBreakout
-    ? getBreakoutsTooltipRows(bar, settings, multipleSeries, seriesColors)
-    : getMultipleMetricsTooltipRows(
-        bar,
-        settings,
-        multipleSeries,
-        seriesColors,
-      );
+  const rows = getBreakoutsTooltipRows(
+    bar,
+    settings,
+    multipleSeries,
+    seriesColors,
+  );
 
   const [headerRows, bodyRows] = _.partition(
     rows,
     row => row.name === series.seriesName,
   );
 
-  const totalFormatter = hasBreakout
-    ? (value: unknown) =>
-        String(
-          formatValueForTooltip({
-            value,
-            settings,
-            column: chartColumns.metric.column,
-          }),
-        )
-    : undefined;
+  const totalFormatter = (value: unknown) =>
+    String(
+      formatValueForTooltip({
+        value,
+        settings,
+        column: hasBreakout
+          ? chartColumns.metric.column
+          : chartColumns.metrics[0].column,
+      }),
+    );
 
   return {
     headerTitle,
     headerRows,
     bodyRows,
     totalFormatter,
-    showTotal: hasBreakout,
-    showPercentages: hasBreakout,
+    showTotal: true,
+    showPercentages: true,
   };
 };
 
-export const getHoverData = <TDatum>(
-  bar: BarData<TDatum>,
+export const getHoverData = (
+  bar: BarData<GroupedDatum>,
   settings: VisualizationSettings,
   chartColumns: ChartColumns,
-  multipleSeries: Series<TDatum, SeriesInfo>[],
+  datasetColumns: DatasetColumn[],
+  multipleSeries: Series<GroupedDatum, SeriesInfo>[],
   seriesColors: Record<string, string>,
-) => {
-  return {
+): {
+  settings: VisualizationSettings;
+  datumIndex: number;
+  index: number;
+  data?: DataPoint[];
+  stackedTooltipModel?: StackedTooltipModel;
+} => {
+  const hoverData = {
     settings,
     datumIndex: bar.datumIndex,
     index: bar.seriesIndex,
-    dataTooltip: getTooltipModel(
+  };
+
+  const hasMultipleSeries =
+    "breakout" in chartColumns || chartColumns.metrics.length > 1;
+  const isStacked = getStackOffset(settings) != null;
+  if (!isStacked || !hasMultipleSeries) {
+    const data = getColumnsData(
+      chartColumns,
+      bar.series,
+      bar.datum,
+      datasetColumns,
+    );
+
+    return {
+      ...hoverData,
+      data,
+    };
+  }
+
+  return {
+    ...hoverData,
+    stackedTooltipModel: getTooltipModel(
       bar,
       settings,
       chartColumns,
diff --git a/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.unit.spec.ts b/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.unit.spec.ts
index f8ee455e467c65aaed14b8c4830fadfeb85130be..0c1166d3ee8158225ea6b1224a1dc28292bf609a 100644
--- a/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.unit.spec.ts
+++ b/frontend/src/metabase/visualizations/visualizations/RowChart/utils/events.unit.spec.ts
@@ -1,140 +1,140 @@
+import { VisualizationSettings } from "metabase-types/api";
+import { MultipleMetricsChartColumns } from "metabase/visualizations/lib/graph/columns";
+import { BarData } from "metabase/visualizations/shared/components/RowChart/types";
 import {
-  BreakoutChartColumns,
-  MultipleMetricsChartColumns,
-} from "metabase/visualizations/lib/graph/columns";
-import { RemappingHydratedDatasetColumn } from "metabase/visualizations/shared/types/data";
+  GroupedDatum,
+  RemappingHydratedDatasetColumn,
+} from "metabase/visualizations/shared/types/data";
 import { getHoverData } from "./events";
 
-const data = [
-  { y: "foo", x: 100, x1: 200 },
-  { y: "bar", x: 200, x1: 400 },
-  { y: "baz", x: 300, x1: 600 },
+const datasetColumns = [
+  { name: "y" } as RemappingHydratedDatasetColumn,
+  { name: "x" } as RemappingHydratedDatasetColumn,
+  { name: "x1" } as RemappingHydratedDatasetColumn,
 ];
 
-type TestDatum = { y: string; x: number; x1: number };
+const chartColumns: MultipleMetricsChartColumns = {
+  dimension: {
+    index: 0,
+    column: datasetColumns[0],
+  },
+  metrics: [
+    {
+      index: 1,
+      column: datasetColumns[1],
+    },
+    {
+      index: 2,
+      column: datasetColumns[2],
+    },
+  ],
+};
+
+const multipleMetricsData: GroupedDatum[] = [
+  {
+    dimensionValue: "foo",
+    metrics: { x: 100, x1: 200 },
+    rawRows: [],
+  },
+];
+
+const seriesColors = {
+  x: "red",
+  x1: "green",
+};
 
 const series1 = {
-  seriesKey: "series 1",
+  seriesKey: "x",
   seriesName: "Series 1",
-  xAccessor: (datum: TestDatum) => datum.x,
-  yAccessor: (datum: TestDatum) => datum.y,
+  xAccessor: (datum: GroupedDatum) => datum.metrics["x"],
+  yAccessor: (datum: GroupedDatum) => datum.dimensionValue,
 };
 const series2 = {
-  seriesKey: "series 2",
+  seriesKey: "x1",
   seriesName: "Series 2",
-  xAccessor: (datum: TestDatum) => datum.x1,
-  yAccessor: (datum: TestDatum) => datum.y,
+  xAccessor: (datum: GroupedDatum) => datum.metrics["x1"],
+  yAccessor: (datum: GroupedDatum) => datum.dimensionValue,
 };
 
-const seriesColors = {
-  "series 1": "red",
-  "series 2": "green",
-};
-
-const barData = {
-  dimensionValue: "2017",
+const barData: BarData<GroupedDatum> = {
   isNegative: false,
   xStartValue: 0,
   xEndValue: 100,
   yValue: "foo",
-  datum: data[0],
+  datum: multipleMetricsData[0],
   datumIndex: 0,
   series: series1,
   seriesIndex: 0,
 };
 
-const breakoutChartColumns: BreakoutChartColumns = {
-  dimension: {
-    index: 0,
-    column: {} as RemappingHydratedDatasetColumn,
-  },
-  breakout: {
-    index: 1,
-    column: {} as RemappingHydratedDatasetColumn,
-  },
-  metric: {
-    index: 2,
-    column: {} as RemappingHydratedDatasetColumn,
-  },
-};
-
-const multipleMetricsChartColumns: MultipleMetricsChartColumns = {
-  dimension: {
-    index: 0,
-    column: {} as RemappingHydratedDatasetColumn,
-  },
-  metrics: [
-    {
-      index: 1,
-      column: {} as RemappingHydratedDatasetColumn,
-    },
-    {
-      index: 2,
-      column: {} as RemappingHydratedDatasetColumn,
-    },
-  ],
-};
-
 describe("events utils", () => {
   describe("getHoverData", () => {
-    it("sets tooltip model rows", () => {
-      const {
-        dataTooltip: { headerRows, bodyRows, headerTitle },
-      } = getHoverData(
-        barData,
-        {},
-        breakoutChartColumns,
-        [series1, series2],
-        seriesColors,
-      );
+    it.each(["stacked", "normalized"])(
+      "returns stacked tooltip model for stacked charts",
+      stackType => {
+        const tooltipModel = getHoverData(
+          barData,
+          {
+            "stackable.stack_type":
+              stackType as VisualizationSettings["stackable.stack_type"],
+          },
+          chartColumns,
+          datasetColumns,
+          [series1, series2],
+          seriesColors,
+        ).stackedTooltipModel;
 
-      expect(headerTitle).toBe("foo");
-      expect(headerRows).toHaveLength(1);
-      expect(headerRows[0]).toEqual(
-        expect.objectContaining({
-          color: "red",
-          name: "Series 1",
-          value: 100,
-        }),
-      );
-      expect(bodyRows).toHaveLength(1);
-      expect(bodyRows[0]).toEqual(
-        expect.objectContaining({
-          color: "green",
-          name: "Series 2",
-          value: 200,
-        }),
-      );
-    });
+        const { headerRows, bodyRows, headerTitle } = tooltipModel ?? {};
 
-    it("sets showTotal and showPercentages to true for charts with breakouts", () => {
-      const {
-        dataTooltip: { showTotal, showPercentages },
-      } = getHoverData(
+        expect(headerTitle).toBe("foo");
+        expect(headerRows).toHaveLength(1);
+        expect(headerRows?.[0]).toEqual(
+          expect.objectContaining({
+            color: "red",
+            name: "Series 1",
+            value: 100,
+          }),
+        );
+        expect(bodyRows).toHaveLength(1);
+        expect(bodyRows?.[0]).toEqual(
+          expect.objectContaining({
+            color: "green",
+            name: "Series 2",
+            value: 200,
+          }),
+        );
+      },
+    );
+
+    it("does not return stacked tooltip model for stacked charts with a single metric without a breakout", () => {
+      const tooltipModel = getHoverData(
         barData,
-        {},
-        breakoutChartColumns,
-        [series1, series2],
+        {
+          "stackable.stack_type": "stacked",
+        },
+        {
+          dimension: chartColumns.dimension,
+          metrics: [chartColumns.metrics[0]],
+        },
+        datasetColumns,
+        [series1],
         seriesColors,
-      );
+      ).stackedTooltipModel;
 
-      expect(showTotal).toBe(true);
-      expect(showPercentages).toBe(true);
+      expect(tooltipModel).not.toBeDefined();
     });
 
-    it("sets showTotal and showPercentages to false for charts without breakouts", () => {
-      const {
-        dataTooltip: { showTotal, showPercentages },
-      } = getHoverData(
+    it("does not return stacked tooltip model for non-stacked charts", () => {
+      const tooltipModel = getHoverData(
         barData,
         {},
-        multipleMetricsChartColumns,
-        [series1, series2],
+        chartColumns,
+        datasetColumns,
+        [series1, series1],
         seriesColors,
-      );
+      ).stackedTooltipModel;
 
-      expect(showTotal).toBe(false);
-      expect(showPercentages).toBe(false);
+      expect(tooltipModel).not.toBeDefined();
     });
   });
 });