Building a Mini-Multiple Line Chart Dashboard in Tableau Using Map Layers
The Inspiration
Every great Tableau project starts with someone else’s work stopping you cold.
For me, that moment came scrolling through the #DataFam community, where I stumbled across a visualization catalogue by rising star Craig Heard β a comprehensive guide to what Tableau’s map layer functionality can actually do when pushed beyond its obvious use cases.
Craig’s guide is one of those resources that doesn’t just show you what Tableau can do β it shows you how to think differently about the canvas you’re working on. Map layers, in his hands, become a general-purpose layout engine. That idea stuck with me.
Around the same time, I had been exploringEl Crimen, a Mexico-based public data journalism site that tracks homicide rates and other violent crimes by Mexican state over time. The site’s visual design is clean, data-dense, and purposeful β small multiples of line charts, one per state, showing normalized homicide trends over time.
πΈ [SCREENSHOT: The elcri.men state crime page β capture the full grid of small-multiple line charts showing homicide trends by state, ideally filtered to “Homicide” view]
The challenge I set for myself:
To replicate that look and feel inside Tableau using map layers β and in doing so, actually learn why map layers work this way and how to engineer the math behind them.
This post walks through every step.
Why Map Layers?
You might reasonably ask: why use map layers at all for line charts?
The answer is precision of placement.
In a Tableau dashboard, positioning elements relative to each other is a negotiation β you’re working with containers, padding, and layout logic that Tableau controls. Map layers flip that dynamic. When the map background is disabled, the canvas becomes a blank coordinate plane where you control exactly where every mark lives, down to the decimal.
This enables something powerful: you can engineer a small-multiples layout from scratch β every label, every line, every background color β by computing coordinates mathematically and placing them using the MAKEPOINT function.
The four geographic dimensions I built each serve a distinct visual role:
Layer
Role
Mark Type
Zero Line
Baseline reference for each state’s chart
Line
Homicide Activity Line
The trend line showing normalized homicide rate over time
Line
State Label
Text label positioned at each chart’s header
Shape (Box, 100% transparent, smallest size)
Background Shape
Color fill behind each state’s chart area
Shape (Box, largest size)
The Background Shape layer is what enables the interactive highlight: when a user selects a state via a parameter, that state’s background fills with color while all others render white β a simple but effective way to draw attention without hiding context.
πΈ [SCREENSHOT: Tableau workbook β show the Marks card panel with all four geographic dimensions listed as separate layers, ideally with the layer panel open on the left side]
Setting the Stage: Disabling the Map Background
The first thing you do when building this kind of layout is turn the map off.
In Tableau, navigate to Map β Background Maps β None. This removes all geographic tile imagery, leaving you with a blank coordinate space. From this point forward, latitude and longitude are not about geography β they are your Y axis and X axis, respectively.
This mental reframe is the key to everything that follows.
πΈ [SCREENSHOT: Tableau β Map menu open showing “Background Maps > None” selected, with the blank canvas visible behind the menu]
The MAKEPOINT Function
MAKEPOINT is Tableau’s function for creating a spatial point from two numeric values:
MAKEPOINT(latitude, longitude)
In a geographic context, these values are real-world coordinates. In our context, they are computed positions on a virtual canvas. Every element β labels, lines, backgrounds β gets its own MAKEPOINT calculation, with Y (latitude) and X (longitude) values engineered to place it exactly where we want it.
Step 1: Normalizing the Homicide Activity Line
The core challenge with small multiples is that each panel needs to be self-contained β its own scale, its own baseline β while still being visually consistent with every other panel.
In Tableau, this means normalizing each state’s homicide values to a 0β1 range within that state’s own min and max. The calculation uses a Level of Detail (LOD) expression fixed at the State and Month/Year level:
// Normalized Homicide Value (Y position of the activity line)
The FIXED LOD expression ({FIXED [State], YEAR([Date]), MONTH([Date]) : SUM([Homicides])}) locks the aggregation at the state + month/year level. This means the value returned is always the total homicides for that state in that specific month β regardless of any filters or view-level aggregation Tableau might otherwise apply.
The min and max references ([Profit | State MY Min] and [Profit | State MY Max]) are themselves LOD calculations that find the minimum and maximum monthly homicide total for each state across all time.
These anchor the normalization range.
The result is a value between 0 and 1 for every state-month combination, where:
0 = the month with the fewest homicides in that state’s history
1 = the month with the most homicides in that state’s history
This normalized value becomes the latitude (Y position) in the MAKEPOINT call for the Homicide Activity Line layer.
Step 2: Engineering the X Position from Date
The Y axis is handled. Now for the X axis β which represents time.
The goal is to distribute each month/year value across a defined horizontal range for each state’s panel. The approach is to calculate each date’s distance from the maximum date in the dataset, expressed as a fraction of 12 months, then add a small offset constant to create readable separation between panels.
The logic works like this:
// X position (longitude) for the activity line
DATEDIFF('month', [Date], {MAX([Date])}) / 12 + 2
DATEDIFF('month', [Date], {MAX([Date])}) returns how many months back from the most recent date the current record sits. The most recent month returns 0; months further back return increasing positive integers.
Dividing by 12 compresses the full date range into a proportional unit scale β roughly one unit of longitude per year of data.
Adding 2 creates a horizontal buffer that keeps the line charts from running into each other when laid out across the canvas.
The result is a longitude value that increases as you move backward in time, distributing dates evenly across the X axis of each state’s panel.
Step 3: The Zero Line
Every good trend chart needs a baseline. The zero line is the simplest of the four layers β it’s a horizontal mark positioned at the minimum Y value for each state’s panel, providing a visual floor for the activity line above it.
Its MAKEPOINT calculation uses:
Y (latitude): a fixed value corresponding to the normalized minimum (effectively 0 in the normalized scale, offset to the correct panel position)
X (longitude): the same date-based X range used by the activity line, so the zero line spans the full width of each panel
πΈ [SCREENSHOT: Tableau β show the zero line layer in isolation, X-Axis Map Calc to distribute the zero line
Step 4: State Labels and Background Shapes
The State Label layer places a text mark at a consistent header position above each state’s chart. The mark type is set to a box shape at its smallest size with 100% transparency β this makes the shape itself invisible while still allowing the label text to render. Positioning is handled by MAKEPOINT using a fixed Y value slightly above the panel top and a centered X value for each state’s horizontal slot.
The Background Shape layer uses the largest box size, colored and positioned to fill each panel’s entire area. A parameter calculation drives the color logic:
// Background color logic
IF [State] = [Selected State Parameter]
THEN "Selected"
ELSE "Default"
END
When a user chooses a state from the parameter control, that state’s background fills with the accent color while all others render white. Combined with a matching color on the activity line, this creates a cohesive highlight effect without hiding any data.
πΈ [SCREENSHOT: Its background highlighted in color, all other states in white, with the homicide line visible across all panels]
The Finished Result
The final visualization brings together all four layers into a small-multiples dashboard that:
Mirrors the editorial look and data density of elcri.men’s state crime page
Allows a reader to select any Mexican state and immediately see it highlighted in context
Uses no traditional Tableau chart types β only engineered MAKEPOINT coordinates on a blank map canvas
Is fully driven by LOD expressions that correctly scope normalization to the state level
A few additions I made:
A crime rate line graph at the top with all states represented by one line, shows reference of the selected states homicide crime rate compared to other states
A map of Mexico showing the highlighted state in a red color to show reference to location in the country
Change Parameter actions from the parameter drop down itself and the Map and Line Graph allows you to interact and change the state (via dashboard parameter action)
A text calc which takes some KPIs from the selected state to create a quick insight of the state selected
For example when Chiapas is selected
Text on the left dynamically changes when the state changes
Default View below:
Key Takeaways
If you want to try this technique yourself, here are the core principles to carry with you:
MAKEPOINT is a coordinate engine, not just a geography tool. Disabling the map background turns your canvas into a blank plotting space you fully control.
LOD expressions are essential for small multiples. Without FIXED LOD calculations scoped to the right dimensions, normalization won’t hold correctly across panels.
Normalize Y, engineer X. The Y position of each mark is a normalized data value (0β1); the X position is a computed interval from a date dimension. These two calculations together are the heartbeat of the layout.
Layer roles matter. Each geographic dimension serves one job β line, label, background, or baseline. Keeping these separate makes the workbook easier to maintain and debug.
Parameters unlock interactivity. A single parameter tied to a color calculation on the background layer turns a static grid into an exploratory tool.
Resources
Craig Heard’s Map Layers Visualization Catalogue β Tableau Public
El Crimen β Mexican State Crime Data β elcri.men
CONAPO Population Projections β used for homicide rate per 100,000 calculations
Tableau LOD Expressions Reference β Tableau Help
Thanks for reading. If you’re part of the #DataFam community and want to connect or share your own map layer experiments, find me on LinkedIn or Tableau Public.