The question a table can't answer

Picture a slotting review. The inventory report shows the oldest stock in the building, sorted by days on hand, and every row is a location ID: 14-03-C, 14-05-B, 15-02-A. The list is accurate, but it hides the pattern that matters. Most of those pallets sit in two aisles, three levels up, directly across from the fastest-moving pick faces in the warehouse.

Nobody can see that from a table, because a location ID describes a place without showing it. A warehouse heat map does the opposite. It draws every storage location where it physically stands and colors it by a measure, so concentrations, gaps, and outliers become visible at a glance. Aging stock, pick density, replenishment pressure, and capacity all read differently once they are laid over the floor.

For most operations teams, the data for this already lives in Power BI. Inventory snapshots, pick lines, and replenishment tasks arrive from the WMS every night. The missing piece is the warehouse itself.

Why Power BI has no warehouse map

Power BI's map visuals are built for geography. Azure Maps, the filled map, and the ArcGIS visual all place data by latitude and longitude, or by a recognized place name such as a city or postal code. A warehouse doesn't work that way. Its locations live in a private coordinate space measured in inches or feet from a corner of the building, with rack levels stacked on top of each other. There is no built-in visual that understands aisles, bays, and levels, and none that draws a building's own floor plan beneath the data.

That leaves report authors with three workarounds. Each can produce something map-like, and each runs into a wall at a different point.

The workarounds, and where they fall short

The scatter chart

The quickest experiment is a scatter chart: put the X coordinate on one axis, the Y coordinate on the other, and color the points with conditional formatting. It works, and for a small single-level pick area it may be enough.

The trouble starts with a real building. Every location becomes a dot of the same size, so a floor-stack lane looks identical to a carton-flow slot. Rack levels share the same X and Y, so five levels collapse into one point and four of them disappear. Large layouts are sampled, which means some locations may not be drawn at all. You can place an image behind the plot area, but lining a floor plan up with the data means pinning both axis ranges to the drawing's exact extent and redoing it whenever the layout changes.

Shape Map

Shape Map colors regions from a custom map file, so in principle each storage location can be its own shape. In practice, someone has to draw every location as a polygon, give it an ID that matches the data, and convert the result to TopoJSON. A warehouse with 5,000 locations means 5,000 shapes, and a re-rack means rebuilding the file.

Even then, two limits remain. Shape Map has no option for a custom background image, so the CAD layout that gives the shapes their context cannot sit behind them. And it is flat by design, so every level of a rack has to be a separate map or a separate filter.

Deneb

Deneb is the most flexible option. It is a certified custom visual that renders charts from Vega and Vega-Lite specifications, so a skilled author can draw rectangles at real coordinates, size them from the data, and layer an image underneath.

The cost is code. Every part of the visual, from the scales and marks to the tooltips and interactions, is written and maintained as a JSON specification. Search, level filtering, saved views, and anything resembling 3D have to be built by hand, and the specification usually ends up understood by one person on the team. For a proof of concept, Deneb can be a good fit. For a report that operations relies on every day, it becomes a small software project.

Warehouse heat map options in Power BI
ApproachCAD layout behind the dataRack levelsLocation sizesEffort to build and maintain
Scatter chartPossible, aligned by handLevels overlapSame-size markersLow to start, fiddly to align
Shape MapNot supportedFlat, one map per levelFrom hand-drawn shapesHigh: draw and convert every shape
DenebPossible, with codeWith custom codeWith custom codeHigh: write and maintain the specification
Unclocked 3D HeatmapYes, aligned to your coordinatesStacked in 3D, or one level in 2DFrom your dataLow once coordinates exist

The workarounds share a root problem. None of them start from what a warehouse already has, which is a list of locations with positions and sizes. That is the gap we built for.

Closing the gap: coordinates and a visual built for warehouses

A useful warehouse heat map needs two things that Power BI doesn't provide: coordinates for every location, and a visual that knows what to do with them.

The coordinates usually already exist, just not in a form Power BI can read. They are in the facility's AutoCAD drawing, where every rack and bay was placed to scale. Our warehouse mapping service turns that drawing into a coordinate table: one row per location with its ID, X, Y, and Z, plus sizes where the drawing has them. We confirm units, location naming, and level heights with you before mapping starts, so the table matches the IDs in your WMS.

The visual is Unclocked 3D Heatmap, a certified Power BI visual that reads that table directly. It draws each location at its real position and size, stacks rack levels at their heights, and can place the same CAD layout underneath as a floor image. Report users can orbit the warehouse in 3D, switch to a flat 2D plan, search for a location, and filter by aisle or level, all inside the report and in step with its slicers.

The rest of this guide covers the full build, whether you prepare the coordinates yourself or have us do it.

Start with a location table

Every approach above comes down to the same foundation: a table with one row per bin, slot, or pallet position, describing where that location is.

A location table for three bins in one aisle, in inches
Location IDAisleLevelXYZWidthLengthHeight
A01-01-AA01A000404848
A01-01-BA01B0048404848
A01-02-AA01A4000404848

X and Y place the location's corner on the floor, and Z is the height of its base, which is what separates one rack level from the next. Width, length, and height are optional, but they let a mixed building read correctly, with floor-stack lanes, pallet positions, and carton-flow slots each drawn at their true size. Choose one unit for every column; mixing feet and inches is the most common reason a first layout comes out stretched or overlapping.

Getting coordinates from your CAD drawing

Few WMS exports include coordinates, so they usually come from one of three places.

The WMS or a slotting tool. Some systems store travel-sequence or slotting coordinates for each location. It is worth asking whoever maintains your location master before building anything.

The AutoCAD drawing. When racks are drawn as blocks, AutoCAD's DATAEXTRACTION command can export each block's attributes and insertion point to a CSV. Two details deserve attention before loading the result. A block's insertion point is not always the corner of the location, so check whether it needs offsetting by half the width and length. And drawings typically show one block per bay rather than one per level, so each bay needs to be expanded into its levels, each with its own Z. When the drawing doesn't use clean blocks, or the team doesn't have time to untangle it, this is the work our mapping service takes on.

A calculated grid. Regular racked areas can be calculated from the location ID. With aisles 120 inches apart, 48-inch bays, and 60-inch levels, three custom columns in Power Query place every location:

X = ([Aisle Number] - 1) * 120
Y = ([Bay Number] - 1) * 48
Z = ([Level Number] - 1) * 60

Real buildings have columns, cross aisles, and the occasional short rack, so compare the result with the floor plan and correct the exceptions by hand.

Model the layout once

Load the location table as its own dimension and relate Layout[Location ID] to each fact table, one to many, filtering in a single direction. Take every descriptive field from the layout table: coordinates, sizes, aisle, level, zone, and location type.

Keeping the layout separate is what keeps empty locations on the map. If locations came from the inventory table, an empty bin would have no row and would never be drawn, and empty space is often exactly what a planner is looking for. In the visual, turning on Show items with no data for the location field makes sure Power BI sends locations whose measures are all blank.

Finally, make every location ID unique across the model. If several buildings share one report, include the site in the ID or the key, because A01-01-A almost certainly exists in each of them.

Measures that tell the story

Color the map with measures rather than columns, so the warehouse responds to date, client, and zone slicers like every other visual on the page. These four answer most of the questions operations teams bring to a heat map:

On Hand Units = SUM ( Inventory[Quantity] )

Picks Last 28 Days =
CALCULATE (
    COUNTROWS ( PickLines ),
    DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -28, DAY )
)

Location Fill % =
DIVIDE ( [On Hand Units], SUM ( Layout[Capacity Units] ) )

Days Since Last Pick =
VAR LastPick = CALCULATE ( MAX ( PickLines[Pick Date] ) )
RETURN
    IF ( ISBLANK ( LastPick ), BLANK (), DATEDIFF ( LastPick, TODAY (), DAY ) )

Rather than building a page for each, give report users a single heat map with a field parameter, or a small disconnected table and a SWITCH measure, so they can move between stock, activity, and fill on the same layout.

Put it on the floor plan

With the location table and measures in place, the visual itself takes a few minutes to set up.

  1. In Power BI Desktop, select Get more visuals, search for Unclocked 3D Heatmap, and add it. It is free for up to 2,500 locations.
  2. Add Layout[Location ID] to Location ID, your X and Y columns to the coordinate fields, and Z if the building has rack levels.
  3. Add one of your measures, such as Days Since Last Pick, to Heat Value.
  4. Add width, length, and height if location sizes vary, and up to three category fields, such as aisle, level, and zone, for filtering inside the visual.
  5. To show the CAD layout beneath the racks, add the floor plan as an image in the visual's Scene settings and align it to the same coordinate bounds as your data.

The how-to guide covers every setting in detail. To explore before connecting your own data, open the sample report, or load our 2,208-location sample CSV, which already includes coordinates, sizes, and values.

Colors that hold up in a meeting

A heat map earns trust when its colors mean the same thing every time someone looks at it. Three decisions make the difference.

Gradient or bands. A smooth gradient shows small differences and suits exploration. Bands, with hard breaks at set values, suit operating rules: a location at 92% fill is over the line, and one at 88% is not. If the team already works to thresholds, the color scale should match them.

A fixed range for comparisons. An automatic range rescales to whatever is on screen, so red during a quiet week and red during peak season describe very different numbers. When comparing weeks, sites, or zones, set a manual minimum and maximum.

A plan for outliers and zeros. One location with 4,000 picks can push the rest of the building into the same pale shade, and capping outliers restores the contrast. Zeros deserve a deliberate choice too. For fill, an empty location is useful information; for picks, a zero may be the next candidate for re-slotting.

When targets vary with the selection, such as a different aging threshold for each client, the thresholds can come from DAX measures rather than fixed numbers, and the colors follow the slicers.

Five questions to put on the map first

Before you share it

Put your warehouse on the map

Unclocked 3D Heatmap is free on Microsoft Marketplace for up to 2,500 locations. Start with the sample report, then connect your own location table. If your layout only exists in AutoCAD, we can map it for you.