KPI visual: “Auto” Display Units ignore dynamic format strings for currency (but apply to decimals)
Summary
In the KPI visual, when a measure uses Dynamic Format Strings (Model view → Format → Dynamic), Auto scaling for the Callout Value Display Units treats decimal/whole numbers differently than currency. Decimals are abbreviated (e.g., K/M), while currency callouts show full, unscaled values—even in the hundreds of millions—unless you manually pick “Thousands” or “Millions.” This is inconsistent with Card and new Card visuals, which apply dynamic formats more predictably. Please make Auto honor the dynamic format string and/or measure value for all types (including currency) so KPI behavior matches other visuals.
Why this matters
- Consistency: Dynamic format strings were introduced to avoid using FORMAT() (text) and keep measures numeric while letting visuals display different formats by context (currency, decimal, %, units). KPI’s current Auto scaling undermines that goal.
- Usability: Financial dashboards frequently compare Actual vs Budget in a single KPI. If Auto doesn’t abbreviate currency, callouts become unreadably long and inconsistent with Cards on the same page.
- Maintainability: Forcing manual “Thousands/Millions” breaks scenarios where different metrics (EFTSL counts vs. $ revenue) share a KPI but need different scaling depending on selection. This pushes authors back to brittle workarounds (wrapper measures, FORMAT(), or custom tooltips).
Repro steps (Nov 2025 desktop builds)
- Create a single Switch measure (numeric) that returns different base measures based on a slicer, e.g., counts vs. currency.
- In Model view, set Format → Dynamic for the measure; return currency strings for revenue and decimal strings for counts. (Per Microsoft Docs and blog guidance.)
- Place the measure in a KPI visual (Callout = measure; Target = budget measure with the same dynamic format). Set Callout Value → Display Units = Auto.
- Change the slicer from counts (decimal) to revenue (currency).
Actual: Counts are abbreviated (K/M); currency shows full numbers (e.g., $228,537,815.48) without K/M.
Expected: KPI Auto should abbreviate both numeric and currency consistently based on dynamic format strings / current value, similar to Card behavior.
What we observe today (evidence & prior reports)
- Dynamic format strings work and are documented to keep the measure numeric while changing how visuals render the value. Visuals should honor that expression.
- Community reports show KPI “Auto” units not working or only under narrow conditions (e.g., whole vs. decimal types, specific decimal places), with long‑standing threads noting inconsistent scaling behavior.
- Tutorials and guidance emphasize dynamic format strings for abbreviations (K/M) and currency without losing numeric type—this works in Cards but is inconsistent in KPI Auto.
Technical analysis (hypothesis)
- Auto scaling in KPI likely uses a rule set that depends on the static format category (currency vs. decimal) and does not re‑evaluate the dynamic format string expression or SELECTEDMEASURE() value when deciding whether to abbreviate.
- Cards have newer rendering logic that respects dynamic formats more consistently (including with the “new Card” GA announcement and display‑unit behavior), while KPI retains older scaling heuristics.
Requested enhancements (developer‑friendly)
Honor Dynamic Format Strings in KPI Auto
- Update KPI’s Auto scaling to evaluate the dynamic format string expression (and SELECTEDMEASURE()) the same way Card does, so abbreviations like K/M are applied when appropriate regardless of currency/decimal.
Expose a “Respect dynamic format” toggle
- Add a per‑visual option (KPI → Callout Value) like “Use dynamic format string for Auto display units”. When On, Auto follows the dynamic format logic (including localized strings like [$-en-AU]$#,0,,M). When Off, the current heuristic remains.
Support locale‑qualified currency abbreviation patterns
- Allow dynamic format strings such as [$-en-AU]$#,0,,M or pattern tokens for abbreviated units (K/M/B) so authors can control thousands/millions within the dynamic format—and ensure KPI doesn’t strip the symbol when abbreviating. (Docs already encourage locale‑qualified strings; please make KPI honor them.)
Align Tooltips & Axis/Callout scaling rules
- Ensure Tooltips, Callout, and (if present) trend line labels all apply the same rule set when dynamic format strings are used, so users don’t see conflicting formats between the callout and hover tooltips.
Document current behavior & guidance
- Update KPI docs to clarify how Auto interacts with dynamic format strings and provide recommended patterns (e.g., when to set Display Units = None/Thousands/Millions vs. rely on dynamic format strings).
Why not use workarounds?
- Manual “Thousands/Millions” forces the same scale for all metrics, breaking mixed scenarios (e.g., counts needing full precision, currency needing M).
- FORMAT() returns text, breaking numeric comparisons and KPI goal logic—exactly what dynamic format strings were created to avoid.
- Custom tooltips or wrapper measures add complexity and don’t fix the KPI’s Auto behavior at the callout.
Impact (real-world example)
In HR dashboards (e.g., employee FTE/employee Headcount counts (decimal or whole numbers) vs Salaries ($)), users compare Actual vs Budget in a KPI. With Auto:
- Counts show K/M (good),
- Currency shows full 9‑digit values (bad),
leading to inconsistent readability and stakeholder confusion, especially at executive level. Aligning KPI Auto with dynamic formats resolves this without measure duplication.
References
- Dynamic Format Strings (Microsoft Learn): Overview, how to set in Model view, and why they keep numeric type (vs FORMAT()). Create Dynamic Format Strings for Measures in Power BI Desktop - Power BI | Microsoft Learn, powerbi-docs/powerbi-docs/create-reports/desktop-dynamic-format-strings.md at main · MicrosoftDocs/powerbi-docs · GitHub
- Microsoft Power BI Blog: Deep dive into dynamic format strings for measures (preview → general usage). Deep dive into the new Dynamic Format Strings for Measures! | Microsoft Power BI Blog | Microsoft Power BI
- SQLBI: Technical notes and examples using SELECTEDMEASURE() in format expressions for units (K/M). Introducing dynamic format strings for DAX measures - SQLBI
- KPI visual docs (Microsoft Learn): KPI visual requirements and formatting; lacks clarity on Auto with dynamic formats. Key Performance Indicator (KPI) visuals - Power BI | Microsoft Learn
- Community thread (long‑standing): KPI Auto units inconsistencies reported since 2019, partial fixes and limitations. KPI Visual not auto displaying the units correctly - Microsoft Fabric Community
- New Card visual GA blog: Indicates newer rendering consistency for modern visuals—please bring KPI in line. New Card visual in reports (Generally Available) | Microsoft Power BI Blog | Microsoft Power BI
Closing
Request: Make KPI Auto Display Units honor Dynamic Format Strings (and measure values) the same way Card does—so currency and decimals both abbreviate appropriately without manual scaling. This will improve readability, consistency, and trust in financial KPI dashboards without forcing authors into fragile workarounds.
Happy to share a reproducible PBIX if needed.
Recent ideas
Power BI, import report and semantic model: show change connection pop-up
When you need to import an existing Power BI report and semantic model in Tenant B that's created in Tenant A, you need to jump through a number of hoops to fix the original connection. It's doable, ...Reitse29 minutes agoMost Valuable ProfessionalNew2Views0likes0CommentsEnable per-user security for shared gateway connections using service accounts
When a shared gateway connection uses a highly privileged service account, all source queries run with that account’s permissions. Users cannot see the stored credentials, but report developers who c...AshishChougala48 minutes agoMicrosoft EmployeeNew5Views2likes0CommentsRequest to add a feature to extract gateway connection status and last time credentials used
Could you please add a feature in the admin UI on Microsoft Fabric/Power BI to extract the Gateway connections with details of the gateway connection status and last activity information along with t...Vinodkumar_Chak2 hours agoNew MemberNew20Views1like0CommentsPower BI - incorrect handling of empty string parameter in DAX query in paginated report
Blank string parameters in paginated reports are treated as empty strings in Power BI Report Builder but as null values in the Power BI Service, resulting in incorrect report output. -> Create a pag...roshinikumarkar5 hours agoMicrosoft EmployeeNew25Views5likes0CommentsAllow NotebookUtils getSecret() to authenticate with Workspace Identity
Current behavior In Microsoft Fabric, notebookutils.credentials.getSecret() authenticates against Azure Key Vault using the identity of the user who executes the notebook. This behavior appli...tmihara7 hours agoNew MemberNew20Views1like1Comment