The capability, on synthetic data

One metric. Two definitions. Zero warnings.

This is a real Stratum run on a synthetic Contoso portfolio. Two dashboards both define a measure called [Total Sales] — and they calculate it differently. Here's the moment the engine catches it.

Derived from model metadata alone — the DAX logic, never a row of data.
Semantic Conflicts — ContosoOperations × ContosoSales 3 cross-model findings  ·  1 P1  ·  2 P2
P1

Same measure name, divergent expressions

[Total Sales]
ContosoOperations · [Total Sales]
SUM ( FactSales[SalesAmount] ) - SUM ( FactSales[DiscountAmount] )
nets out discounts
ContosoSales · [Total Sales]
SUM ( FactSales[SalesAmount] ) — no discount term —
gross of discounts
Same name, two different numbers. Ask an agent for "total sales" and Operations returns net-of-discount while Sales returns gross — silently, with no flag. A human might catch it once; an AI scales it to every answer.
P2

Different names, identical logic

[Total Sales] ≡ [Sales Sum]
ContosoOperations · [Total Sales]
SUM ( FactSales[SalesAmount] ) - SUM ( FactSales[DiscountAmount] )
ContosoSales · [Sales Sum]
SUM ( FactSales[SalesAmount] ) - SUM ( FactSales[DiscountAmount] )
Two labels, one measure. String-matching sees two different names and moves on. Stratum reads the logic and recognizes the same calculation — the equivalence a name-based tool can't detect.
P2

Semantic duplicate across models

[Margin KPI Color]
Defined twice, identically. The same conditional-format measure — same thresholds (0.45, 0.35), same hex colors — lives in both models. A consolidation opportunity: one certified definition instead of two that can drift apart.
Why this is the hard part

Every other tool can tell you the measures are named differently. None can tell you they compute the same thing — or don't.

Documentation tools read one model at a time. Catalogs map lineage above the calculation. Copilot answers from whatever it finds. Detecting that [Total Sales] means two different things across a portfolio takes comprehension of the DAX itself — which is the one thing Stratum does that nothing else in the category does.

None of this required your data. Every finding above came from the model's structure and DAX — not a single row of sales. Contoso is synthetic, but on your models Stratum reads exactly the same metadata and nothing more. See how the boundary is enforced →

The same run, scored for AI

Those conflicts have a consequence — and it's measurable.

The identical run grades the portfolio for AI readiness. The unresolved conflicts you just saw are exactly why "Unambiguous metrics" bottoms out — and why this portfolio isn't ready for Copilot or natural-language Q&A.

44/100
Weak · not AI-ready
Both models score 44/100. Resolving conflicting and undocumented metrics is the single highest-impact lever.
Clear & documented18
Unambiguous metrics8
Trustworthy DAX80
Sound structure15
Governed data flow100
What you've seen is one view

The full report goes further — on your portfolio, with our read on it.

Conflicts and AI readiness are two views of a complete assessment. The rest comes with the engagement, interpreted rather than handed over as a raw tool.

Portfolio overview

Every model, finding, and priority at a glance — the shape of the whole estate in one screen.

Findings & triage

Every finding ranked by priority and remediation effort — a consulting-grade worklist, not a raw lint dump.

Model explorer

Measures, columns, relationships, and dependencies — plain-English, mapped, and navigable.

See the full report — every finding, every model — on your own portfolio.

That was Contoso. What would it find in yours?

Run the same analysis across your portfolio and see exactly where your metrics quietly disagree — before your AI does.