Вложенный оператор верхнего уровня
Оператор top-nested
выполняет иерархическое агрегирование и выбор значений.
Представьте, что у вас есть таблица со сведениями о продажах, такими как регионы, продавцы и суммы продаж. Оператор top-nested
может помочь вам ответить на сложные вопросы, такие как "Какие пять лучших регионов по продажам, и кто является тремя лучшими продавцами в каждом из этих регионов?"
Исходные данные секционируются на основе критериев, заданных в первом top-nested
предложении, например region. Затем оператор выбирает верхние записи в каждой секции с помощью агрегирования, например сложения сумм продаж. Каждое последующее top-nested
предложение уточняет секции, созданные предыдущим предложением, создавая иерархию более точных групп.
Результатом будет таблица с двумя столбцами в каждом предложении. Один столбец содержит значения секционирования, такие как регион, а другой столбец содержит результаты вычисления агрегирования, например сумму продаж.
Синтаксис
T|
top-nested
[ N ] of
Expr [with
others
=
ConstExpr] by
Агрегирование [asc
| desc
] [,
top-nested
... ]
Дополнительные сведения о соглашениях о синтаксисе.
Параметры
Имя | Тип | Обязательно | Описание |
---|---|---|---|
T | string |
✔️ | Входное табличное выражение. |
N | int |
Количество верхних значений, возвращаемых для этого уровня иерархии. Если этот параметр опущен, возвращаются все уникальные значения. | |
Expr | string |
✔️ | Выражение над входной записью, указывающее, какое значение следует вернуть для этого уровня иерархии. Как правило, он ссылается на столбец из T или включает вычисление, например bin() для столбца. При необходимости задайте имя выходного столбца в качестве имени= expr. |
ConstExpr | string |
Если этот параметр указан, для каждого уровня иерархии добавляется одна запись со значением, которое является агрегированием для всех записей, которые не попали в верхнюю часть. | |
Агрегирование | string |
Функция агрегирования, применяемая к записям с тем же значением Expr . Результат определяет верхние записи. См. раздел Поддерживаемые статистические функции. При необходимости задайте имя выходного столбца какАгрегированиеимен= . |
Поддерживаемые агрегатные функции
Поддерживаются следующие статистические функции:
Примечание
Также поддерживается любое алгебраическое сочетание агрегатов.
Возвращаемое значение
Таблица с двумя столбцами для каждого предложения. Один столбец содержит уникальные значения, вычисленные с помощью expr, а другой — результаты вычисления агрегирования .
Включение данных из других столбцов
В выходной top-nested
таблице отображаются только столбцы, указанные в виде предложения Expr .
Чтобы включить все значения столбца на определенном уровне, выполните следующие действия.
- Не указывайте значение N.
- Используйте имя столбца в качестве значения expr.
- Используйте
Ignore=max(1)
в качестве значения агрегирования. - Удалите ненужный
Ignore
столбец с помощью project-away.
Пример см. в разделе Получение последних событий для каждого состояния с дополнительными данными из других столбцов.
Вопросы производительности
Количество записей может увеличиваться экспоненциально с количеством 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 | 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 | Град |
... | ... | ... | ... | ... | ... |
Использование with
others
для просмотра исключенных данных
При включении в top-nested
предложение спецификация with
others
вводит дополнительную запись, которая агрегирует данные, исключенные из лучших результатов. В следующем запросе в 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
. Последующее предложение определяет две самые последние записи на основе для каждой 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.
Выходные данные
идентификатор | 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 |
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по