ONLYOFFICE PERCENTRANK.EXC: Exclusive Ranks and Changing Benchmarks
Compare exclusive and inclusive ONLYOFFICE percentile ranks with complete grids, precision controls and a growing reference sample.
Verification status: See the evidence and test scope described in this guide. How formula examples are checked
PERCENTRANK.EXC gives a value’s relative position under an exclusive percentile-rank convention. For distinct observed values in a sample of n values, the uncut positions use j/(n+1). In a five-value sample, the first and last observations therefore have ranks 1/6 and 5/6 rather than 0 and 1.
Availability and version history
- Introduced: The Desktop Editors changelog explicitly lists PERCENTRANK.EXC as added in version 4.4.1. Docs and mobile introduction dates remain unknown.
- Availability: Documented in current ONLYOFFICE Spreadsheet Editor help; no final supported-version endpoint is established.
- Scope: Desktop and Docs release separately. The checked source revision does not establish identical behavior on every deployment, mobile client or older build.
- Checked: October 14, 2026, against the official PERCENTRANK.EXC reference, vendor illustration and pinned source. Worked outputs were independently calculated; no native percentile-rank test was performed.
Syntax and a source-scoped calculation model
PERCENTRANK.EXC(array, x, [significance])
The official reference requires a range of numeric values and a numeric x. The optional significance defaults to 3. Although the help uses the term significant digits, the pinned source cuts ordinary decimal results after the requested number of fractional places. The worked tables use an explicit 6 to make that choice visible.
Between distinct neighboring observations, the model interpolates j according to x’s distance between their values, then divides by n+1. Precision cutting happens afterward. This describes the complete numeric examples below; the helper also has separate tie and singleton branches, so the simple distinct-sample formula is not a universal rule for every input.
Reproduce the official example before changing data
Create VendorExclusiveRank. Enter this complete A1:D4 grid without headers inside the selection:
| Row | A | B | C | D |
|---|---|---|---|---|
| 1 | 1 | 3 | 5 | 7 |
| 2 | 0 | 2 | 4 | 6 |
| 3 | 7 | 5 | 3 | 5 |
| 4 | 10 | 8 | 6 | 4 |
Put =PERCENTRANK.EXC(A1:D4,2,4) in D5. The vendor illustration shows 0.1764. The unique target 2 is third among sixteen observations, giving 3/17=0.176470588…. Cutting at four fractional places gives 0.1764, whereas nearest rounding would give 0.1765.
F2 =PERCENTRANK.EXC(A1:D4,2) has the additional source-derived default result 0.176. F3 =PERCENTRANK.EXC(A1:D4,2,3) has the same expected result. The screenshot itself establishes only the displayed four-place example.
Compare inclusive and exclusive ranks directly
Create RankConventions, reserving A1:J14. Put Value in A1 and enter 10,20,30,50,80 in A2:A6. Put Target, Exclusive, Inclusive and Difference in C1:F1. Enter 10,20,25,30,40,50,80 in C2:C8.
Use D2 =PERCENTRANK.EXC($A$2:$A$6,C2,6), E2 =PERCENTRANK.INC($A$2:$A$6,C2,6) and F2 =D2-E2. Fill D2:F2 through row 8.
| Target | Expected D | Expected E | Expected F |
|---|---|---|---|
| 10 | 0.166666 | 0 | 0.166666 |
| 20 | 0.333333 | 0.25 | 0.083333 |
| 25 | 0.416666 | 0.375 | 0.041666 |
| 30 | 0.5 | 0.5 | 0 |
| 40 | 0.583333 | 0.625 | -0.041667 |
| 50 | 0.666666 | 0.75 | -0.083334 |
| 80 | 0.833333 | 1 | -0.166667 |
Show F to six decimal places when comparing the table. Its differences use the already cut D/E values, so they need not be perfectly symmetric around zero. They are not differences between infinitely precise fractions.
H2 =COUNT(A2:A6) returns 5. H3 =1/(H2+1) and H4 =H2/(H2+1) give the uncut endpoint fractions 1/6 and 5/6. Format them with enough decimal places to distinguish those mathematical controls from the explicitly shortened function results.
Advanced: adding a larger observation changes the denominator
Copy RankConventions as SixValues and enter 100 in A7. Change D2 to =PERCENTRANK.EXC($A$2:$A$7,C2,6) and E2 to =PERCENTRANK.INC($A$2:$A$7,C2,6), then fill D2:E2 through row 8. Keep the existing F formulas. Change H2 to =COUNT(A2:A7).
| Target | Expected D | Expected E | Expected F |
|---|---|---|---|
| 10 | 0.142857 | 0 | 0.142857 |
| 20 | 0.285714 | 0.2 | 0.085714 |
| 25 | 0.357142 | 0.3 | 0.057142 |
| 30 | 0.428571 | 0.4 | 0.028571 |
| 40 | 0.5 | 0.5 | 0 |
| 50 | 0.571428 | 0.6 | -0.028572 |
| 80 | 0.714285 | 0.8 | -0.085715 |
H2 becomes 6, so H3/H4 now describe 1/7 and 6/7. Put 100 in C9 and fill D8:F8 down through row 9. D9 is 0.857142, E9 is 1 and F9 is -0.142858. The new maximum still does not map to 1 in this exclusive model.
The original target values did not change, but their relative positions did because the reference sample grew. A benchmark report must identify the population or sample used to calculate its ranks, rather than presenting the fraction as an intrinsic property of a value.
Interpretation and limits
PERCENTRANK.INC and legacy PERCENTRANK use the inclusive calculation in the checked source. PERCENTILE.EXC takes a probability fraction and returns a value instead, with separate finite-sample restrictions.
A percentile rank is not the empirical fraction of records strictly below x and does not assign a future-event probability. For measures where smaller is better, a larger rank can indicate worse performance.
Keep x inside the observed range and supply a positive integer significance for these exercises. Exact native errors, degenerate samples, mixed-type inputs, ties and scientific-notation precision remain unverified. Finite digit cutting also means theoretical open-interval statements should not be generalized to every displayed result at very low precision. COUNT checks the explicitly numeric sample size without resolving those other cases.