percentilew(), percentilesw() (агрегатная функция)

Функция percentilew() вычисляет взвешированную оценку для указанного ближайшего процентиля ранга генеральной совокупности, определенной expr. percentilesw() работает аналогично percentilew(). percentilesw() Однако можно вычислить несколько взвешанных значений процентиля одновременно, что более эффективно, чем вычисление каждого взвешаемого значения процентиля по отдельности.

Взвешиваемые процентили вычисляют процентили в наборе данных, придавая каждому значению входного набора данных вес. В этом методе каждое значение считается повторяться числом раз, равным его весу, который затем используется для вычисления процентиля. Придавая большее значение определенным значениям, взвешанные процентили предоставляют способ вычисления процентилей в "взвеше" образом.

Сведения о вычислении невзвешенных процентилей см. в разделе percentiles().

Примечание

Эта функция используется в сочетании с оператором summarize.

Синтаксис

percentilew(Expr,weightExpr,Процентиль)

percentilesw(Expr,weightExpr,Процентили)

Дополнительные сведения о соглашениях о синтаксисе.

Параметры

Имя Тип Обязательно Описание
expr string ✔️ Выражение, используемое для вычисления агрегирования.
weightExpr long ✔️ Вес, который необходимо присвоить каждому значению.
percentile int или long ✔️ Константа, задающая процентиль.
Процентили int или long ✔️ Один или несколько процентилей, разделенных запятыми.

Возвращаемое значение

Возвращает таблицу с оценками для экспра указанных процентилей в группе, каждый из которых содержится в отдельном столбце.

Примечание

Сведения о возврате процентилей в одном столбце см. в разделе Возврат процентилей в виде массива.

Примеры

Вычисление взвешанных процентилей

Предположим, что вы повторно измеряете время (длительность) выполнения действия. Вместо того чтобы записывать каждое значение измерения, вы записываете каждое значение Duration, округленное до 100 мс, и сколько раз появилось округленное значение (BucketSize).

Используйте для summarize percentilesw(Duration, BucketSize, ...) вычисления заданных процентилей в "взвешеном" способе. Рассматривайте каждое значение Duration так, как если бы оно повторялось во входных данных BucketSize, не требуя материализовать эти записи.

В следующем примере показаны взвешанные процентили. Использование следующего набора значений задержки в миллисекундах: { 1, 1, 2, 2, 2, 5, 7, 7, 12, 12, 15, 15, 15, 18, 21, 22, 26, 35 }.

Чтобы уменьшить пропускную способность и объем хранилища, выполните предварительную агрегацию в следующих контейнерах: { 10, 20, 30, 40, 50, 100 }. Подсчитайте количество событий в каждом контейнере, чтобы получить следующую таблицу:

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable

В таблице отображается следующее:

  • Восемь событий в контейнере 10 мс (соответствует подмножеству { 1, 1, 2, 2, 2, 5, 7, 7 })
  • Шесть событий в контейнере 20 мс (соответствует подмножеству { 12, 12, 15, 15, 15, 18 })
  • Три события в контейнере 30 мс (соответствующие подмножеству { 21, 22, 26 })
  • Одно событие в контейнере 40 мс (соответствует подмножеству { 35 })

На этом этапе исходные данные больше не доступны. Только количество событий в каждом контейнере. Для вычисления процентилей на основе этих данных используйте функцию percentilesw() . Для процентилей 50, 75 и 99,9 используйте следующий запрос:

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable
| summarize percentilesw(LatencyBucket, ReqCount, 50, 75, 99.9)

Выходные данные

percentile_LatencyBucket_50 percentile_LatencyBucket_75 percentile_LatencyBucket_99_9
20 20 40

Возврат процентилей в виде массива

Вместо возврата значений в отдельных столбцах используйте функцию percentilesw_array() для возврата процентилей в одном столбце типа динамического массива.

Синтаксис

percentilesw_array(Expr,weightExpr,Процентили)

Параметры

Имя Тип Обязательно Описание
expr string ✔️ Выражение, используемое для вычисления агрегирования.
Процентили int, long или dynamic ✔️ Один или несколько процентилей, разделенных запятыми, или динамический массив процентилей. Каждый процентиль может быть целым или длинным значением.
weightExpr long ✔️ Вес, который необходимо присвоить каждому значению.

Возвращаемое значение

Возвращает оценку для экспра указанных процентилей в группе в виде одного столбца типа динамического массива.

Примеры

Процентили, разделенные запятыми

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable
| summarize percentilesw_array(LatencyBucket, ReqCount, 50, 75, 99.9)

Выходные данные

percentile_LatencyBucket
[20, 20, 40]

Динамический массив процентилей

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable
| summarize percentilesw_array(LatencyBucket, ReqCount, dynamic([50, 75, 99.9]))

Выходные данные

percentile_LatencyBucket
[20, 20, 40]