Вложенный оператор верхнего уровня
Оператор 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 .
Чтобы включить все значения столбца на определенном уровне:
- Не указывайте значение N.
- Используйте имя столбца в качестве значения Expr.
- Используйте
Ignore=max(1)
в качестве значения агрегирования. - Удалите ненужный
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 |
Связанный контент
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по