toscalar()

Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

Возвращает скалярное постоянное значение вычисленного выражения.

Эта функция полезна для запросов, требующих поэтапного вычисления. Например, вычислите общее количество событий, а затем используйте результат для фильтрации групп, превышающих определенный процент всех событий.

Все два оператора разделены точкой с запятой.

Синтаксис

toscalar( выражение)

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

Параметры

Имя (название) Type Обязательно Описание
выражение string ✔️ Значение для преобразования в скалярное значение.

Возвраты

Скалярное константное значение вычисляемого выражения. Если результат является табличным, для преобразования берется первый столбец и первая строка.

Совет

При использовании можно использовать toscalar() let для удобочитаемости запроса.

Ограничения

toscalar() Нельзя применять к сценарию, применяющей функцию к каждой строке. Это связано с тем, что функция может вычисляться только постоянное количество раз во время выполнения запроса. Обычно при достижении этого ограничения возвращается следующая ошибка: can't use '<column name>' as it is defined outside its row-context scope.

В следующем примере запрос завершается ошибкой:

'toscalar': can't use 'x' as it is defined outside its row-context scope.

let _dataset1 = datatable(x:long)[1,2,3,4,5];
let _dataset2 = datatable(x:long, y:long) [ 1, 2, 3, 4, 5, 6];
let tg = (x_: long)
{
    toscalar(_dataset2| where x == x_ | project y);
};
_dataset1
| extend y = tg(x)

Этот сбой join можно устранить с помощью оператора, как показано в следующем примере:

let _dataset1 = datatable(x: long)[1, 2, 3, 4, 5];
let _dataset2 = datatable(x: long, y: long) [1, 2, 3, 4, 5, 6];
_dataset1
| join (_dataset2) on x 
| project x, y

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

x г
1 2
3 4
5 6

Дополнительные шаблоны устранения рисков для реальных сценариев

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

| extend result = toscalar(T | where Key == key | summarize max(Value))

Этот шаблон завершается ошибкой, так как toscalar() не может быть вычисляться один раз в каждой строке. Используйте один из поддерживаемых шаблонов устранения рисков ниже.

  1. Предварительно объединяйте данные один раз, а затем присоедините агрегированные результаты к основной таблице для повышения эффективности.
let summary =
    T
    | summarize maxValue = max(Value) by Key;

Dataset1
| join kind=leftouter summary on Key
| project Key, maxValue
  1. Используется arg_max() для извлечения строки с наибольшим значением. Это полезно, если требуется максимальное значение и связанные столбцы.
let summary =
    T
    | summarize arg_max(Timestamp, *) by Key;

Dataset1
| lookup summary on Key
  1. lookup Используйте для сопоставления ключей и значений, чтобы избежать нарушений контекста строк и обеспечить эффективные подстановки таблиц измерений.
let lookupTable =
    T | summarize maxValue = max(Value) by Key;

Dataset1
| lookup lookupTable on Key
  1. Использование функций окна или make-series агрегатов временных окон
Dataset1
| make-series maxValue = max(Value)
      on Timestamp
      from ago(1h) to now()
      step 1m
      by Key

Примеры

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

Установка диапазона для оценки

Оцените Start, Endа Step также скалярные константы и используйте результат для range оценки.

let Start = toscalar(print x=1);
let End = toscalar(range x from 1 to 9 step 1 | count);
let Step = toscalar(2);
range z from Start to End step Step | extend start=Start, end=End, step=Step

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

z start end step
1 1 9 2
3 1 9 2
5 1 9 2
7 1 9 2
9 1 9 2

Создание фиксированного и динамического GUID

В следующем примере показано, как можно использовать toscalar() для создания фиксированных guid, вычисляемых точно один раз и динамических значений для guid.

let g1 = toscalar(new_guid());
let g2 = new_guid();
range x from 1 to 2 step 1
| extend x=g1, y=g2

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

x г
e6a15e72-756d-4c93-93d3-fe85c18d19a3 c2937642-0d30-4b98-a157-a6706e217620
e6a15e72-756d-4c93-93d3-fe85c18d19a3 c6a48cb3-9f98-4670-bf5b-589d0e0dcaf5