Both halves got worse and the average got better
Rate-mix decomposition splits every KPI move into what customers did and what the mix did

Introduction
Retention was up three points in the Monday deck, and in the same quarter, enterprise retention had fallen and SMB retention had fallen. Three numbers, one slide, no typo. The metrics lead checked the query twice and then a third time with a different tool, because the only thing more alarming than a broken dashboard is a correct one saying something impossible.
It was correct. Nothing about the customers had improved. What had changed was the mix: enterprise accounts, which retain at 94 percent on a bad day, had grown from a third of revenue to nearly half. The average was being dragged up by composition while both segments quietly slid. An average can improve without a single customer behaving better.
The board saw the blended number. The budget followed the blended number. More money went to the motion that was "working," which was precisely the motion that was decaying underneath its own weighting.
Every blended metric is two claims wearing one number
A weighted average moves for exactly two reasons: the rates inside it change, or the weights between them do. Retention, conversion, CAC, average order value, gross margin, NPS: all of them are blends, and every one of them can rise while every component falls, or fall while every component rises. Statisticians have a name for the extreme case, Simpson's paradox, and it has been in the literature since 1951. (Dashboards have had seventy-five years to catch up. They are taking their time.)
The failure is not that anyone computed the number wrong. It is that a blended KPI answers the question "what happened to the total" while everyone in the room hears "what happened to the customers." Those are different questions with, routinely, opposite answers.
Decompose before you celebrate
The method is rate-mix decomposition, and it is the kind of thing a sharp analyst does once under deadline and a serious data function does automatically, on every KPI, every period.
Split any blended metric's movement into two parts. The rate effect: what the change would have been if the segment mix had stayed frozen and only the per-segment rates moved. The mix effect: what the change would have been if every rate had stayed frozen and only the composition moved. The two parts sum to the total move, so nothing hides. A three-point gain that decomposes into plus five from mix and minus two from rate is not good news. It is bad news with good timing.
Doing this properly has real machinery in it: segments that are stable enough to compare across periods, cohort views that hold acquisition vintage constant, and the judgment call of which cuts matter, because decomposing across fifty dimensions produces fifty stories and no decision. We built this into a revenue dashboard for a subscription business where the argument "growth is fine, feel the momentum" and the argument "churn is eating us" were both being made from the same chart. The decomposition settled it in one meeting. Momentum was mix. Churn was real. The reallocation that followed paid for the work inside the quarter.
A KPI that moved because of mix is a fact about your spreadsheet. A KPI that moved because of rates is a fact about your customers.
The honest counterpoint: sometimes mix shift is the strategy. Moving upmarket on purpose should change the blend, and a mix-driven improvement is then exactly what success looks like. The decomposition does not forbid that story. It just forces the story to be told out loud, with the mix effect labeled as chosen rather than mistaken for earned.
The ten-minute version
Take your most-watched KPI. Split it by the one segmentation your business actually runs on, plan tier, customer size, channel. Compute each segment's rate for this period and last. If the aggregate moved one way and most segments moved the other, your dashboard has been telling the board a composition story in a customer-behavior voice.
TensorLabs builds analytics layers where the decomposition is the default view, not the forensic exercise after a bad quarter. If one of your numbers has been improving in a way nobody can quite explain, write to us and describe it. A few sentences is usually enough to tell whether you have momentum or arithmetic.
You might also like
Keep reading from the journal.
July 10, 2026AI
Build a Self-Hosted Support Ticket Triage Service with Qwen3.5-4B
In late June 2026, vLLM shipped v0.21: speculative decoding support for reasoning models, KV cache offload, and Model Runner V2 becoming the default for dense Llama and Mistral models.
July 6, 2026AI
The AI feature stuck on your roadmap has a price tag
The unshipped feature has a cost. Buying the outcome caps it.
July 3, 2026AI
From Prompt to Workflow: Multi-Step Python Agents with Microsoft & Copilot
At Microsoft Build 2026 in early June, the Microsoft Agent Framework reached general availability and the GitHub Copilot SDK hit 1.0 support inside it for both