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


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

Область применения: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft 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 .

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

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