Unused Measures
Detects measures that are not used by any report visual, either directly or through the DAX of another measure that is itself used.
What It Detects
This flag identifies DAX measures in the analyzed model that are not used anywhere in the report. A measure is treated as used when either of these is true:
- Its name appears in the report's visual layout — field bindings, projections, filters, slicers, or conditional formatting references (the analyzer scans the
Report/LayoutJSON with regex patterns). - It is referenced in the DAX expression of another measure or calculated column that is itself used. These references are followed transitively through chains of arbitrary depth (A → B → C), so a measure used only as a building block of a used measure is not flagged.
Any measure that satisfies neither condition is flagged as unused.
Detection scope
Usage is determined only from the single uploaded .pbix/.pbit file. The analyzer inspects the report's visual layout and the DAX expressions inside the model. It does not inspect KPI definitions, paginated (RDL) reports, or external workbooks. A reference that lives only inside an unused measure's DAX does not count — the referencing measure must itself be used.
WARNING
Soterre PBI Analyzer checks usage against one semantic model–report pair at a time. In Power BI Service, a single semantic model can be connected to multiple reports. A measure that appears unused in one report may be actively used in another report built on the same model. Keep this in mind before removing any flagged measures.
Why It Matters
- Clutter — Unused measures increase the size of the field list, making it harder for report authors to find what they need.
- Maintenance risk — Developers may unknowingly update or depend on unused measures, wasting effort.
- Misleading documentation — Unused measures can suggest functionality that does not actually appear in any report, confusing new team members.
Trigger Conditions
A measure is flagged as unused when all of the following are true:
- The measure's name is not found anywhere in the report's visual layout (no visual, matrix, card, chart, filter, or slicer binding references it).
- The measure is not referenced in the DAX expression of any measure or calculated column that is itself used in the report. Transitive dependencies are followed, so a helper measure consumed by a used measure is not flagged — but a helper referenced only by an unused measure still is.
Threshold: Zero references across both checks.
Output
Each analyzed measure is returned as an object with the following fields:
| Field | Description |
|---|---|
name | Fully-qualified measure reference, e.g. Sales[Total Revenue] |
tableName | Home table of the measure |
expression | The full DAX expression of the measure (no truncation; a string or array of strings) |
isUnused | true when the measure is not used anywhere in the report |
isDuplicated | true when another measure with the same short name exists in a different table |
Notes and Edge Cases
- Layout-based detection — Usage is detected by matching the measure name against the report's Layout JSON. Detection does not extend to paginated (RDL) reports, Excel live connections, or any external artifact — a measure used only in those contexts may be falsely flagged. Verify before deleting.
- Transitive dependencies — A helper or base measure referenced only inside another measure's DAX is counted as used only if that parent measure is itself used. If the parent is unused, the helper is flagged as unused too.
- Display folder measures — Measures organized into display folders are scanned the same way; the folder structure does not affect flagging.
Related Flags
- Unused Columns — Same concept applied to columns.
- Duplicate Measures — Measures whose name is defined on more than one table (name-based; DAX expressions are not compared).