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

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

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

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

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

Синтаксис

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

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

Параметры

Имя Тип Обязательно Описание
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 столбец с помощью project-away.

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

Вопросы производительности

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

Если распределение агрегирования значительно неоднородно, ограничьте количество возвращаемых различных значений, указав N. Затем используйте спецификацию withothers=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 Source aggregated_Source EndLocation aggregated_EndLocation
Канзас 87771.2355000001 Правоприменение 18744.823 FT SCOTT 264.858
Канзас 87771.2355000001 Общедоступные 22855.6206 БАКЛИН 488.2457
Канзас 87771.2355000001 Подготовленный корректировщик 21279.7083 SHARON SPGS 388.7404
Техас 123400.5101 Общедоступные 13650.9079 АМАРИЛЛО 246.2598
Техас 123400.5101 Правоприменение 37228.5966 ПЕРРИТОН 289.3178
Техас 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 Source aggregated_Source EndLocation aggregated_EndLocation EventType
Техас 123400.51009999994 Общедоступные 13650.907900000002 АМАРИЛЛО 246.25979999999998 Град
Техас 123400.51009999994 Общедоступные 13650.907900000002 АМАРИЛЛО 246.25979999999998 Шквалистый ветер
Канзас 87771.235500000068 Общедоступные 22855.6206 БАКЛИН 488.2457 Наводнение
Канзас 87771.235500000068 Общедоступные 22855.6206 БАКЛИН 488.2457 Шквалистый ветер
Канзас 87771.235500000068 Общедоступные 22855.6206 БАКЛИН 488.2457 Град
Техас 123400.51009999994 Подготовленный корректировщик 13997.712400000009 КЛОД 421.44 Град
Канзас 87771.235500000068 Правоприменение 18744.823000000004 FT SCOTT 264.858 Внезапное наводнение
Канзас 87771.235500000068 Правоприменение 18744.823000000004 FT SCOTT 264.858 Шквалистый ветер
Канзас 87771.235500000068 Правоприменение 18744.823000000004 FT SCOTT 264.858 Наводнение
Техас 123400.51009999994 Правоприменение 37228.596599999961 ПЕРРИТОН 289.3178 Град
... ... ... ... ... ...

Использование withothers для просмотра исключенных данных

При включении в top-nested предложение спецификация withothers вводит дополнительную запись, которая агрегирует данные, исключенные из лучших результатов. В следующем запросе в State столбцах и aggregated_State создается дополнительная запись, представляющая общую широту всех штатов, за исключением Канзаса и Техаса. Кроме того, EndLocation столбец и aggregated_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 Source aggregated_Source EndLocation aggregated_EndLocation
Канзас 87771.2355000001 Правоприменение 18744.823 FT SCOTT 264.858
Канзас 87771.2355000001 Общедоступные 22855.6206 БАКЛИН 488.2457
Канзас 87771.2355000001 Подготовленный корректировщик 21279.7083 ШЭРОН SPGS 388.7404
Техас 123400.5101 Общедоступные 13650.9079 АМАРИЛЛО 246.2598
Техас 123400.5101 Правоприменение 37228.5966 ПЕРРИТОН 289.3178
Техас 123400.5101 Подготовленный корректировщик 13997.7124 КЛОД 421.44
Канзас 87771.2355000001 Правоприменение 18744.823 Все остальные конечные расположения 18479.965
Канзас 87771.2355000001 Общедоступные 22855.6206 Все остальные конечные расположения 22367.3749
Канзас 87771.2355000001 Подготовленный корректировщик 21279.7083 Все остальные конечные расположения 20890.9679
Техас 123400.5101 Общедоступные 13650.9079 Все остальные конечные расположения 13404.6481
Техас 123400.5101 Правоприменение 37228.5966 Все остальные конечные расположения 36939.2788
Техас 123400.5101 Подготовленный корректировщик 13997.7124 Все остальные конечные расположения 13576.2724
Канзас 87771.2355000001 Все остальные конечные расположения 24891.0836
Техас 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

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

Состояние Source EndLocations endLocationSums indices
Техас Подготовленный корректировщик КЛОД 421.44 0
Техас Подготовленный корректировщик АМАРИЛЛО 316.8892 1
Техас Подготовленный корректировщик ДАЛХАРТ 252.6186 2
Техас Подготовленный корректировщик ПЕРРИТОН 216.7826 3
Техас Правоприменение ПЕРРИТОН 289.3178 0
Техас Правоприменение ЛИКИ 267.9825 1
Техас Правоприменение БРЕКЕТВИЛЛЬ 264.3483 2
Техас Правоприменение ГИЛМЕР 261.9068 3
Канзас Подготовленный корректировщик SHARON SPGS 388.7404 0
Канзас Подготовленный корректировщик ЭТВУД 358.6136 1
Канзас Подготовленный корректировщик LENORA 317.0718 2
Канзас Подготовленный корректировщик СКОТТ-СИТИ 307.84 3
Канзас Общедоступные БАКЛИН 488.2457 0
Канзас Общедоступные ASHLAND 446.4218 1
Канзас Общедоступные ЗАЩИТЫ 446.11 2
Канзас Общедоступные МИД СТЕЙТ ПАРК 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. Последующее предложение определяет две самые последние записи на основе для каждой timestampid. Другие сведения добавляются с помощью 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.

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

идентификатор 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