The privacy threshold in action
Counts below N are hidden, rates disappear when either side of the fraction is hidden, and the export inherits the mask.
Synthetic data. The logic is the one used in production; the numbers are invented for this page.
A dashed outline marks a hidden count: it is drawn at the height of N, never at its real value.
| Session | Started | Finished | Completion rate |
|---|---|---|---|
| Session 1 | 48 | 41 | 85.4% |
| Session 2 | 33 | 24 | 72.7% |
| Session 3 | 21 | 12 | 57.1% |
| Session 4 | 9 | below 5 | below 5 |
| Session 5 | below 5 | 0 | below 5 |
A rate exists only when both sides of the fraction are visible. Otherwise a visible rate next to a visible count would reconstruct the hidden one.
The export inherits the mask
session,started,finished,completion_rate Session 1,48,41,85.4% Session 2,33,24,72.7% Session 3,21,12,57.1% Session 4,9,below 5,below 5 Session 5,below 5,0,below 5
The mask lives in the aggregation layer, so the dashboard, the CSV and any report inherit it. There is no second place to forget.