Custom tooltip pages transform Power BI reports from static charts into context-aware, interactive experiences. Learn how to build production-ready tooltip pages with precise canvas sizing, DAX measures that respond correctly to hover filter context, and design patterns that communicate at a glance.

Picture this: your sales manager hovers over a bar in a regional sales chart and immediately sees a mini-dashboard — trailing 12-month trend, top three products, margin percentage, and a target vs. actual gauge — all without clicking anywhere. No page navigation, no drillthrough, no cognitive interruption. Just instant context, right at the cursor.
That's the power of a well-crafted tooltip page in Power BI. Standard tooltips give you a field value and a label. Custom tooltip pages give you an entire report canvas — shrunk down, context-aware, and filtered to exactly whatever the user is hovering over. When built correctly, they transform a good report into an exceptional one. When built sloppily, they confuse users, hurt performance, and break in ways that are annoyingly hard to debug.
By the end of this lesson, you'll know how to design tooltip pages that look intentional and professional, wire them to visuals with surgical precision, build DAX measures that respond correctly to tooltip filter context, and avoid the half-dozen traps that catch even experienced developers. If you're already comfortable creating basic visuals and writing DAX — say, at the level covered in Introduction to DAX: Writing Your First Calculated Columns and Measures in Power BI — you're in the right place.
What you'll learn:
You should already be comfortable with:
If you need a refresher on filter context and CALCULATE, Mastering DAX Variables, CALCULATE Context Transition, and Iterator Functions for Complex Business Logic in Power BI is the right read before continuing.
Before writing a single line of DAX, you need to understand the mechanics. A tooltip page in Power BI is a report page you designate as a tooltip through its Page Information settings. When a user hovers over a visual that has been pointed to that tooltip page, Power BI renders the tooltip page in a small pop-up window — and here's the crucial part — filtered by the same filter context that the hovered data point carries.
That last sentence is what makes tooltip pages genuinely powerful. If your main visual is a bar chart of Revenue by Region, and the user hovers over "Pacific Northwest," the tooltip page renders with the Pacific Northwest filter active. Every measure on the tooltip page responds to that context. Your trend line shows Pacific Northwest trends. Your top products table shows Pacific Northwest products. You're not building a generic summary — you're building a filtered mini-report that knows exactly what the user is looking at.
This context propagation works through Power BI's cross-filter mechanism. The hover event passes the data point's dimension values as filter context to the tooltip page render, essentially the same way drillthrough passes context when you right-click a data point and navigate to a drillthrough page. In fact, tooltip pages and drillthrough pages share a lot of DNA — both are special-purpose pages that receive context from another visual. The primary difference is interaction model: drillthrough requires a deliberate right-click and navigate, tooltip is passive and immediate.
Key insight: The filter context passed to a tooltip page includes every field currently active on the hovered data point — the axis field, the legend field if one exists, and any report-level or page-level filters. Your DAX measures don't need any special modification to respond to this; they just evaluate normally within that context. The work is in designing measures whose output is meaningful in a narrow, single-data-point context.
Add a new page to your report by clicking the plus icon at the bottom of the Desktop window. Name it something explicit like TT_Region_Detail or Tooltip_Sales_Summary. The TT_ prefix is a convention many teams use to distinguish tooltip pages from regular report pages in the tab list.
Now open the page's settings. In the Visualizations pane, look for the Format your report page section (the paint roller icon applies to visuals, but when no visual is selected, it applies to the page). Expand Page information. You'll see two toggles here:
This is where most beginners get it wrong. The default canvas size is 1280×720 pixels — a full report page. If you use the default, your tooltip will be rendered at that size and then scaled down to fit the tooltip popup window, which typically maxes out around 320×240 pixels on screen. Everything looks tiny and illegible.
In the Format page pane, expand Canvas settings. Change the Type to Custom, then set:
These dimensions give you a tooltip that renders at roughly 1:1 scale in most display configurations. Some developers prefer 400×300 for more breathing room, especially if their users have large monitors or 4K displays. The key principle is designing at a size that matches how the tooltip actually renders. You wouldn't design a mobile layout at desktop dimensions, and the same logic applies here.
Tip: After setting the canvas size, place a rectangle shape covering the entire canvas with a dark fill and no border. This gives your tooltip a solid background rather than a transparent or mismatched white background that clashes with your report's theme. Match the fill color to your report's dark/accent color from your theme file — this is where a consistent Power BI Templates and Theme Files for Consistent Branding strategy pays dividends.
Users should never navigate to tooltip pages directly. Go back to Format > Page information and toggle Hidden to ON. The page tab will appear grayed out in Desktop (so you can still work on it) but won't be visible to end users in the Power BI Service.
With a 320×240 canvas, space is at a premium. Effective tooltip design is about ruthless prioritization. Here are the patterns that work:
Header + KPI card + sparkline is the most common and versatile layout:
Header + small table works well when the user needs to see breakdown data, like top 5 products within the hovered category.
Gauge + supporting metrics works when the primary question is "how close are we to target?"
Whatever layout you choose, apply these design principles consistently:
Warning: Avoid placing more than three visuals on a tooltip page. Each visual generates its own query when the tooltip renders, and users will see a spinning loader if the queries take more than a fraction of a second. A tooltip that takes 2 seconds to load destroys the UX benefit. Design for speed by keeping visuals minimal and DAX measures lean.
The tooltip's filter context is what makes DAX measures "just work" — but understanding how to author measures for tooltips will help you build much more useful ones.
When a user hovers over the "Pacific Northwest" bar in a Revenue by Region chart, the tooltip page renders with [Region] = "Pacific Northwest" in the filter context. Any measure that references Sales or Revenue will automatically evaluate for Pacific Northwest only. You don't need CALCULATE or FILTER to narrow the context — it's already narrow.
This means your tooltip measures should focus on what additional insight you can surface, not on re-aggregating the same number already visible on the main visual.
A sparkline showing trend over the last 12 months is one of the most valuable things you can put on a tooltip. The challenge is that tooltips don't pass date context — they pass the dimension context (Region, Product, etc.). So you need a measure that computes a time series, and you'll pair it with a Date table in the sparkline visual.
Revenue T12M =
VAR MaxDate = MAX ( 'Calendar'[Date] )
VAR StartDate = DATE ( YEAR ( MaxDate ) - 1, MONTH ( MaxDate ) + 1, 1 )
RETURN
CALCULATE (
[Total Revenue],
'Calendar'[Date] >= StartDate,
'Calendar'[Date] <= MaxDate
)
Place this measure in a line chart on the tooltip page with Date on the X-axis. When the tooltip renders for Pacific Northwest, the line chart already has Pacific Northwest in filter context, so it shows a 12-month trend for that region only.
Note: The
Revenue T12Mmeasure above uses the MAX date from the Calendar table as a rolling anchor. This works correctly in tooltips because the date filter isn't being passed from the hovering visual — the measure evaluates the full Calendar table filtered only by the region context. If your Calendar table has future dates, add a'Calendar'[Date] <= TODAY()filter to prevent the trend from flatting to zero in future months.
Target Achievement % =
VAR ActualRevenue = [Total Revenue]
VAR TargetRevenue = [Revenue Target]
VAR Achievement = DIVIDE ( ActualRevenue, TargetRevenue, 0 )
RETURN
FORMAT ( Achievement, "0.0%" )
This returns a formatted string, which is perfect for a KPI card visual on the tooltip. Because the tooltip passes filter context for the hovered data point, this measure evaluates the achievement for that specific region or product automatically.
One of the most professional touches you can add is a tooltip title card that shows what dimension value is being displayed. Here's how to build it:
Tooltip Title =
VAR CurrentRegion = SELECTEDVALUE ( 'Geography'[Region], "Multiple Regions" )
VAR CurrentPeriod =
IF (
ISFILTERED ( 'Calendar'[Month] ),
SELECTEDVALUE ( 'Calendar'[Month Name], "All Periods" ),
"All Periods"
)
RETURN
CurrentRegion & " | " & CurrentPeriod
Drop this into a Card visual at the top of your tooltip page. When the user hovers over "Pacific Northwest," the card reads "Pacific Northwest | All Periods." If your main visual also has a date slicer active, it might read "Pacific Northwest | March 2024." This kind of contextual awareness makes the tooltip feel like it understands what the user is looking at — because it does.
Ranking measures are particularly impactful in tooltips because they answer the implicit question "how does this compare to the others?"
Revenue Rank =
RANKX (
ALLSELECTED ( 'Geography'[Region] ),
[Total Revenue],
,
DESC,
DENSE
)
Using ALLSELECTED here is important. It means the rank is computed among the regions that are currently visible/selected in the report (respecting slicer selections), not all regions in the data. This gives users a rank that matches what they see on the main chart.
Key insight:
ALLSELECTEDin a tooltip context behaves exactly as it would in a regular visual — it respects slicer and page filter context but ignores the visual-level filter. This is the correct behavior for ranking inside a tooltip, because the tooltip's own filter context (the hovered data point) would otherwise collapse the rank to 1 every time if you usedALL.
Now that you have a tooltip page and some measures populating it, you need to connect them to your visuals.
Select the visual on your main report page that should trigger the tooltip. Open the Format visual pane and scroll down to Tooltips. You'll see:
That's it. Now when you hover over a data point in that visual, your custom tooltip page appears instead of the default tooltip.
You don't have to use the same tooltip page for every visual. A regional sales bar chart might use a region-detail tooltip, while a product matrix uses a product-detail tooltip. This is where naming your tooltip pages clearly matters — TT_Region_Detail, TT_Product_Summary, TT_Time_Trend — because the Page dropdown in the Tooltip settings shows all tooltip-designated pages, and you don't want to wire the wrong one.
If your visual has a Legend field (e.g., Revenue by Region, broken down by Product Category in the legend), the tooltip filter context includes both the Region and the Product Category for the hovered bar segment. Your measures will evaluate for that specific Region + Category combination, which is generally what you want. Be aware that some measures — like the ranking measure above — may produce unexpected results in two-dimensional contexts. Test hover behavior on both axis and legend segments.
Since tooltip pages and drillthrough pages share context-passing mechanics, it's worth being clear about when to use each.
Use tooltip pages when:
Use drillthrough pages when:
Use both together for the deepest interactivity: the tooltip gives instant context, and the drillthrough provides the full investigation path. This layered approach — hover for a quick summary, right-click to drill in — is the hallmark of professionally designed Power BI reports.
For building out those drillthrough pages with navigation patterns, Build Professional Navigation in Power BI: Bookmarks, Buttons & Page Flow Mastery covers the companion patterns that make tooltip + drillthrough workflows feel seamless.
Tip: You can add a small "drill for details →" text annotation to your tooltip page — not a clickable button (tooltips don't support interactions) but a visual cue that a drillthrough page exists. This guides users who want to go deeper. Keep it subtle: small italic text in the corner.
Sometimes you want a tooltip to show different content depending on what's being hovered. For example, if your main chart shows data at both Region and Sub-Region granularity (using a hierarchy axis), you might want different detail for a top-level Region hover versus a Sub-Region hover.
The cleanest approach is to use a DAX measure that detects the current granularity and adjusts its output:
Contextual Summary =
VAR IsSubRegionContext = ISFILTERED ( 'Geography'[Sub Region] )
VAR SubRegionRevenue =
IF (
IsSubRegionContext,
[Total Revenue],
BLANK ()
)
VAR RegionRevenue =
IF (
NOT IsSubRegionContext,
[Total Revenue],
BLANK ()
)
RETURN
IF (
IsSubRegionContext,
"Sub-Region Revenue: " & FORMAT ( SubRegionRevenue, "$#,##0" ),
"Region Total: " & FORMAT ( RegionRevenue, "$#,##0" )
)
ISFILTERED returns TRUE when a specific column has a direct filter applied to it — which happens when you hover over a sub-region bar but not when hovering at the region level. This lets you build a single tooltip page that gracefully handles multiple levels of your hierarchy.
Let's walk through building a complete tooltip system for a regional sales report. Assume you have a standard star schema with a Sales fact table, Geography dimension, Products dimension, and Calendar dimension.
TT_Region_PerformanceAdd a Rectangle shape covering the full canvas. Set fill to your report's primary dark color (e.g., #1E2A3A). Remove border.
Create these measures:
TT Region Name =
SELECTEDVALUE ( 'Geography'[Region], "All Regions" )
TT Period Label =
VAR SelectedYear = SELECTEDVALUE ( 'Calendar'[Year] )
VAR SelectedMonth = SELECTEDVALUE ( 'Calendar'[Month Name] )
RETURN
IF (
NOT ISBLANK ( SelectedMonth ),
SelectedMonth & " " & SelectedYear,
IF (
NOT ISBLANK ( SelectedYear ),
"FY " & SelectedYear,
"All Periods"
)
)
Add a Card visual at the top with TT Region Name. Set font to bold, 12pt, white. This is your tooltip title.
Build a row of three KPI cards using these measures:
TT Revenue = [Total Revenue]
TT Revenue vs PY % =
VAR CurrentRevenue = [Total Revenue]
VAR PriorYearRevenue = CALCULATE ( [Total Revenue], SAMEPERIODLASTYEAR ( 'Calendar'[Date] ) )
RETURN
DIVIDE ( CurrentRevenue - PriorYearRevenue, PriorYearRevenue, 0 )
TT Margin % =
DIVIDE ( [Gross Profit], [Total Revenue], 0 )
If you want deeper time intelligence patterns for measures like Revenue vs PY, Mastering Time Intelligence in Power BI: Building YTD, MTD, and Period-over-Period DAX Measures has complete, production-ready versions.
Format TT Revenue vs PY % with conditional formatting so it turns green when positive and red when negative. On the small tooltip canvas, this color signal carries a lot of weight. For the techniques behind dynamic color logic, Mastering Power BI Conditional Formatting: Dynamic Colors, Data Bars, and Icon Sets Driven by DAX Measures covers exactly this pattern.
Add a Line chart at the bottom of the canvas:
Calendar[Month] (or Calendar[Month-Year] for a proper sort)[Total Revenue]Add a constant line at [Revenue Target] to show the target as a reference. With the tooltip's filter context active, this sparkline shows the selected region's monthly trend.
Go to your main report page. Select the Revenue by Region bar chart. Format pane > Tooltips > Type: Report page > Page: TT_Region_Performance.
Test it by hovering over each region bar. You should see the tooltip page rendered with region-specific data in each visual.
Use the following scenario to practice what you've built:
Scenario: You're building a product performance report for a retail company. The main report has a matrix visual showing Product Category and Sub-Category against monthly Revenue. You need to add a tooltip that shows, for any hovered product row:
Your tasks:
TT_Product_Detail with a 360×280 custom canvasTT Product Name measure using SELECTEDVALUE that gracefully handles both Category and Sub-Category hover contexts using ISINSCOPEAvg Order Value measure using DIVIDEBonus challenge: Add a TT Rank in Category measure using RANKX that ranks the hovered sub-category among all sub-categories within the same parent category. This requires using ALL on the Sub-Category field while keeping the Category filter active.
Check that:
Also check that the visual type supports custom tooltips. As of this writing, some custom visuals from AppSource don't support report page tooltips — they fall back to default tooltips silently.
This almost always means the measures on your tooltip page are using ALL() or REMOVEFILTERS() somewhere in their logic that's stripping the tooltip's filter context. Audit every measure used on the tooltip page. If a measure is defined as:
Revenue % of Total = DIVIDE ( [Total Revenue], CALCULATE ( [Total Revenue], ALL ( 'Geography' ) ) )
...it will show the correct percentage on the main visual, but inside the tooltip it will always show 100% because the ALL() removes the geography filter that the tooltip is trying to apply. Fix this by using ALLSELECTED instead of ALL, or by explicitly checking what context should be preserved.
Every visual on the tooltip page fires a separate DAX query. A tooltip page with five visuals fires five queries on every hover event. Keep it to three visuals maximum, and audit your measures for performance. Iterator functions like SUMX over large tables, unoptimized RANKX calculations, and measures that call CALCULATE with complex filter arguments are the usual culprits.
For deeper performance analysis techniques, Optimizing Power BI Report Performance: Query Reduction, Aggregations, and DirectQuery Tuning covers the query reduction strategies that apply directly here.
Warning: If your report uses DirectQuery mode, tooltip performance is especially sensitive. Each hover event generates live database queries. Tooltip pages on DirectQuery models should contain only measures backed by aggregation tables or simple, indexed queries. A tooltip that requires a full table scan on a 50M-row table will time out or lag visibly. See the discussion of composite models and aggregations if you're in this situation.
You set the canvas to 320×240 in Desktop, but the tooltip renders at a different size in the Service. This happens when there's a DPI scaling mismatch between your development machine and the user's browser. The Power BI Service renders tooltips at a fixed pixel budget, so test your tooltip design in the Service (not just Desktop) before finalizing. You may need to adjust canvas size slightly based on real-world testing.
SELECTEDVALUE returns BLANK when more than one value is in context for the specified column. If your tooltip is wired to a visual that has multiple values in context for the field you're querying — like a matrix with both row and column headers — SELECTEDVALUE may return blank. Use the second argument of SELECTEDVALUE as a fallback:
TT Region = SELECTEDVALUE ( 'Geography'[Region], "Multiple" )
Or use CONCATENATEX for cases where you genuinely want to show all values:
TT Regions List = CONCATENATEX ( VALUES ( 'Geography'[Region] ), 'Geography'[Region], ", " )
If users can see the tooltip page tab in the Power BI Service, you forgot to set Hidden = ON in Page information. Go back to the tooltip page in Desktop, open Format > Page information, toggle Hidden to ON, and republish.
Custom tooltip pages are one of those Power BI features that look simple from the outside — "just make a small page and turn on a toggle" — but reward depth. The real skill is in understanding that tooltip pages receive filter context from the hovering visual, designing DAX measures that surface meaningful insights at single-data-point granularity, and building a canvas layout that communicates at a glance rather than demanding careful reading.
The core principles to carry forward:
For your next steps, consider combining tooltip pages with dynamic measure selection using field parameters — covered in Mastering Power BI Field Parameters: Dynamic Axis Switching and Metric Selection for Flexible Self-Service Reports — so the tooltip content adapts based on whichever metric the user has currently selected on the main visual. That combination creates genuinely adaptive reporting that feels almost prescient.
You should also look at how Master Filters, Slicers, and Cross-Filtering in Power BI affects tooltip behavior — slicer selections carry into tooltip context, which means your tooltip measures will reflect active slicer filters. Understanding this interaction lets you build tooltip experiences that are consistent with the rest of the user's filtering session rather than showing numbers that seem to contradict what they see elsewhere.
Great tooltip pages are a form of storytelling — they anticipate the question in the user's head the moment they pause over a data point, and they answer it before the user even has to ask.
Getting Started with Power BI