Поделиться через


Вложенный оператор верхнего уровня

Оператор top-nested выполняет иерархическую агрегирование и выбор значений.

Представьте, что у вас есть таблица с информацией о продажах, таких как регионы, продавцы и суммы проданы. Оператор top-nested может помочь вам ответить на сложные вопросы, такие как "Каковы топ-пять регионов по продажам, и кто является топ-три продавца в каждом из этих регионов?"

Исходные данные секционируются на основе условий, заданных в первом top-nested предложении, таких как регион. Затем оператор выбирает верхние записи в каждой секции с помощью агрегирования, например добавления сумм продаж. Каждое последующее top-nested предложение обновляет секции, созданные предыдущим предложением, создавая иерархию более точных групп.

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

Синтаксис

T top-nested | [ N ] of Expr [with = others ConstExpr] by Агрегирование [asc | desc] [ [,
  top-nested ... ]

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

Параметры

Имя (название) Type Обязательно Описание
T string ✔️ Входное табличное выражение.
N int Количество возвращаемых верхних значений для этого уровня иерархии. Если опущено, возвращаются все уникальные значения.
Expr string ✔️ Выражение по входной записи, указывающее, какое значение необходимо вернуть для этого уровня иерархии. Как правило, он ссылается на столбец из T или включает вычисление, например bin() в столбце. При необходимости задайте имя выходного столбца в качестве имени Expr = .
ConstExpr string Если задано, для каждого уровня иерархии добавляется одна запись со значением, которое является агрегированием для всех записей, которые не сделали его в верхней части.
Агрегат string Функция агрегирования, применяемая к записям с тем же значением Expr . Результат определяет верхние записи. См. сведения о поддерживаемых функциях агрегирования. При необходимости задайте имя выходного столбца в качестве агрегирования имени = .

Поддерживаемые функции агрегирования

Поддерживаются следующие функции агрегирования:

Примечание.

Также поддерживается любое сочетание алгебраических агрегатов.

Возвраты

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

Включение данных из других столбцов

В выходной top-nested таблице отображаются только столбцы, указанные как предложение Expr .

Чтобы включить все значения столбца на определенном уровне:

  1. Не указывайте значение N.
  2. Используйте имя столбца в качестве значения Expr.
  3. Используйте Ignore=max(1) в качестве значения агрегирования.
  4. Удалите ненужный Ignore столбец с помощью проекта.

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

Замечания, связанные с быстродействием

Число записей может увеличиваться экспоненциально с числом top-nested предложений, а рост записей еще быстрее, если не указано ограничение N . Этот оператор может потреблять значительный объем ресурсов.

Если распределение агрегата значительно не однородно, ограничьте количество уникальных значений, возвращаемых путем указания N. Затем используйте with others = спецификацию ConstExpr, чтобы получить указание на вес всех остальных вариантов.

Примеры

Начало работы с оператором top-nested

Следующий запрос секционирует StormEvents таблицу по столбцу State и вычисляет общую широту для каждого состояния. Запрос выбирает первые два состояния с самой высокой суммой широты. В этих двух верхних состояниях запрос группирует данные Source по и выбирает первые три источника с самой высокой суммой широты. Для каждого из трех источников в двух верхних состояниях запрос группирует данные EndLocation по и выбирает EndLocation самую высокую сумму широты.

StormEvents                                        // Data source.
| top-nested 2 of State       by sum(BeginLat),    // Top 2 States by total latitude.
  top-nested 3 of Source      by sum(BeginLat),    // Top 3 Sources by total latitude in each State.
  top-nested 1 of EndLocation by sum(BeginLat)     // Top 1 EndLocation by total latitude in each Source and State.

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

Штат aggregated_State Исходный код aggregated_Source EndLocation aggregated_EndLocation
КАНЗАС 87771.2355000001 Правоприменение 18744.823 FT СКОТТ 264.858
КАНЗАС 87771.2355000001 Общедоступный 22855.6206 БАКЛИН 488.2457
КАНЗАС 87771.2355000001 Подготовленный корректировщик 21279.7083 SHARON SPGS 388.7404
TEXAS 123400.5101 Общедоступный 13650.9079 АМАРИЛЛО 246.2598
TEXAS 123400.5101 Правоприменение 37228.5966 ПЕРРИТОН 289.3178
TEXAS 123400.5101 Подготовленный корректировщик 13997.7124 КЛОД 421.44

Улучшение вложенных результатов с помощью данных из другого столбца

Следующий запрос основан на предыдущем примере, введя дополнительное top-nested предложение. В этом новом предложении отсутствие числовых спецификаций приводит к извлечению всех отдельных значений EventType между секциями. Функция max(1) агрегирования — это просто заполнитель, отрисовка его результата не имеет значения, поэтому оператор project-away удаляет Ignore столбец. В результате показаны все типы событий, связанные с ранее агрегированными данными.

StormEvents
| top-nested 2 of State       by sum(BeginLat),
  top-nested 3 of Source      by sum(BeginLat),
  top-nested 1 of EndLocation by sum(BeginLat),
  top-nested   of EventType   by Ignore = max(1)
| project-away Ignore

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

Штат aggregated_State Исходный код aggregated_Source EndLocation aggregated_EndLocation EventType
TEXAS 123400.51009999994 Общедоступный 13650.907900000002 АМАРИЛЛО 246.25979999999998 Град
TEXAS 123400.51009999994 Общедоступный 13650.907900000002 АМАРИЛЛО 246.25979999999998 Ураганный ветер
КАНЗАС 87771.235500000068 Общедоступный 22855.6206 БАКЛИН 488.2457 Наводнение
КАНЗАС 87771.235500000068 Общедоступный 22855.6206 БАКЛИН 488.2457 Ураганный ветер
КАНЗАС 87771.235500000068 Общедоступный 22855.6206 БАКЛИН 488.2457 Град
TEXAS 123400.51009999994 Подготовленный корректировщик 13997.712400000009 КЛОД 421.44 Град
КАНЗАС 87771.235500000068 Правоприменение 18744.823000000004 FT СКОТТ 264.858 Паводок
КАНЗАС 87771.235500000068 Правоприменение 18744.823000000004 FT СКОТТ 264.858 Ураганный ветер
КАНЗАС 87771.235500000068 Правоприменение 18744.823000000004 FT СКОТТ 264.858 Наводнение
TEXAS 123400.51009999994 Правоприменение 37228.596599999961 ПЕРРИТОН 289.3178 Град
... ... ... ... ... ...

Использование with others для изучения исключенных данных

При включении в top-nested предложение with others спецификация представляет дополнительную запись, которая объединяет данные, исключенные из лучших результатов. В следующем запросе в столбцах создается State aggregated_State дополнительная запись, представляющая общую широту всех штатов, кроме Канзаса и Техаса. Кроме того, в aggregated_EndLocation столбце EndLocation есть дополнительные девять записей. Эти записи показывают объединенную широту конечных расположений, которые не соответствуют верхнему расположению в каждом состоянии и источнике.

StormEvents
| top-nested 2 of State with others = "All Other States" by sum(BeginLat),
  top-nested 3 of Source by sum(BeginLat),
  top-nested 1 of EndLocation with others = "All Other End Locations" by sum(BeginLat)

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

Штат aggregated_State Исходный код aggregated_Source EndLocation aggregated_EndLocation
КАНЗАС 87771.2355000001 Правоприменение 18744.823 FT СКОТТ 264.858
КАНЗАС 87771.2355000001 Общедоступный 22855.6206 БАКЛИН 488.2457
КАНЗАС 87771.2355000001 Подготовленный корректировщик 21279.7083 SHARON SPGS 388.7404
TEXAS 123400.5101 Общедоступный 13650.9079 АМАРИЛЛО 246.2598
TEXAS 123400.5101 Правоприменение 37228.5966 ПЕРРИТОН 289.3178
TEXAS 123400.5101 Подготовленный корректировщик 13997.7124 КЛОД 421.44
КАНЗАС 87771.2355000001 Правоприменение 18744.823 Все остальные конечные расположения 18479.965
КАНЗАС 87771.2355000001 Общедоступный 22855.6206 Все остальные конечные расположения 22367.3749
КАНЗАС 87771.2355000001 Подготовленный корректировщик 21279.7083 Все остальные конечные расположения 20890.9679
TEXAS 123400.5101 Общедоступный 13650.9079 Все остальные конечные расположения 13404.6481
TEXAS 123400.5101 Правоприменение 37228.5966 Все остальные конечные расположения 36939.2788
TEXAS 123400.5101 Подготовленный корректировщик 13997.7124 Все остальные конечные расположения 13576.2724
КАНЗАС 87771.2355000001 Все остальные конечные расположения 24891.0836
TEXAS 123400.5101 Все остальные конечные расположения 58523.2932000001
Все остальные государства 1149279.5923 Все остальные конечные расположения 1149279.5923

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

StormEvents
| where State !in ('TEXAS', 'KANSAS')
| summarize sum(BeginLat)

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

sum_BeginLat
1149279.5923

Сортировка иерархических результатов

Для достижения комплексного порядка сортировки в следующем запросе используется сортировка на основе индекса для каждого значения в пределах текущего уровня иерархии для каждой группы. Эта сортировка направлена на упорядочение результата в соответствии с конечным вложенным уровнем, в данном случае EndLocation.

StormEvents
| top-nested 2 of State by sum(BeginLat),
  top-nested 2 of Source by sum(BeginLat),
  top-nested 4 of EndLocation by sum(BeginLat)
| sort by State, Source, aggregated_EndLocation
| summarize
    EndLocations = make_list(EndLocation, 10000),
    endLocationSums = make_list(aggregated_EndLocation, 10000)
    by State, Source
| extend indicies = range(0, array_length(EndLocations) - 1, 1)
| mv-expand EndLocations, endLocationSums, indicies

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

Штат Исходный код EndLocations endLocationSums indices
TEXAS Подготовленный корректировщик КЛОД 421.44 0
TEXAS Подготовленный корректировщик АМАРИЛЛО 316.8892 1
TEXAS Подготовленный корректировщик DALHART 252.6186 2
TEXAS Подготовленный корректировщик ПЕРРИТОН 216.7826 3
TEXAS Правоприменение ПЕРРИТОН 289.3178 0
TEXAS Правоприменение ЛИКИ 267.9825 1
TEXAS Правоприменение BRACKETTVILLE 264.3483 2
TEXAS Правоприменение ГИЛМЕР 261.9068 3
КАНЗАС Подготовленный корректировщик SHARON SPGS 388.7404 0
КАНЗАС Подготовленный корректировщик ЭТВУД 358.6136 1
КАНЗАС Подготовленный корректировщик LENORA 317.0718 2
КАНЗАС Подготовленный корректировщик СКОТТ СИТИ 307.84 3
КАНЗАС Общедоступный БАКЛИН 488.2457 0
КАНЗАС Общедоступный ЭШЛАНД 446.4218 1
КАНЗАС Общедоступный ЗАЩИТА 446.11 2
КАНЗАС Общедоступный MEADE STATE PARK 371.1 3

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

В следующем запросе показано, как получить два последних события для каждого штата США вместе с соответствующими сведениями о событии. Обратите внимание на использование max(1) в определенных столбцах, определяемых с помощью Ignore*средства распространения данных по запросу без применения логики выбора.

StormEvents
| top-nested of State by Ignore0=max(1),                  // Partition the data by each unique value of state.
  top-nested 2 of StartTime by Ignore1=max(StartTime),    // Get the 2 most recent events in each state.
  top-nested of EndTime by Ignore2=max(1),                // Append the EndTime for each event.
  top-nested of EpisodeId by Ignore3=max(1)               // Append the EpisodeId for each event.
| project-away Ignore*                                    // Remove the unnecessary aggregation columns.
| order by State asc, StartTime desc                      // Sort results alphabetically and chronologically.

Получение последних записей на удостоверение с дополнительными данными из других столбцов

В следующем запросе показано, как извлечь последние записи для каждого удостоверения и создать основные понятия, представленные в предыдущем примере. Первое top-nested предложение секционирует данные по отдельным значениям id. Следующее предложение определяет две последние записи на timestamp основе каждого из них id. Другие сведения добавляются с помощью top-nested оператора вместе с неопределенным числом и произвольным max(1) агрегированием. Наконец, ненужные столбцы агрегирования удаляются с помощью project-away оператора.

datatable(id: string, timestamp: datetime, otherInformation: string) // Create a source datatable.
[
    "Barak", datetime(2015-01-01), "1",
    "Barak", datetime(2016-01-01), "2",
    "Barak", datetime(2017-01-20), "3",
    "Donald", datetime(2017-01-20), "4",
    "Donald", datetime(2017-01-18), "5",
    "Donald", datetime(2017-01-19), "6"
]
| top-nested of id by Ignore0=max(1),                     // Partition the data by each unique value of id.
  top-nested 2 of timestamp by Ignore1=max(timestamp),    // Get the 2 most recent events for each state.
  top-nested of otherInformation by Ignore2=max(1)        // Append otherInformation for each event.
| project-away Ignore0, Ignore1, Ignore2                  // Remove the unnecessary aggregation columns.

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

id TIMESTAMP otherInformation
Барак 2016-01-01T00:00:00Z 2
Дональд 2017-01-19T00:00:00Z 6
Барак 2017-01-20T00:00:00Z 3
Дональд 2017-01-20T00:00:00Z 4