Вложенный оператор верхнего уровня
Область применения: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Оператор 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, а другой столбец показывает результаты, полученные из вычисления агрегирования .
with
others
Использование предложения
top-nested
Использование оператора с with
others
добавлением возможности просмотра верхнего контекстуализуемого содержимого в более широком наборе данных. Оценка данных таким образом ценна при визуальной отрисовке данных.
Включение данных из других столбцов
В выходной top-nested
таблице отображаются только столбцы, указанные как предложение Expr .
Чтобы включить все значения столбца на определенном уровне:
- Не указывайте значение N.
- Используйте имя столбца в качестве значения Expr.
- Используйте
Ignore=max(1)
в качестве значения агрегирования. - Удалите ненужный
Ignore
столбец с помощью проекта.
Пример см. в разделе "Последние события для каждого состояния" с другими данными столбца.
Замечания, связанные с быстродействием
Число записей может увеличиваться экспоненциально с числом top-nested
предложений, а рост записи еще быстрее, если N-параметр не указан. Этот оператор может потреблять значительный объем ресурсов.
Если распределение агрегирования нерегулярно, ограничьте количество возвращаемых значений, указав N. Затем используйте with
others
=
предложение ConstExpr, чтобы получить представление о весе всех остальных вариантов.
Примеры
Основные поврежденные состояния, типы событий и конечные расположения по повреждению имущества
Следующий запрос секционирует StormEvents
таблицу по State
столбцу и вычисляет общий ущерб свойств для каждого состояния. Запрос выбирает первые два состояния с наибольшим количеством повреждений имущества. В этих первых двух состояниях запрос группирует данные EventType
по и выбирает первые три типа событий с наибольшим ущербом. Затем запрос группирует EndLocation
данные EndLocation
по и выбирает самый высокий ущерб. В результатах отображается только одно EndLocation
значение, возможно, из-за большого характера событий шторма или не документирования конечного расположения.
StormEvents // Data source.
| top-nested 2 of State by sum(DamageProperty), // Top 2 States by total damaged property.
top-nested 3 of EventType by sum(DamageProperty), // Top 3 EventType by total damaged property for each State.
top-nested 1 of EndLocation by sum(DamageProperty) // Top 1 EndLocation by total damaged property for each EventType and State.
| project State, EventType, EndLocation, StateTotalDamage = aggregated_State, EventTypeTotalDamage = aggregated_EventType, EndLocationDamage = aggregated_EndLocation
Выходные данные
Штат | EventType | EndLocation | StateTotalDamage | EventTypeTotalDamage | EndLocationDamage |
---|---|---|---|---|---|
CALIFORNIA | Wildfire | 1445937600 | 1326315000 | 1326315000 | |
CALIFORNIA | HighWind | 1445937600 | 61320000 | 61320000 | |
CALIFORNIA | Мусорный поток | 1445937600 | 48000000 | 48000000 | |
ОКЛАХОМА | IceStorm | 915470300 | 826000000 | 826000000 | |
ОКЛАХОМА | WinterStorm | 915470300 | 40027000 | 40027000 | |
ОКЛАХОМА | Наводнение | КОММЕРЧЕСКАЯ | 915470300 | 21485000 | 20000000 |
Первые пять состояний с повреждением имущества with
others
сгруппированы
В следующем примере оператор используется top-nested
для идентификации первых пяти состояний с наибольшим ущербом имущества и использует with
others
предложение для группировки поврежденного свойства для всех остальных состояний. Затем он визуализирует поврежденное свойство для первых пяти состояний и всех остальных состояний piechart
render
в качестве команды.
StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart
Выходные данные
Последние события для каждого состояния с другими данными столбца
Следующий запрос извлекает два последних события для каждого штата США с соответствующими сведениями о событии. Он используется max(1)
в определенных столбцах для распространения данных без использования логики выбора в верхней части. Созданные Ignore
столбцы агрегирования удаляются с помощью project-away
.
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
примере извлекаются последние записи для каждого удостоверения и создаются основные понятия, представленные в предыдущем примере. Первое top-nested
предложение секционирует данные по отдельным значениям id
использования Ignore0=max(1)
в качестве заполнителя. Для каждого id
из них определяется две последние записи на timestamp
основе . Другие сведения добавляются с помощью top-nested
оператора без указания количества и использования Ignore2=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 |