~8 min read

Visual & Report-Scoped Measures

Measures That Enhance Reports Without Cluttering the Semantic Model

Dynamic Titles • Conditional Formatting • SVG Visuals • Filter Measures • Display Strings

Report-Scoped Presentation Layer
Scroll to explore

The Concept

Separating business logic from presentation logic

SEMANTIC MODEL MEASURES

"What the business needs to know"

Core business logic and reusable calculations that power all reports connected to the model.

Sales, Profit, Margin %, YTD calculations, KPIs

REPORT-SPECIFIC MEASURES

"How the report presents information"

Visual enhancements and formatting that are scoped to this report's presentation layer.

Titles, colors, SVG images, display formatting

Types of Report-Scoped Measures

Six patterns for enhancing your report visuals

Dynamic Titles & Subtitles

Returns text strings that update based on slicer selections or data context. Perfect for context-aware chart titles.

Chart Title =
  SELECTEDVALUE(Product[Category], "All Categories")
  & " Sales | " & FORMAT(TODAY(), "MMM YYYY")
Output Preview
Electronics Sales | Dec 2025

Use Cases

  • Context-aware chart titles
  • "Showing data for: [Region]"
  • Last refresh timestamps
Conditional Formatting Measures

Returns color codes (hex) or values used for background, font, or icon formatting rules.

Variance Color =
  VAR _var = [Actuals] - [Budget]
  RETURN IF(_var >= 0, "#00875A", "#DE350B")
Output Preview
RegionVarianceStatus
North+12.4%▲ On Track
South-3.2%▼ Below

Use Cases

  • Traffic light indicators
  • Threshold-based coloring
  • Brand color application
SVG Image Measures

Returns SVG markup as data URI strings — renders as images in tables/matrices for inline visualizations.

Bullet Chart SVG =
  VAR _pct = DIVIDE([Actuals], [Target])
  VAR _width = MIN(_pct * 100, 100)
  RETURN "data:image/svg+xml,<svg>...</svg>"
Output Preview
ProductActualsvs Target
Widgets$2.4M
Gadgets$1.8M

Common Patterns

  • Bullet charts / data bars
  • Sparklines in tables
  • Status icons / indicators
Visual-Scoped Filter Measures

Returns TRUE/FALSE to filter visuals without affecting other report elements. Scoped filtering.

Show Top N Filter =
  VAR _rank = RANKX(ALL(Product[Name]), [Sales])
  VAR _topN = SELECTEDVALUE(TopN[Value], 10)
  RETURN _rank <= _topN
Visual Behavior
Top 5 Products
1. Product A
2. Product B
3. Product C
...
Filtered by measure
All Products Total
247
Unaffected

Common Patterns

  • Top N filtering
  • Threshold filters
  • Show/hide logic
Display String Measures

Returns formatted text combining multiple values, units, or contextual information into a single display.

KPI Display =
  VAR _val = [Sales]
  VAR _var = [Sales vs LY %]
  RETURN FORMAT(_val, "$#,##0") &
    " (" & FORMAT(_var, "+0.0%;-0.0%") & ")"
Output Preview
$4.2M (+8.3%)

Other Patterns

  • "Showing 42 of 156 items"
  • "Q3 2024 vs Q3 2023"
  • Combined metric cards
Tooltip & Accessibility Measures

Returns descriptive text for tooltips or screen reader alt-text. Enhances UX and accessibility.

Tooltip Details =
  "Sales: " & FORMAT([Sales], "$#,##0") &
  UNICHAR(10) & // Line break
  "Target: " & FORMAT([Target], "$#,##0") &
  " | Var: " & [Variance %]
Tooltip Preview
Sales: $2,450,000
Target: $2,200,000
Var: +11.4% ✓

Also Used For

  • Alt-text for accessibility
  • Custom tooltip pages
  • Detailed hover information
Honorable Mention
Visual Calculations
Report-Exclusive: Can ONLY exist within a visual

A special type of DAX calculation that lives entirely within the visual layer. Unlike report-scoped measures (which you choose to keep in reports), Visual Calculations must be report-scoped — they cannot be added to the semantic model.

Running Total =
  RUNNINGSUM([Sales])
% of Total =
  DIVIDE([Sales], LAST([Running Total]))
Visual Calculation Context
RegionSalesRunning Total% of Total
North $1.2M $1.2M 30%
South $0.9M $2.1M 23%
East $1.1M $3.2M 28%
West $0.8M $4.0M 20%

Visual Calc Functions

  • RUNNINGSUM, MOVINGAVERAGE, RANK
  • PREVIOUS, NEXT, FIRST, LAST
  • COLLAPSE, EXPAND, ROWS, COLUMNS
  • INDEX, OFFSET — visual-aware navigation

Why Separate from Semantic Model?

Five key reasons to keep presentation logic in reports

Clean Field List

Report builders see only business metrics, not formatting helpers. Keep the semantic model focused on core business logic that powers all connected reports.

Avoid Confusion

Users won't accidentally drag [Title Measure] into a chart's values field. Presentation logic stays clearly separated from analytical measures.

Easier Maintenance

Visual measures stay with their reports, not scattered across the model. Update formatting in one place without impacting other report consumers.

Self-Service Friendly

Report creators get clear, obvious metrics they can trust. No risk of misusing internal formatting measures in business analysis.

Report Portability

Central reports own their visual logic while the semantic model stays clean and reusable across all connected applications.

Organization Strategies

Keep your report measures tidy and discoverable

Display Folders
📁 Report Measures
📁 Titles
📊 Chart Title
📊 Page Subtitle
📁 Formatting
📊 Variance Color
📊 Status Icon
📁 SVG
📊 Bullet Chart
Group by function using subfolders
Naming Conventions
  • Title -Dynamic title measures
  • Color -Conditional formatting
  • SVG -Image measures
  • Filter -Visual-scoped filters
  • Display -Formatted strings
Type prefix makes purpose instantly clear
Hide in Report View
📊 Salesvisible
📊 Profitvisible
📊 Color - Variance
📊 SVG - Bullet Chart
Right-click → Hide in report view

Pro Tips

Expert advice for working with report-scoped measures

Use a Dedicated Measures Table

Create a disconnected table (e.g., "Report Measures") specifically for report-level measures. This keeps them completely isolated from the semantic model.

Test SVG in a Card First

Before using SVG image measures in tables, test them in a card visual where debugging is easier. Validate the data URI renders correctly before scaling up.

Document Your Naming Convention

Establish prefixes (Title -, Color -, SVG -, Filter -, Display -) and document them for your team. Consistency makes maintenance dramatically easier.

Avoid Hardcoded Colors

Use variables or a color lookup table rather than hardcoding hex values. This makes theme changes and brand updates a single-point edit.

Keep Format Strings Simple

Complex FORMAT() calls are expensive. Pre-calculate values and minimize string concatenation in high-cardinality contexts for better performance.

Leverage UNICHAR() for Line Breaks

UNICHAR(10) creates line breaks in tooltip and display string measures. Combine with UNICHAR(9) for tab spacing in formatted outputs.

Common Gotchas

Pitfalls to watch out for when building report-scoped measures

SVG Image URL Data Category

If your SVG measure shows raw text instead of an image, check that the column's Data Category is set to "Image URL" in the modeling view. This is the most common SVG issue.

Conditional Formatting Hex Format

Color hex codes must include the hash (#). Returning "00875A" instead of "#00875A" will not work with Power BI's conditional formatting engine.

SELECTEDVALUE Returns BLANK()

Dynamic title measures using SELECTEDVALUE() return BLANK() when multiple items are selected. Always provide a fallback: SELECTEDVALUE(Table[Col], "All Items").

Filter Measures and Totals

Visual-level filter measures can remove the total row from tables/matrices. Use HASONEVALUE() or ISINSCOPE() checks to handle totals correctly.

Quick Reference

When to use each type at a glance

Type Returns Used In Example Use
Dynamic Titles Text string Title conditional formatting "Sales by [Region] | Dec 2025"
Cond. Formatting Hex color code Background / Font color rules Red/yellow/green status
SVG Measures SVG data URI string Image URL in Table/Matrix Inline bullet charts, sparklines
Filter Measures TRUE / FALSE Visual-level filter Top N, threshold filtering
Display Strings Formatted text Card visuals, text boxes "$4.2M (+8.3%)"
Tooltip/Alt-Text Descriptive text Tooltips, accessibility Detailed hover information
Visual Calculations* Calculated value Visual layer only Running totals, % of parent

* Visual Calculations must be report-scoped — they can only exist within a visual.

1 / 8