Operador top-nested

Se aplica a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

El top-nested operador realiza la agregación jerárquica y la selección de valores.

Imagine que tiene una tabla con información de ventas como regiones, vendedores y cantidades vendidas. El top-nested operador puede ayudarle a responder preguntas complejas, como "¿Cuáles son las cinco principales regiones por ventas y cuáles son los tres principales vendedores de cada una de esas regiones?"

Los datos de origen se particionan en función de los criterios establecidos en la primera top-nested cláusula, como la región. A continuación, el operador elige los registros principales de cada partición mediante una agregación, como agregar cantidades de ventas. Cada cláusula posterior top-nested refina las particiones creadas por la cláusula anterior, creando una jerarquía de grupos más precisos.

El resultado es una tabla con dos columnas por cláusula. Una columna contiene los valores de creación de particiones, como región, mientras que la otra columna contiene los resultados del cálculo de agregación, como la suma de ventas.

Sintaxis

T top-nested | [ N ] of Expr [with others = ConstExpr] by Aggregation [asc | desc] [,
  top-nested ... ]

Obtenga más información sobre las convenciones de sintaxis.

Parámetros

Nombre Type Obligatorio Descripción
T string ✔️ Expresión tabular de entrada.
N. int Número de valores principales que se van a devolver para este nivel de jerarquía. Si se omite, se devuelven todos los valores distintos.
Expr string ✔️ Expresión sobre el registro de entrada que indica qué valor se va a devolver para este nivel de jerarquía. Normalmente, hace referencia a una columna de T o implica un cálculo como bin() en una columna. Opcionalmente, establezca un nombre de columna de salida como Name = Expr.
ConstExpr string Si se especifica, para cada nivel de jerarquía, se agrega un registro con el valor que es la agregación en todos los registros que no lo han establecido en la parte superior.
Agregación string Función de agregación aplicada a registros con el mismo valor expr . El resultado determina los registros principales. Consulte Funciones de agregación admitidas. Opcionalmente, establezca un nombre de columna de salida como Agregación de =nombres.

Funciones de agregación admitidas

Se admiten las siguientes funciones de agregación:

Nota:

También se admite cualquier combinación algebraica de las agregaciones.

Devoluciones

Tabla con dos columnas para cada cláusula. Una columna contiene valores únicos calculados mediante Expr y la otra columna muestra los resultados obtenidos del cálculo de agregación.

Uso de la with others cláusula

El uso del top-nested operador con with others agrega la capacidad de ver el contenido superior contextualizado en un conjunto de datos más amplio. Evaluar los datos de esta manera es útil al representar los datos visualmente.

Incluir datos de otras columnas

Solo se muestran las columnas especificadas como cláusula top-nested Expr en la tabla de salida.

Para incluir todos los valores de una columna en un nivel específico:

  1. No especifique el valor de N.
  2. Use el nombre de columna como valor de Expr.
  3. Use Ignore=max(1) como valor de Aggregation.
  4. Quite la columna innecesaria Ignore con project-away.

Para obtener un ejemplo, consulte Eventos más recientes por estado con otros datos de columna.

Consideraciones sobre el rendimiento

El número de registros puede crecer exponencialmente con el número de cláusulas y el crecimiento del top-nested registro es aún más rápido si no se especifica el parámetro N . Este operador puede consumir una cantidad considerable de recursos.

Si la distribución de agregaciones es irregular, limite el número de valores distintos que se van a devolver especificando N. A continuación, use la with others = cláusula ConstExpr para obtener una idea del peso de todos los demás casos.

Ejemplos

Principales estados dañados, tipos de eventos y ubicaciones finales por daños en la propiedad

La consulta siguiente particiona la StormEvents tabla por la State columna y calcula el daño total de la propiedad para cada estado. La consulta selecciona los dos estados principales con la mayor cantidad de daños en la propiedad. Dentro de estos dos estados principales, la consulta agrupa los datos por EventType y selecciona los tres tipos de eventos principales con mayor daño. A continuación, la consulta agrupa los datos por EndLocation y selecciona con EndLocation el daño más alto. Solo aparece un EndLocation valor en los resultados, posiblemente debido a la gran naturaleza de los eventos de tormenta o no documentar la ubicación final.

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

Salida

State EventType EndLocation StateTotalDamage EventTypeTotalDamage EndLocationDamage
CALIFORNIA Wildfire 1445937600 1326315000 1326315000
CALIFORNIA HighWind 1445937600 61320000 61320000
CALIFORNIA DebrisFlow 1445937600 48000000 48000000
OKLAHOMA IceStorm 915470300 826000000 826000000
OKLAHOMA WinterStorm 915470300 40027000 40027000
OKLAHOMA Inundación COMERCIO 915470300 21485000 20000000

Cinco estados principales con daños de with others propiedad agrupados

En el ejemplo siguiente se usa el top-nested operador para identificar los cinco estados principales con la mayor cantidad de daños en la propiedad y se usa la cláusula para agrupar la with others propiedad dañada para todos los demás estados. A continuación, visualiza la propiedad dañada para los cinco estados principales y todos los demás estados como mediante piechart el render comando .

StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart  

Salida

Captura de pantalla de los cinco estados principales con la propiedad más dañada y todos los demás estados agrupados por separado se representan como gráfico circular.

Eventos más recientes por estado con otros datos de columna

La consulta siguiente recupera los dos eventos más recientes para cada estado de EE. UU. con los detalles de eventos pertinentes. Usa max(1) dentro de determinadas columnas para propagar datos sin usar la lógica de selección anidada superior. Las columnas de agregación generadas Ignore se quitan mediante 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.

Registros más recientes por identidad con otros datos de columna

En el ejemplo siguiente top-nested se extraen los registros más recientes por identidad y se basan en los conceptos introducidos en el ejemplo anterior. La primera top-nested cláusula particiona los datos por valores distintos de uso Ignore0=max(1) como marcador de id posición. Para cada id, identifica los dos registros más recientes en función de timestamp. Otra información se anexa mediante un top-nested operador sin especificar un recuento y usar Ignore2=max(1) como marcador de posición. Por último, las columnas de agregación innecesarias se quitan mediante el project-away operador .

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.

Salida

id timestamp otherInformation
Barak 2016-01-01T00:00:00Z 2
Donald 2017-01-19T00:00:00Z 6
Barak 2017-01-20T00:00:00Z 3
Donald 2017-01-20T00:00:00Z 4