Skip to main content
@overload
atoti.agg.quantile(
    operand: LevelOrVariableColumnConvertible,
    /,
    q: _Quantile,
    *,
    mode: Literal[‘simple’, ‘centered’, ‘inc’, ‘exc’] = 'inc',
    interpolation: Literal[‘linear’, ‘higher’, ‘lower’, ‘nearest’, ‘midpoint’] = 'linear',
) → MeasureDefinition
@overload
atoti.agg.quantile(
    operand: VariableMeasureConvertible,
    /,
    q: _Quantile,
    *,
    mode: Literal[‘simple’, ‘centered’, ‘inc’, ‘exc’] = 'inc',
    interpolation: Literal[‘linear’, ‘higher’, ‘lower’, ‘nearest’, ‘midpoint’] = 'linear',
    scope: CumulativeScope | SiblingsScope | OriginScope,
) → MeasureDefinition
Return a measure equal to the requested quantile of the passed operand across the specified scope. Here is how to obtain the same behavior as these standard quantile calculation methods:
  • R-1: mode="centered" and interpolation="lower"
  • R-2: mode="centered" and interpolation="midpoint"
  • R-3: mode="simple" and interpolation="nearest"
  • R-4: mode="simple" and interpolation="linear"
  • R-5: mode="centered" and interpolation="linear"
  • R-6 (similar to Excel’s PERCENTILE.EXC): mode="exc" and interpolation="linear"
  • R-7 (similar to Excel’s PERCENTILE.INC): mode="inc" and interpolation="linear"
  • R-8 and R-9 are not supported
The formulae given for the calculation of the quantile index assume a 1-based indexing system.

Parameters

operand

The operand to get the quantile of.

q

The quantile to take. For instance, 0.95 is the 95th percentile and 0.5 is the median.

mode

The method used to calculate the index of the quantile. Available options are, when searching for the q quantile of a vector X:
  • simple: len(X) * q
  • centered: len(X) * q + 0.5
  • exc: (len(X) + 1) * q
  • inc: (len(X) - 1) * q + 1

interpolation

If the quantile index is not an integer, the interpolation decides what value is returned. The different options are, considering a quantile index k with i < k < j for a sorted vector X:
  • linear: v = X[i] + (X[j] - X[i]) * (k - i)
  • lower: v = X[i]
  • higher: v = X[j]
  • nearest: v = X[i] or v = X[j] depending on which of i or j is closest to k
  • midpoint: v = (X[i] + X[j]) / 2

scope

The aggregation scope.