Use case
We want to understand the distribution of values for a certain numeric property within a dataset. We’re used to average values and intuitively understand how to calculate them. However, we also know that average values can be misleading for skewed distributions which are common in the real world: for example, 2.5 is the average value for both(1, 2, 3, 4)
and (0, 0, 0, 10).
So, it’s usually better to use
percentiles. Parameterized by a
fractional number n = 0..1, where the n-th percentile is equal to a value that
exceeds a specified ratio of values in the distribution. The
median is a special case: it’s defined
as the 50th percentile (n = 0.5), and it can be casually thought of as “the
middle” value. 2.5 and 0 are the medians of (1, 2, 3, 4) and (0, 0, 0, 10),
respectively.
Data modeling
Let’s explore the data in theusers cube that contains various demographic
information about users, including their age:
| name | age |
|---|---|
| Abbott, Breanne | 52 |
| Abbott, Dallas | 43 |
| Abbott, Gia | 36 |
| Abbott, Tom | 39 |
| Abbott, Ward | 67 |
avg type.
Calculating the percentiles would require using database-specific functions.
However, almost every database has them under names of PERCENTILE_CONT and
PERCENTILE_DISC,
Postgres and
Snowflake
included. For BigQuery,
you’d need to use the APPROX_QUANTILES function.
Result
Using the measures defined above, you can explore statistics about the age of your users. For a typical dataset, the average age closely matches the median age, and the 95th percentile reveals the upper bound for the vast majority of users — for example, ifp95_age returns 82, then 95% of all users are
younger than 82 years.