Charts and Visualisations in the Results Dashboard
Every chart the results view renders: the overview gauges, arm’s length range strip, screening funnel, rejection donut, PLI histogram, percentile curve and industry bars.
The results view is a stack of sections, and the visual layer is what makes a finished run legible at a glance: the gauges that summarise the benchmark, the distribution charts that show the pool, and the cross-reference charts that connect the quantitative result to the qualitative record. Charts are built client-side from the same persisted analysis result the tables read, and they never add a number the record does not already hold.
What the charts section shows
The interactive charts are a licensed capability of the results view:
Plan feature: The ECharts visuals require the
result_chartsplan feature (see Plan Features). Without it each visual is replaced by a lock panel while the statistics, the percentile table, the arm’s length ranges table, the range strip and the company lists all stay available. The entitlement fails open for tenant-less platform accounts, and it gates only the charts inside the results view: the results list and industry diagnostics are not behind it.
Overview: the four gauges
The Overview section leads with four radial gauges, one per headline number:
- Accepted — accepted count over total screened, with the rejected count alongside; the sweep is the acceptance percentage.
- Median PLI — the centre of the accepted set (the sweep is the median scaled to 100).
- Risk Score — the printed number is the 0–100 score, lower is better; the sweep shows its complement, so a fuller ring is a better result.
- Benchmark Reliability — 0–100, higher is better, shown as a percentage.
Gauge colour is threshold-driven: risk goes amber at 25 and red at 50,
reliability blue at 40 and green at 70
(frontend/src/app/core/constants/chart.constants.ts).
Charts & Analysis: the pool, stage by stage
| Chart (UI heading) | Kind | What it shows |
|---|---|---|
| Arm’s Length Range | Range strip (plain HTML, not an ECharts chart) | The accepted set’s min–max track with the applied arm’s-length band, the median dot and the dashed tested-party marker. This strip always renders — it is not a plan-gated visual |
| Screening Funnel | Waterfall (stacked bar) | The filter pipeline stage by stage from the total candidate pool to the accepted set — where the pool shrank. A single stage that takes out most of the pool points at one screen |
| Rejection Rationale | Donut with a percentage legend | The rejected set by recorded reason, folded into the standardised rejection categories the platform maps reason strings onto: Potential RPT, Non Comparable Product, Non Comparable Financials, Non Comparable Function, Insufficient Business Information, High Intangible Assets, Other - Cooperative, Other |
| PLI vs. Arm’s Length Range | Bar per accepted company | Each company’s PLI against the band reference lines — who sits inside, who is on the edge, who is out |
| PLI Distribution | Histogram (up to 12 bins) | The frequency shape of the accepted PLI distribution with the tested-party marker. There is no boxplot in the results view |
| PLI Percentile Curve | Line | The accepted distribution’s percentile ladder from the 10th to the 90th, so the slope through the middle half is visible |
| Accepted Companies vs. Confidence Score | Bar histogram | How many accepted companies fall in each band of the qualitative composite score (shown as a percentage) — the cross-reference that shows whether the two screens agree |
| Multi-Year PLI Trend | Multi-line | One line per company across the detected fiscal years — rendered only when the study ran multi-year analysis |
Risk, industry and correlation
Three further visuals close the layer:
- Risk Profile (radar) — in the Predictive Risk Assessment accordion,
alongside a written Risk Breakdown. The accordion appears only when the
study carries predictive-risk output, which requires the
predictive_riskplan feature; the radar itself still respectsresult_charts. - Industry Analysis — a horizontal bar chart with two series, Median PLI and Mean PLI, per industry sector in the accepted set, over the per-sector table (count, mean, median, min, max). If one sector dominates the set, the chart says so before the table does.
- Correlation Analysis — a heatmap of the pairwise correlation coefficients
recorded for the study’s financial metric pairs. The engine computes Pearson
and Spearman rho per pair and skips a pair when fewer than three companies
carry both values, so a missing cell is missing data, not a zero
(
backend/app/services/statistics/statistics.py:358-386).
Reading the charts as a reviewer
- Start with the range strip. Shape of the pool, position of the defensible zone, position of the tested party — the whole conclusion in one glance. The numeric reading of the same data is in Reading the Statistical Results.
- Follow the funnel. The waterfall tells you which screen set the pool’s size. A funnel that tapers evenly is a normal search; a funnel with one cliff is one filter, and that filter is the review item.
- Read the donut against the funnel. A rejection reason that dominates the donut and corresponds to the funnel’s cliff is a single cause — fix the cause (scope, criterion, data) rather than defending company by company.
- Use the histogram and percentile curve for the tails. The band keeps the tails out of the range by construction; the histogram is where you see whether the tails contain anything the qualitative screen should have caught, and the percentile curve is where you see how fast the distribution climbs into them.
- The trend chart is the multi-year check. Drifting company PLIs across years argue for (or against) the multi-year treatment the study applied; stable lines argue the averaging is doing its job.
- Confidence-score bars. A pile of accepted companies bunched at the low end of the qualitative score is the two screens disagreeing — those are the rows to re-read in the grid.
Without the plan feature
Nothing is lost numerically: the summary statistics block, the percentile table, the arm’s length ranges table, the Arm’s Length Range strip and the accepted / almost-accepted / flagged / rejected company tables render for every tenant. What is absent is the visual layer — the gauges, the funnel, the donut, the PLI bars, the histogram, the percentile curve, the confidence bars, the trend, the risk radar, the industry bars and the heatmap — and in their place you see a lock panel.
FAQ
Do the charts compute anything the tables do not show? No. They render the persisted analysis result; every value in a tooltip is a value in a table or in the company’s record.
Why is the Multi-Year PLI Trend missing from my study’s charts? It renders only when the study’s result carries multi-year data — multi-year enabled, detected fiscal years, and at least one company with a per-year PLI. Single-year studies have nothing to trend.
The chips under the range strip say P25 and P75, but my study is an India
study. The chip labels are fixed; the values they print are the bounds
the engine actually applied (statistics.percentile_low / _high). For an
Indian study with six or more comparables those are Rule 10CA’s 35th–65th
percentiles, not the quartiles.
The funnel cliff and the donut dominant reason don’t match — what then? The funnel measures where companies dropped by stage; the donut measures the reason strings recorded on the rejected set, folded into the standardised categories by keyword. A reason that matches no pattern lands in Other, so when the two disagree, read the reasons on the grid rows for that stage.
See it working in your workspace
Sign in to run the steps above on a real study — or book a demo and we will walk the workflow end to end.
Related docs
Reading the Statistical Results: Range, IQR and Percentiles
How to read the statistical results: accepted comparables distribution, median, the applied arm’s length band, percentiles, CV, and tested party position inside the range.
Read docIndustry Diagnostics: Margins, Trends and Risk Profiles
Industry diagnostics across completed studies: margin profiles by industry, year-by-year margin trends and per-segment risk profiles used to sanity-check a benchmark before and after the run.
Read doc